From 43d8f6e5ffc18cb5fd07e46de42728c487ffebd9 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 8 May 2020 18:52:19 +0200 Subject: [PATCH 01/24] Add support button --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fa54ae20b..7ba373c84 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ android { defaultConfig { minSdkVersion 19 targetSdkVersion 29 - versionCode 365 - versionName "2.35.2" + versionCode 366 + versionName "2.35.3" multiDexEnabled true renderscriptTargetApi 28 as int renderscriptSupportModeEnabled true From 6dab48af0c86f758800ac92aa69af6bb99fcb708 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 9 May 2020 12:29:44 +0200 Subject: [PATCH 02/24] Fix corgidon support --- app/src/main/java/app/fedilab/android/client/API.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index 43007d129..b49b2b44c 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -2205,6 +2205,9 @@ public class API { JSONObject resobj = new JSONObject(response); JSONObject jsonObject = resobj.getJSONObject("software"); String name = jsonObject.getString("name").toUpperCase(); + if( name.compareTo("CORGIDON") == 0 ){ + name = "MASTODON"; + } instanceNodeInfo.setName(name); instanceNodeInfo.setVersion(jsonObject.getString("version")); instanceNodeInfo.setOpenRegistrations(resobj.getBoolean("openRegistrations")); From 8914ac7c3270d0b29890afd305299fae23fde577 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 10 May 2020 11:19:22 +0200 Subject: [PATCH 03/24] some changes --- app/build.gradle | 4 +- .../java/app/fedilab/android/client/API.java | 3 ++ .../android/client/Entities/Status.java | 27 ++++++++++++++ .../android/drawers/StatusListAdapter.java | 4 +- .../app/fedilab/android/helper/Helper.java | 37 +++++++++++-------- 5 files changed, 56 insertions(+), 19 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6e554190e..5d3fd286a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 29 - buildToolsVersion "29.0.2" + buildToolsVersion "29.0.3" defaultConfig { minSdkVersion 19 targetSdkVersion 29 @@ -87,7 +87,7 @@ dependencies { } annotationProcessor "com.github.bumptech.glide:compiler:4.11.0" annotationProcessor 'com.android.support:support-annotations:28.0.0' - implementation "org.conscrypt:conscrypt-android:2.2.1" + implementation "org.conscrypt:conscrypt-android:2.4.0" implementation "com.evernote:android-job:1.2.6" implementation "com.google.code.gson:gson:2.8.5" implementation "com.google.guava:guava:28.2-android" diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index 9d48bac3a..dd1014435 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -2195,6 +2195,9 @@ public class API { JSONObject resobj = new JSONObject(response); JSONObject jsonObject = resobj.getJSONObject("software"); String name = jsonObject.getString("name").toUpperCase(); + if( name.compareTo("CORGIDON") == 0 ){ + name = "MASTODON"; + } instanceNodeInfo.setName(name); instanceNodeInfo.setVersion(jsonObject.getString("version")); instanceNodeInfo.setOpenRegistrations(resobj.getBoolean("openRegistrations")); diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Status.java b/app/src/main/java/app/fedilab/android/client/Entities/Status.java index cee832d47..183203e85 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Status.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Status.java @@ -309,6 +309,33 @@ public class Status implements Parcelable { } } + matcher = Helper.ouichesPattern.matcher(content); + + while (matcher.find()) { + Attachment attachment = new Attachment(); + attachment.setType("audio"); + String tag = matcher.group(1); + attachment.setId(tag); + if( tag == null){ + continue; + } + attachment.setRemote_url("https://ouich.es/mp3/"+tag+".mp3"); + attachment.setUrl("https://ouich.es/mp3/"+tag+".mp3"); + if( status.getMedia_attachments() == null) { + status.setMedia_attachments(new ArrayList<>()); + } + boolean alreadyAdded = false; + for(Attachment at: status.getMedia_attachments()){ + if( tag.compareTo(at.getId()) == 0 ){ + alreadyAdded = true; + break; + } + } + if( !alreadyAdded) { + status.getMedia_attachments().add(attachment); + } + } + Pattern aLink = Pattern.compile("]*(((?!"); Matcher matcherALink = aLink.matcher(content); int count = 0; diff --git a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java index 940633362..72c882333 100644 --- a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java @@ -607,9 +607,11 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct @SuppressLint({"SetJavaScriptEnabled", "ClickableViewAccessibility"}) @Override public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int i) { + + context = viewHolder.itemView.getContext(); final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); final String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); - context = viewHolder.itemView.getContext(); + if (viewHolder.getItemViewType() != HIDDEN_STATUS) { final ViewHolder holder = (ViewHolder) viewHolder; diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index 1816699de..83aa1107e 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -518,6 +518,7 @@ public class Helper { public static final Pattern twitterPattern = Pattern.compile("((@[\\w]+)@twitter\\.com)"); public static final Pattern youtubePattern = Pattern.compile("(www\\.|m\\.)?(youtube\\.com|youtu\\.be|youtube-nocookie\\.com)/(((?!([\"'<])).)*)"); public static final Pattern nitterPattern = Pattern.compile("(mobile\\.|www\\.)?twitter.com([\\w-/]+)"); + public static final Pattern ouichesPattern = Pattern.compile("ouich\\.es/tag/(\\w+)"); public static final Pattern xmppPattern = Pattern.compile("xmpp:[-a-zA-Z0-9+$&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); //Default values public final static int DEFAULT_VIDEO_WIDTH = 640; @@ -1927,27 +1928,30 @@ public class Helper { } if (!urlHeader.contains("missing.png")) { ImageView backgroundImage = headerLayout.findViewById(R.id.back_ground_image); - Glide.with(activity) - .asDrawable() - .load(urlHeader) - .into(new CustomTarget() { - @Override - public void onResourceReady(@NonNull Drawable resource, Transition transition) { + if( isValidContextForGlide(activity)){ + Glide.with(activity) + .asDrawable() + .load(urlHeader) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Drawable resource, Transition transition) { + + backgroundImage.setImageDrawable(resource); + if (theme == THEME_LIGHT) { + backgroundImage.setImageAlpha(80); + } else { + backgroundImage.setImageAlpha(60); + } - backgroundImage.setImageDrawable(resource); - if (theme == THEME_LIGHT) { - backgroundImage.setImageAlpha(80); - } else { - backgroundImage.setImageAlpha(60); } - } + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { - @Override - public void onLoadCleared(@Nullable Drawable placeholder) { + } + }); + } - } - }); } } profilePicture.setOnClickListener(null); @@ -3210,6 +3214,7 @@ public class Helper { } } else { Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.parse(url)); try { context.startActivity(intent); From 853286fa1a8988dce32debf52b424124e12def1f Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 10 May 2020 14:22:25 +0200 Subject: [PATCH 04/24] ouiches support --- .../main/java/app/fedilab/android/client/Entities/Status.java | 4 ++-- app/src/main/java/app/fedilab/android/helper/Helper.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Status.java b/app/src/main/java/app/fedilab/android/client/Entities/Status.java index bfc01b740..9a6a00000 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Status.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Status.java @@ -320,8 +320,8 @@ public class Status implements Parcelable { if( tag == null){ continue; } - attachment.setRemote_url("https://ouich.es/mp3/"+tag+".mp3"); - attachment.setUrl("https://ouich.es/mp3/"+tag+".mp3"); + attachment.setRemote_url("http://ouich.es/mp3/"+tag+".mp3"); + attachment.setUrl("http://ouich.es/mp3/"+tag+".mp3"); if( status.getMedia_attachments() == null) { status.setMedia_attachments(new ArrayList<>()); } diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index ceeae75c7..c95fb25f6 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -512,6 +512,7 @@ public class Helper { public static final Pattern twitterPattern = Pattern.compile("((@[\\w]+)@twitter\\.com)"); public static final Pattern youtubePattern = Pattern.compile("(www\\.|m\\.)?(youtube\\.com|youtu\\.be|youtube-nocookie\\.com)/(((?!([\"'<])).)*)"); public static final Pattern nitterPattern = Pattern.compile("(mobile\\.|www\\.)?twitter.com([\\w-/]+)"); + public static final Pattern ouichesPattern = Pattern.compile("https://ouich\\.es/tag/(\\w+)"); public static final Pattern xmppPattern = Pattern.compile("xmpp:[-a-zA-Z0-9+$&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); //Default values public final static int DEFAULT_VIDEO_WIDTH = 640; From 236f8e5f6f69d8b19cbd21ca2fe50113b68c4d3d Mon Sep 17 00:00:00 2001 From: Ash <> Date: Fri, 15 May 2020 04:39:50 +0530 Subject: [PATCH 05/24] Fix: unblock option not working in account activity's menu --- .../fedilab/android/activities/ShowAccountActivity.java | 9 +++++++-- app/src/main/res/values/strings.xml | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java b/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java index bb39b6732..96edc6d7b 100644 --- a/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java @@ -1330,8 +1330,13 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt return true; case R.id.action_block: builderInner = new AlertDialog.Builder(ShowAccountActivity.this, style); - builderInner.setTitle(stringArrayConf[1]); - doActionAccount = API.StatusAction.BLOCK; + if (relationship.isBlocking()) { + builderInner.setTitle(stringArrayConf[5]); + doActionAccount = API.StatusAction.UNBLOCK; + } else { + builderInner.setTitle(stringArrayConf[1]); + doActionAccount = API.StatusAction.BLOCK; + } break; case R.id.action_block_instance: builderInner = new AlertDialog.Builder(ShowAccountActivity.this, style); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b0a84b134..202aadd38 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -115,6 +115,7 @@ Report this toot? Block this domain? Unmute this account? + Unblock this account? From d5ef4f05a1506d85481ef68d1198fd471782c055 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 16 May 2020 11:12:49 +0200 Subject: [PATCH 06/24] copy release notes --- .../app/fedilab/android/helper/CacheDataSourceFactory.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 app/src/main/java/app/fedilab/android/helper/CacheDataSourceFactory.java diff --git a/app/src/main/java/app/fedilab/android/helper/CacheDataSourceFactory.java b/app/src/main/java/app/fedilab/android/helper/CacheDataSourceFactory.java new file mode 100644 index 000000000..71012f898 --- /dev/null +++ b/app/src/main/java/app/fedilab/android/helper/CacheDataSourceFactory.java @@ -0,0 +1,4 @@ +package app.fedilab.android.helper; + +public class CacheDataSourceFactory { +} From dd26a6aeb50f8f18c6e5080b1e6097361fca6fe0 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 16 May 2020 11:32:09 +0200 Subject: [PATCH 07/24] video cache --- .../android/activities/BaseMainActivity.java | 10 +- .../android/activities/PeertubeActivity.java | 134 ++++++++++------ .../android/activities/SettingsActivity.java | 2 +- .../activities/WebviewConnectActivity.java | 2 +- .../DownloadTrackingDomainsAsyncTask.java | 1 - .../java/app/fedilab/android/client/API.java | 20 +-- .../client/Entities/ManageTimelines.java | 9 +- .../android/client/Entities/Status.java | 55 ++++--- .../android/drawers/StatusListAdapter.java | 11 +- .../fragments/ColorSettingsFragment.java | 2 +- .../fragments/ContentSettingsFragment.java | 148 +++++++++++++----- .../fragments/MediaSliderFragment.java | 32 +++- .../helper/CacheDataSourceFactory.java | 48 +++++- .../app/fedilab/android/helper/Helper.java | 31 ++-- .../fedilab/android/helper/ThemeHelper.java | 23 +-- .../imageeditor/ColorPickerAdapter.java | 22 +-- .../android/imageeditor/EmojiBSFragment.java | 16 +- .../imageeditor/PropertiesBSFragment.java | 11 +- .../imageeditor/StickerBSFragment.java | 18 +-- .../imageeditor/TextEditorDialogFragment.java | 57 ++++--- .../tools/EditingToolsAdapter.java | 9 +- .../BackupNotificationInDataBaseService.java | 27 ++-- .../BackupStatusInDataBaseService.java | 27 ++-- .../android/services/BackupStatusService.java | 22 +-- .../LiveNotificationDelayedService.java | 57 ++++--- .../services/LiveNotificationService.java | 1 - .../StreamingFederatedTimelineService.java | 41 ++--- .../StreamingHomeTimelineService.java | 41 ++--- .../StreamingLocalTimelineService.java | 41 ++--- .../android/sqlite/DomainBlockDAO.java | 3 +- .../layout-sw600dp/activity_show_account.xml | 14 +- .../res/layout-sw600dp/drawer_account.xml | 14 +- .../main/res/layout/activity_edit_profile.xml | 2 +- app/src/main/res/layout/activity_login.xml | 10 +- .../layout/activity_manage_accounts_list.xml | 2 +- app/src/main/res/layout/activity_peertube.xml | 2 +- .../res/layout/activity_peertube_upload.xml | 2 +- .../main/res/layout/activity_show_account.xml | 14 +- .../main/res/layout/add_blocked_instance.xml | 2 +- app/src/main/res/layout/add_filter.xml | 2 +- app/src/main/res/layout/add_list.xml | 2 +- app/src/main/res/layout/add_playlist.xml | 2 +- .../main/res/layout/dialog_create_folder.xml | 2 +- app/src/main/res/layout/dialog_profile.xml | 2 +- app/src/main/res/layout/domains_blocked.xml | 2 +- app/src/main/res/layout/drawer_account.xml | 14 +- .../main/res/layout/drawer_account_admin.xml | 8 +- .../layout/drawer_account_follow_request.xml | 4 +- .../main/res/layout/drawer_account_list.xml | 4 +- .../res/layout/drawer_account_main_search.xml | 12 +- .../main/res/layout/drawer_account_reply.xml | 2 +- .../main/res/layout/drawer_account_search.xml | 4 +- .../main/res/layout/drawer_emoji_search.xml | 3 +- .../main/res/layout/drawer_notification.xml | 4 +- app/src/main/res/layout/drawer_report.xml | 6 +- app/src/main/res/layout/drawer_status.xml | 19 ++- .../main/res/layout/drawer_status_compact.xml | 18 +-- .../main/res/layout/drawer_status_console.xml | 20 +-- .../main/res/layout/drawer_status_focused.xml | 20 +-- .../res/layout/drawer_status_main_search.xml | 6 +- .../main/res/layout/drawer_suggestions.xml | 2 +- app/src/main/res/layout/filter_regex.xml | 2 +- .../res/layout/fragment_settings_reveal.xml | 94 +++++++++-- .../main/res/layout/fragment_slide_media.xml | 2 +- app/src/main/res/layout/nav_header_main.xml | 2 +- app/src/main/res/layout/popup_contact.xml | 3 +- app/src/main/res/layout/search_instance.xml | 2 +- app/src/main/res/layout/search_toot.xml | 2 +- app/src/main/res/layout/simple_bar.xml | 2 +- app/src/main/res/layout/simple_bar_add.xml | 2 +- .../res/layout/simple_bar_muted_instance.xml | 2 +- app/src/main/res/layout/simple_bar_search.xml | 2 +- app/src/main/res/layout/tags_all.xml | 2 +- app/src/main/res/layout/tags_any.xml | 2 +- app/src/main/res/layout/tags_instance.xml | 2 +- app/src/main/res/layout/tags_name.xml | 2 +- app/src/main/res/layout/webview_actionbar.xml | 2 +- app/src/main/res/values/strings.xml | 6 + 78 files changed, 733 insertions(+), 539 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java index c1928b179..f22ff876b 100644 --- a/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java @@ -1258,7 +1258,7 @@ public abstract class BaseMainActivity extends BaseActivity int lastReleaseNoteRead = sharedpreferences.getInt(Helper.SET_POPUP_RELEASE_NOTES, 0); int versionCode = BuildConfig.VERSION_CODE; - if (lastReleaseNoteRead != versionCode ) { //Need to push release notes + if (lastReleaseNoteRead != versionCode) { //Need to push release notes if (social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA) { new RetrieveRemoteDataAsyncTask(BaseMainActivity.this, BaseMainActivity.this).execute(); } @@ -1279,12 +1279,12 @@ public abstract class BaseMainActivity extends BaseActivity Button liberapay_support = dialogReleaseNoteView.findViewById(R.id.liberapay_support); release_title.setText(getString(R.string.release_note_title, BuildConfig.VERSION_NAME)); release_notes.setText(finalContent); - if( BuildConfig.DONATIONS) { + if (BuildConfig.DONATIONS) { liberapay_support.setVisibility(View.VISIBLE); - }else{ + } else { liberapay_support.setVisibility(View.GONE); } - liberapay_support.setOnClickListener(v->{ + liberapay_support.setOnClickListener(v -> { Intent intentLiberapay = new Intent(Intent.ACTION_VIEW); intentLiberapay.setData(Uri.parse("https://liberapay.com/tom79")); try { @@ -1693,7 +1693,7 @@ public abstract class BaseMainActivity extends BaseActivity } }); } - if( trackingDomains != null){ + if (trackingDomains != null) { trackingDomains = null; } if (hidde_menu != null) diff --git a/app/src/main/java/app/fedilab/android/activities/PeertubeActivity.java b/app/src/main/java/app/fedilab/android/activities/PeertubeActivity.java index c188ecc4e..7d67984e1 100644 --- a/app/src/main/java/app/fedilab/android/activities/PeertubeActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/PeertubeActivity.java @@ -60,10 +60,10 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.SimpleExoPlayer; -import com.google.android.exoplayer2.source.ExtractorMediaSource; +import com.google.android.exoplayer2.source.ProgressiveMediaSource; import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; -import com.google.android.exoplayer2.ui.PlaybackControlView; -import com.google.android.exoplayer2.ui.SimpleExoPlayerView; +import com.google.android.exoplayer2.ui.PlayerControlView; +import com.google.android.exoplayer2.ui.PlayerView; import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.util.Util; @@ -96,6 +96,7 @@ import app.fedilab.android.client.Entities.Status; import app.fedilab.android.client.Entities.StatusDrawerParams; import app.fedilab.android.client.TLSSocketFactory; import app.fedilab.android.drawers.StatusListAdapter; +import app.fedilab.android.helper.CacheDataSourceFactory; import app.fedilab.android.helper.CrossActions; import app.fedilab.android.helper.FullScreenMediaController; import app.fedilab.android.helper.Helper; @@ -130,7 +131,7 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube private ScrollView peertube_information_container; private Peertube peertube; private TextView toolbar_title; - private SimpleExoPlayerView playerView; + private PlayerView playerView; private SimpleExoPlayer player; private boolean fullScreenMode; private Dialog fullScreenDialog; @@ -278,7 +279,7 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube peertube_information_container.setVisibility(View.VISIBLE); } }); - String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, null); + String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); if (user_agent != null) { webview_video.getSettings().setUserAgentString(user_agent); } @@ -369,40 +370,7 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube case R.id.action_comment: if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA) { Toasty.info(PeertubeActivity.this, getString(R.string.retrieve_remote_status), Toast.LENGTH_LONG).show(); - new AsyncTask() { - - private List remoteStatuses; - private WeakReference contextReference = new WeakReference<>(PeertubeActivity.this); - - @Override - protected Void doInBackground(Void... voids) { - - if (peertube != null) { - APIResponse search = new API(contextReference.get()).search("https://" + peertube.getAccount().getHost() + "/videos/watch/" + peertube.getUuid()); - if (search != null && search.getResults() != null) { - remoteStatuses = search.getResults().getStatuses(); - } - } - return null; - } - - @Override - protected void onPostExecute(Void result) { - Intent intent = new Intent(contextReference.get(), TootActivity.class); - Bundle b = new Bundle(); - if (remoteStatuses == null || remoteStatuses.size() == 0) { - Toasty.error(contextReference.get(), getString(R.string.toast_error), Toast.LENGTH_SHORT).show(); - return; - } - if (remoteStatuses.get(0).getReblog() != null) { - b.putParcelable("tootReply", remoteStatuses.get(0).getReblog()); - } else { - b.putParcelable("tootReply", remoteStatuses.get(0)); - } - intent.putExtras(b); //Put your id to your next Intent - contextReference.get().startActivity(intent); - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + new commentTask(new WeakReference<>(PeertubeActivity.this), peertube).execute(); } else if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE) { if (!peertube.isCommentsEnabled()) { Toasty.info(PeertubeActivity.this, getString(R.string.comment_no_allowed_peertube), Toast.LENGTH_LONG).show(); @@ -443,6 +411,52 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube } } + private static class commentTask extends AsyncTask{ + + private WeakReference contextReference; + private Peertube peertube; + + commentTask(WeakReference contextReference, Peertube peertube){ + this.peertube = peertube; + this.contextReference = contextReference; + } + + @Override + protected app.fedilab.android.client.Entities.Status doInBackground(Void... voids) { + + List remoteStatuses = null; + if (peertube != null) { + APIResponse search = new API(contextReference.get()).search("https://" + peertube.getAccount().getHost() + "/videos/watch/" + peertube.getUuid()); + if (search != null && search.getResults() != null) { + remoteStatuses = search.getResults().getStatuses(); + } + } + if( remoteStatuses != null && remoteStatuses.size() > 0) { + return remoteStatuses.get(0); + }else { + return null; + } + } + + @Override + protected void onPostExecute(app.fedilab.android.client.Entities.Status remoteStatuses) { + Intent intent = new Intent(contextReference.get(), TootActivity.class); + Bundle b = new Bundle(); + if (remoteStatuses == null) { + Toasty.error(contextReference.get(), contextReference.get().getString(R.string.toast_error), Toast.LENGTH_SHORT).show(); + return; + } + if (remoteStatuses.getReblog() != null) { + b.putParcelable("tootReply", remoteStatuses.getReblog()); + } else { + b.putParcelable("tootReply", remoteStatuses); + } + intent.putExtras(b); //Put your id to your next Intent + contextReference.get().startActivity(intent); + } + } + + public FullScreenMediaController.fullscreen getFullscreen() { return fullscreen; } @@ -583,16 +597,24 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube if (mode == Helper.VIDEO_MODE_DIRECT) { - DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(PeertubeActivity.this, - Util.getUserAgent(PeertubeActivity.this, "Mastalab"), null); - ExtractorMediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory) - .createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null, apiResponse.getPeertubes().get(0).isStreamService()))); + String userAgent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); + int video_cache = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB); + ProgressiveMediaSource videoSource; + if( video_cache == 0) { + DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(PeertubeActivity.this, + Util.getUserAgent(PeertubeActivity.this, userAgent), null); + videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory) + .createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null, apiResponse.getPeertubes().get(0).isStreamService()))); + }else{ + CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(PeertubeActivity.this, video_cache * 1024 * 1024, 5 * 1024 * 1024); + videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory) + .createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null, apiResponse.getPeertubes().get(0).isStreamService()))); + } player = ExoPlayerFactory.newSimpleInstance(PeertubeActivity.this); playerView.setPlayer(player); loader.setVisibility(View.GONE); - player.prepare(videoSource); player.setPlayWhenReady(true); } @@ -777,7 +799,7 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube if (playerView != null) { loader.setVisibility(View.VISIBLE); long position = player.getCurrentPosition(); - PlaybackControlView controlView = playerView.findViewById(R.id.exo_controller); + PlayerControlView controlView = playerView.findViewById(R.id.exo_controller); resolution = controlView.findViewById(R.id.resolution); resolution.setText(String.format("%sp", res)); if (mode == Helper.VIDEO_MODE_DIRECT) { @@ -786,11 +808,19 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube player = ExoPlayerFactory.newSimpleInstance(PeertubeActivity.this); playerView.setPlayer(player); loader.setVisibility(View.GONE); - DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(PeertubeActivity.this, - Util.getUserAgent(PeertubeActivity.this, "Mastalab"), null); - - ExtractorMediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory) - .createMediaSource(Uri.parse(peertube.getFileUrl(res, peertube.isStreamService()))); + String userAgent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); + int video_cache = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB); + ProgressiveMediaSource videoSource; + if( video_cache == 0) { + DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(PeertubeActivity.this, + Util.getUserAgent(PeertubeActivity.this, userAgent), null); + videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory) + .createMediaSource(Uri.parse(peertube.getFileUrl(res, peertube.isStreamService()))); + }else{ + CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(PeertubeActivity.this, video_cache * 1024 * 1024, 5 * 1024 * 1024); + videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory) + .createMediaSource(Uri.parse(peertube.getFileUrl(res, peertube.isStreamService()))); + } player.prepare(videoSource); player.seekTo(0, position); player.setPlayWhenReady(true); @@ -842,7 +872,7 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube private void initFullscreenButton() { - PlaybackControlView controlView = playerView.findViewById(R.id.exo_controller); + PlayerControlView controlView = playerView.findViewById(R.id.exo_controller); fullScreenIcon = controlView.findViewById(R.id.exo_fullscreen_icon); View fullScreenButton = controlView.findViewById(R.id.exo_fullscreen_button); fullScreenButton.setOnClickListener(v -> { @@ -854,7 +884,7 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube } private void initResolution() { - PlaybackControlView controlView = playerView.findViewById(R.id.exo_controller); + PlayerControlView controlView = playerView.findViewById(R.id.exo_controller); resolution = controlView.findViewById(R.id.resolution); resolution.setText(String.format("%sp", peertube.getResolution().get(0))); resolution.setOnClickListener(v -> displayResolution()); diff --git a/app/src/main/java/app/fedilab/android/activities/SettingsActivity.java b/app/src/main/java/app/fedilab/android/activities/SettingsActivity.java index 55495958c..9be6379ca 100644 --- a/app/src/main/java/app/fedilab/android/activities/SettingsActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/SettingsActivity.java @@ -154,7 +154,7 @@ public class SettingsActivity extends BaseActivity { } @Override - public void onDestroy(){ + public void onDestroy() { super.onDestroy(); } diff --git a/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java b/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java index c920816e1..f360dcc3c 100644 --- a/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/WebviewConnectActivity.java @@ -125,7 +125,7 @@ public class WebviewConnectActivity extends BaseActivity { webView = findViewById(R.id.webviewConnect); clearCookies(WebviewConnectActivity.this); webView.getSettings().setJavaScriptEnabled(true); - String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, null); + String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); if (user_agent != null) { webView.getSettings().setUserAgentString(user_agent); } diff --git a/app/src/main/java/app/fedilab/android/asynctasks/DownloadTrackingDomainsAsyncTask.java b/app/src/main/java/app/fedilab/android/asynctasks/DownloadTrackingDomainsAsyncTask.java index e1ad99c1b..8dfb2132f 100644 --- a/app/src/main/java/app/fedilab/android/asynctasks/DownloadTrackingDomainsAsyncTask.java +++ b/app/src/main/java/app/fedilab/android/asynctasks/DownloadTrackingDomainsAsyncTask.java @@ -33,7 +33,6 @@ import java.util.List; import javax.net.ssl.HttpsURLConnection; import app.fedilab.android.R; -import app.fedilab.android.helper.Helper; import app.fedilab.android.sqlite.DomainBlockDAO; import app.fedilab.android.sqlite.Sqlite; import es.dmoral.toasty.Toasty; diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index b49b2b44c..312dec3ac 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -2205,7 +2205,7 @@ public class API { JSONObject resobj = new JSONObject(response); JSONObject jsonObject = resobj.getJSONObject("software"); String name = jsonObject.getString("name").toUpperCase(); - if( name.compareTo("CORGIDON") == 0 ){ + if (name.compareTo("CORGIDON") == 0) { name = "MASTODON"; } instanceNodeInfo.setName(name); @@ -3699,14 +3699,16 @@ public class API { if (apiResponse.getStatuses() != null && apiResponse.getStatuses().size() > 0) { for (Status status : apiResponse.getStatuses()) { if (status.getMedia_attachments() != null) { - String statusSerialized = Helper.statusToStringStorage(status); - for (Attachment attachment : status.getMedia_attachments()) { - Status newStatus = Helper.restoreStatusFromString(statusSerialized); - if (newStatus == null) - break; - newStatus.setArt_attachment(attachment); - apiResponseReply.getStatuses().add(newStatus); - } + try { + String statusSerialized = Helper.statusToStringStorage(status); + for (Attachment attachment : status.getMedia_attachments()) { + Status newStatus = Helper.restoreStatusFromString(statusSerialized); + if (newStatus == null) + break; + newStatus.setArt_attachment(attachment); + apiResponseReply.getStatuses().add(newStatus); + } + }catch (Exception ignored){} } } } diff --git a/app/src/main/java/app/fedilab/android/client/Entities/ManageTimelines.java b/app/src/main/java/app/fedilab/android/client/Entities/ManageTimelines.java index fb2ec3b98..a59f94d7d 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/ManageTimelines.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/ManageTimelines.java @@ -500,10 +500,11 @@ public class ManageTimelines { if (mPageReferenceMap != null) { FragmentTransaction fragTransaction = ((MainActivity) context).getSupportFragmentManager().beginTransaction(); DisplayStatusFragment displayStatusFragment = (DisplayStatusFragment) mPageReferenceMap.get(tl.getPosition()); - assert displayStatusFragment != null; - fragTransaction.detach(displayStatusFragment); - fragTransaction.attach(displayStatusFragment); - fragTransaction.commit(); + if (displayStatusFragment != null) { + fragTransaction.detach(displayStatusFragment); + fragTransaction.attach(displayStatusFragment); + fragTransaction.commit(); + } } } }); diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Status.java b/app/src/main/java/app/fedilab/android/client/Entities/Status.java index 9a6a00000..edd0862c5 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Status.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Status.java @@ -310,31 +310,42 @@ public class Status implements Parcelable { } } + matcher = Helper.bibliogramPattern.matcher(content); + boolean bibliogram = sharedpreferences.getBoolean(Helper.SET_BIBLIOGRAM, false); + if (bibliogram) { + while (matcher.find()) { + final String bibliogram_directory = matcher.group(2); + String bibliogramHost = sharedpreferences.getString(Helper.SET_BIBLIOGRAM_HOST, Helper.DEFAULT_BIBLIOGRAM_HOST).toLowerCase(); + content = content.replaceAll("https://" + Pattern.quote(matcher.group()), Matcher.quoteReplacement("https://" + bibliogramHost + bibliogram_directory)); + content = content.replaceAll(">" + Pattern.quote(matcher.group()), Matcher.quoteReplacement(">" + bibliogramHost + bibliogram_directory)); + } + } + matcher = Helper.ouichesPattern.matcher(content); while (matcher.find()) { - Attachment attachment = new Attachment(); - attachment.setType("audio"); - String tag = matcher.group(1); - attachment.setId(tag); - if( tag == null){ - continue; - } - attachment.setRemote_url("http://ouich.es/mp3/"+tag+".mp3"); - attachment.setUrl("http://ouich.es/mp3/"+tag+".mp3"); - if( status.getMedia_attachments() == null) { - status.setMedia_attachments(new ArrayList<>()); - } - boolean alreadyAdded = false; - for(Attachment at: status.getMedia_attachments()){ - if( tag.compareTo(at.getId()) == 0 ){ - alreadyAdded = true; - break; - } - } - if( !alreadyAdded) { - status.getMedia_attachments().add(attachment); - } + Attachment attachment = new Attachment(); + attachment.setType("audio"); + String tag = matcher.group(1); + attachment.setId(tag); + if (tag == null) { + continue; + } + attachment.setRemote_url("http://ouich.es/mp3/" + tag + ".mp3"); + attachment.setUrl("http://ouich.es/mp3/" + tag + ".mp3"); + if (status.getMedia_attachments() == null) { + status.setMedia_attachments(new ArrayList<>()); + } + boolean alreadyAdded = false; + for (Attachment at : status.getMedia_attachments()) { + if (tag.compareTo(at.getId()) == 0) { + alreadyAdded = true; + break; + } + } + if (!alreadyAdded) { + status.getMedia_attachments().add(attachment); + } } Pattern aLink = Pattern.compile("]*(((?!"); diff --git a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java index a23d15d46..7af1c7045 100644 --- a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java @@ -2289,6 +2289,15 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct url = url.replaceAll("https://" + Pattern.quote(matcher.group()), Matcher.quoteReplacement("https://" + nitterHost + nitter_directory)); } } + boolean bibliogram = sharedpreferences.getBoolean(Helper.SET_BIBLIOGRAM, false); + if (bibliogram) { + Matcher matcher = Helper.bibliogramPattern.matcher(url); + while (matcher.find()) { + final String bibliogram_directory = matcher.group(2); + String bibliogramHost = sharedpreferences.getString(Helper.SET_BIBLIOGRAM_HOST, Helper.DEFAULT_BIBLIOGRAM_HOST).toLowerCase(); + url = url.replaceAll("https://" + Pattern.quote(matcher.group()), Matcher.quoteReplacement("https://" + bibliogramHost + bibliogram_directory)); + } + } Helper.openBrowser(context, url); }); } else if (card.getType().toLowerCase().equals("video") && (display_video_preview || (type == RetrieveFeedsAsyncTask.Type.CONTEXT && viewHolder.getAdapterPosition() == conversationPosition))) { @@ -2298,7 +2307,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct .into(holder.webview_preview_card); holder.status_cardview.setVisibility(View.GONE); holder.status_cardview_video.setVisibility(View.VISIBLE); - String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, null); + String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); if (user_agent != null) { holder.status_cardview_webview.getSettings().setUserAgentString(user_agent); } diff --git a/app/src/main/java/app/fedilab/android/fragments/ColorSettingsFragment.java b/app/src/main/java/app/fedilab/android/fragments/ColorSettingsFragment.java index 7dcbe3ad7..a94eadc63 100644 --- a/app/src/main/java/app/fedilab/android/fragments/ColorSettingsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/ColorSettingsFragment.java @@ -275,7 +275,7 @@ public class ColorSettingsFragment extends PreferenceFragmentCompat implements S entryValues[2] = String.valueOf(Helper.THEME_BLACK); pref_theme_picker.setEntries(entries); int default_theme_value; - switch (theme){ + switch (theme) { case Helper.THEME_LIGHT: default_theme_value = 1; break; diff --git a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java index c421d3db7..d8c00e20e 100644 --- a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java @@ -15,6 +15,7 @@ package app.fedilab.android.fragments; * see . */ +import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.TimePickerDialog; import android.content.ComponentName; @@ -54,7 +55,6 @@ import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.SwitchCompat; import androidx.fragment.app.Fragment; @@ -345,6 +345,7 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot } context = getActivity(); + assert context != null; SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK); @@ -468,9 +469,9 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot Button update_tracking_domains = rootView.findViewById(R.id.update_tracking_domains); - update_tracking_domains.setOnClickListener(v -> { - new DownloadTrackingDomainsAsyncTask(Objects.requireNonNull(getActivity()), update_tracking_domains).execute(); - }); + update_tracking_domains.setOnClickListener(v -> + new DownloadTrackingDomainsAsyncTask(Objects.requireNonNull(getActivity()), update_tracking_domains).execute() + ); Spinner set_attachment_group = rootView.findViewById(R.id.set_attachment_group); @@ -837,7 +838,7 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot TextView set_user_agent = rootView.findViewById(R.id.set_user_agent); - String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, null); + String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); if (user_agent != null) { set_user_agent.setText(user_agent); @@ -922,6 +923,55 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot } }); + + TextView set_bibliogram_host = rootView.findViewById(R.id.set_bibliogram_host); + boolean bibliogram = sharedpreferences.getBoolean(Helper.SET_BIBLIOGRAM, false); + final SwitchCompat set_bibliogram = rootView.findViewById(R.id.set_bibliogram); + set_bibliogram.setChecked(bibliogram); + + set_bibliogram.setOnClickListener(v -> { + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putBoolean(Helper.SET_BIBLIOGRAM, set_bibliogram.isChecked()); + editor.apply(); + if (set_bibliogram.isChecked()) { + set_bibliogram_host.setVisibility(View.VISIBLE); + } else { + set_bibliogram_host.setVisibility(View.GONE); + } + }); + if (bibliogram) { + set_bibliogram_host.setVisibility(View.VISIBLE); + } else { + set_bibliogram_host.setVisibility(View.GONE); + } + + String bibliogramHost = sharedpreferences.getString(Helper.SET_BIBLIOGRAM_HOST, null); + if (bibliogramHost != null) { + set_bibliogram_host.setText(bibliogramHost); + } + set_bibliogram_host.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + SharedPreferences.Editor editor = sharedpreferences.edit(); + if (s.toString().trim().length() > 0) { + editor.putString(Helper.SET_BIBLIOGRAM_HOST, s.toString().toLowerCase().trim()); + } else { + editor.putString(Helper.SET_BIBLIOGRAM_HOST, null); + } + editor.apply(); + } + }); + boolean long_press_media = sharedpreferences.getBoolean(Helper.SET_LONG_PRESS_MEDIA, true); final SwitchCompat set_long_press_media = rootView.findViewById(R.id.set_long_press_media); set_long_press_media.setChecked(long_press_media); @@ -976,6 +1026,32 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot getActivity().recreate(); }); + int video_cache_size = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB); + SeekBar set_video_cache_size = rootView.findViewById(R.id.set_video_cache_size); + set_video_cache_size.setMax(5*Helper.DEFAULT_VIDEO_CACHE_MB); + set_video_cache_size.setProgress(video_cache_size); + TextView set_video_cache = rootView.findViewById(R.id.set_video_cache); + set_video_cache.setText(String.valueOf(video_cache_size)); + set_video_cache_size.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + set_video_cache.setText(String.valueOf(progress)); + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putInt(Helper.SET_VIDEO_CACHE, progress); + editor.apply(); + } + }); + + + int truncate_toots_size = sharedpreferences.getInt(Helper.SET_TRUNCATE_TOOTS_SIZE, 0); SeekBar set_truncate_size = rootView.findViewById(R.id.set_truncate_size); set_truncate_size.setMax(20); @@ -1543,40 +1619,37 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot final ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, stringArray); dialog.setNegativeButton(R.string.cancel, (dialog1, position) -> dialog1.dismiss()); - dialog.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int position) { - String visibility = "public"; + dialog.setAdapter(arrayAdapter, (dialog12, position) -> { + String visibility = "public"; - switch (position) { - case 0: - visibility = "public"; - set_toot_visibility.setImageResource(R.drawable.ic_public); - break; - case 1: - visibility = "unlisted"; - set_toot_visibility.setImageResource(R.drawable.ic_lock_open); - break; - case 2: - visibility = "private"; - set_toot_visibility.setImageResource(R.drawable.ic_lock_outline); - break; - case 3: - visibility = "direct"; - set_toot_visibility.setImageResource(R.drawable.ic_mail_outline); - break; - } - if (account != null) { - SharedPreferences.Editor editor = sharedpreferences12.edit(); - editor.putString(Helper.SET_TOOT_VISIBILITY + "@" + account.getAcct() + "@" + account.getInstance(), visibility); - editor.apply(); - Toasty.info(context, context.getString(R.string.toast_visibility_changed, "@" + account.getAcct() + "@" + account.getInstance()), Toast.LENGTH_SHORT).show(); - } else { - Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show(); - } - - dialog.dismiss(); + switch (position) { + case 0: + visibility = "public"; + set_toot_visibility.setImageResource(R.drawable.ic_public); + break; + case 1: + visibility = "unlisted"; + set_toot_visibility.setImageResource(R.drawable.ic_lock_open); + break; + case 2: + visibility = "private"; + set_toot_visibility.setImageResource(R.drawable.ic_lock_outline); + break; + case 3: + visibility = "direct"; + set_toot_visibility.setImageResource(R.drawable.ic_mail_outline); + break; } + if (account != null) { + SharedPreferences.Editor editor = sharedpreferences12.edit(); + editor.putString(Helper.SET_TOOT_VISIBILITY + "@" + account.getAcct() + "@" + account.getInstance(), visibility); + editor.apply(); + Toasty.info(context, context.getString(R.string.toast_visibility_changed, "@" + account.getAcct() + "@" + account.getInstance()), Toast.LENGTH_SHORT).show(); + } else { + Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show(); + } + + dialog12.dismiss(); }); dialog.show(); }); @@ -2175,6 +2248,7 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot set_change_locale.setSelection(positionSpinnerLanguage); countLanguage = 0; set_change_locale.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @SuppressLint("ApplySharedPref") @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { if (countLanguage > 0) { diff --git a/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java b/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java index 36e6e4313..1c963ba4a 100644 --- a/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java @@ -51,8 +51,9 @@ import com.github.chrisbanes.photoview.PhotoView; import com.google.android.exoplayer2.ExoPlayerFactory; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.SimpleExoPlayer; -import com.google.android.exoplayer2.source.ExtractorMediaSource; -import com.google.android.exoplayer2.ui.SimpleExoPlayerView; + +import com.google.android.exoplayer2.source.ProgressiveMediaSource; +import com.google.android.exoplayer2.ui.PlayerView; import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import com.google.android.exoplayer2.util.Util; @@ -70,6 +71,7 @@ import app.fedilab.android.R; import app.fedilab.android.activities.SlideMediaActivity; import app.fedilab.android.client.Entities.Attachment; import app.fedilab.android.client.TLSSocketFactory; +import app.fedilab.android.helper.CacheDataSourceFactory; import app.fedilab.android.helper.Helper; import app.fedilab.android.webview.CustomWebview; import app.fedilab.android.webview.MastalabWebChromeClient; @@ -132,7 +134,7 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl ImageView next = rootView.findViewById(R.id.media_next); imageView = rootView.findViewById(R.id.media_picture); - SimpleExoPlayerView videoView = rootView.findViewById(R.id.media_video); + PlayerView videoView = rootView.findViewById(R.id.media_video); if (theme == Helper.THEME_BLACK) { changeDrawableColor(context, prev, R.color.dark_icon); changeDrawableColor(context, next, R.color.dark_icon); @@ -236,10 +238,20 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl } videoView.setVisibility(View.VISIBLE); Uri uri = Uri.parse(url); - DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, - Util.getUserAgent(context, "Fedilab"), null); - ExtractorMediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory) - .createMediaSource(uri); + + String userAgent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); + int video_cache = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB); + ProgressiveMediaSource videoSource; + if( video_cache == 0) { + DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, + Util.getUserAgent(context, userAgent), null); + videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory) + .createMediaSource(uri); + }else{ + CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(context, video_cache * 1024 * 1024, 5 * 1024 * 1024); + videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory) + .createMediaSource(uri); + } player = ExoPlayerFactory.newSimpleInstance(context); if (type.toLowerCase().equals("gifv")) player.setRepeatMode(Player.REPEAT_MODE_ONE); @@ -278,7 +290,7 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl webview_video.setWebChromeClient(mastalabWebChromeClient); webview_video.getSettings().setDomStorageEnabled(true); webview_video.getSettings().setAppCacheEnabled(true); - String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, null); + String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); if (user_agent != null) { webview_video.getSettings().setUserAgentString(user_agent); } @@ -453,6 +465,10 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl } } catch (Exception ignored) { } + if (timer != null) { + timer.cancel(); + timer = null; + } super.onDestroy(); } diff --git a/app/src/main/java/app/fedilab/android/helper/CacheDataSourceFactory.java b/app/src/main/java/app/fedilab/android/helper/CacheDataSourceFactory.java index 71012f898..2ab4f83c0 100644 --- a/app/src/main/java/app/fedilab/android/helper/CacheDataSourceFactory.java +++ b/app/src/main/java/app/fedilab/android/helper/CacheDataSourceFactory.java @@ -1,4 +1,48 @@ package app.fedilab.android.helper; -public class CacheDataSourceFactory { -} +import android.content.Context; +import android.content.SharedPreferences; + +import com.google.android.exoplayer2.database.ExoDatabaseProvider; +import com.google.android.exoplayer2.upstream.DataSource; +import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; +import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; +import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory; +import com.google.android.exoplayer2.upstream.FileDataSource; +import com.google.android.exoplayer2.upstream.cache.CacheDataSink; +import com.google.android.exoplayer2.upstream.cache.CacheDataSource; +import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor; +import com.google.android.exoplayer2.upstream.cache.SimpleCache; + +import java.io.File; + + +public class CacheDataSourceFactory implements DataSource.Factory { + private final Context context; + private final DefaultDataSourceFactory defaultDatasourceFactory; + private final long maxFileSize, maxCacheSize; + + public CacheDataSourceFactory(Context context, long maxCacheSize, long maxFileSize) { + super(); + this.context = context; + this.maxCacheSize = maxCacheSize; + this.maxFileSize = maxFileSize; + SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + String userAgent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); + DefaultBandwidthMeter.Builder bandwidthMeterBuilder = new DefaultBandwidthMeter.Builder(context); + DefaultBandwidthMeter bandwidthMeter = bandwidthMeterBuilder.build(); + defaultDatasourceFactory = new DefaultDataSourceFactory(this.context, + bandwidthMeter, + new DefaultHttpDataSourceFactory(userAgent, bandwidthMeter)); + } + + @Override + public DataSource createDataSource() { + LeastRecentlyUsedCacheEvictor evictor = new LeastRecentlyUsedCacheEvictor(maxCacheSize); + ExoDatabaseProvider exoDatabaseProvider = new ExoDatabaseProvider(context); + SimpleCache simpleCache = new SimpleCache(new File(context.getCacheDir(), "media"), evictor, exoDatabaseProvider); + return new CacheDataSource(simpleCache, defaultDatasourceFactory.createDataSource(), + new FileDataSource(), new CacheDataSink(simpleCache, maxFileSize), + CacheDataSource.FLAG_BLOCK_ON_CACHE | CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR, null); + } +} \ No newline at end of file diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index c95fb25f6..50f324922 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -320,6 +320,7 @@ public class Helper { public static final int TOOTS_PER_PAGE = 40; public static final int ACCOUNTS_PER_PAGE = 40; public static final int NOTIFICATIONS_PER_PAGE = 30; + public static final int DEFAULT_VIDEO_CACHE_MB = 100; public static final String SET_ATTACHMENT_ACTION = "set_attachment_action"; public static final String SET_TOOT_PER_PAGE = "set_toot_per_page"; public static final String SET_THEME = "set_theme"; @@ -435,6 +436,10 @@ public class Helper { public static final String SET_NITTER_HOST = "set_nitter_host"; public static final String DEFAULT_NITTER_HOST = "nitter.net"; + public static final String SET_BIBLIOGRAM = "set_bibliogram"; + public static final String SET_BIBLIOGRAM_HOST = "set_bibliogram_host"; + public static final String DEFAULT_BIBLIOGRAM_HOST = "bibliogram.art"; + public static final String SET_NOTIF_VALIDATION = "set_share_validation"; public static final String SET_NOTIF_VALIDATION_FAV = "set_share_validation_fav"; public static final String SET_WIFI_ONLY = "set_wifi_only"; @@ -462,10 +467,13 @@ public class Helper { public static final String SET_SECURITY_PROVIDER = "set_security_provider"; public static final String SET_ALLOW_STREAM = "set_allow_stream"; public static final String SET_CUSTOM_USER_AGENT = "set_custom_user_agent"; + public static final String SET_VIDEO_CACHE = "set_video_cache"; //End points public static final String EP_AUTHORIZE = "/oauth/authorize"; + + //Proxy public static final String SET_PROXY_ENABLED = "set_proxy_enabled"; public static final String SET_PROXY_TYPE = "set_proxy_type"; @@ -512,6 +520,7 @@ public class Helper { public static final Pattern twitterPattern = Pattern.compile("((@[\\w]+)@twitter\\.com)"); public static final Pattern youtubePattern = Pattern.compile("(www\\.|m\\.)?(youtube\\.com|youtu\\.be|youtube-nocookie\\.com)/(((?!([\"'<])).)*)"); public static final Pattern nitterPattern = Pattern.compile("(mobile\\.|www\\.)?twitter.com([\\w-/]+)"); + public static final Pattern bibliogramPattern = Pattern.compile("(m\\.|www\\.)?instagram.com(/p/[\\w-/]+)"); public static final Pattern ouichesPattern = Pattern.compile("https://ouich\\.es/tag/(\\w+)"); public static final Pattern xmppPattern = Pattern.compile("xmpp:[-a-zA-Z0-9+$&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); //Default values @@ -1322,9 +1331,9 @@ public class Helper { if (url.startsWith("/")) { url = "https://" + account.getInstance() + account.getAvatar(); } - if( isValidContextForGlide(activity)) { + if (isValidContextForGlide(activity)) { if (!url.equals("null")) { - if( url.contains(".gif")) { + if (url.contains(".gif")) { Glide.with(navigationView.getContext()) .asGif() .load(url) @@ -1340,7 +1349,7 @@ public class Helper { } }); - }else{ + } else { Glide.with(navigationView.getContext()) .asDrawable() .load(url) @@ -1750,14 +1759,14 @@ public class Helper { String avatarUrl = !disableGif ? accountChoice.getAvatar() : accountChoice.getAvatar_static(); - if( avatarUrl.contains(".gif")) { + if (avatarUrl.contains(".gif")) { Glide.with(finalIcon.getContext()) .asGif() .load(avatarUrl) .thumbnail(0.1f) .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(270))) .into(finalIcon); - }else{ + } else { Glide.with(activity) .asDrawable() .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(270))) @@ -1820,17 +1829,17 @@ public class Helper { if (!accountChoice.getAvatar().startsWith("http")) accountChoice.setAvatar("https://" + accountChoice.getInstance() + accountChoice.getAvatar()); ImageView itemIconAcc = new ImageView(activity); - if (isValidContextForGlide(activity) ) { + if (isValidContextForGlide(activity)) { try { String avatarUrl = !disableGif ? accountChoice.getAvatar() : accountChoice.getAvatar_static(); - if( avatarUrl.contains(".gif")) { + if (avatarUrl.contains(".gif")) { Glide.with(itemIconAcc.getContext()) .asGif() .load(avatarUrl) .thumbnail(0.1f) .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(270))) .into(itemIconAcc); - }else{ + } else { Glide.with(activity) .asDrawable() .apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(270))) @@ -2263,10 +2272,8 @@ public class Helper { webView.getSettings().setLoadsImagesAutomatically(true); webView.getSettings().setSupportMultipleWindows(false); webView.getSettings().setMediaPlaybackRequiresUserGesture(true); - String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, null); - if (user_agent != null) { - webView.getSettings().setUserAgentString(user_agent); - } + String user_agent = sharedpreferences.getString(Helper.SET_CUSTOM_USER_AGENT, Helper.USER_AGENT); + webView.getSettings().setUserAgentString(user_agent); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { boolean cookies = sharedpreferences.getBoolean(Helper.SET_COOKIES, false); CookieManager cookieManager = CookieManager.getInstance(); diff --git a/app/src/main/java/app/fedilab/android/helper/ThemeHelper.java b/app/src/main/java/app/fedilab/android/helper/ThemeHelper.java index db63cad09..cd796f346 100644 --- a/app/src/main/java/app/fedilab/android/helper/ThemeHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/ThemeHelper.java @@ -1,21 +1,26 @@ package app.fedilab.android.helper; - +/* Copyright 2019 Thomas Schneider + * + * This file is a part of Fedilab + * + * This program 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. + * + * Fedilab 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 Fedilab; if not, + * see . */ import android.content.Context; -import android.content.SharedPreferences; import android.content.res.Resources; import android.util.TypedValue; -import static android.content.Context.MODE_PRIVATE; public class ThemeHelper { - - public static void changeTheme(Context context, int theme) { - final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); - - } - public static int getAttColor(Context context, int attColor) { TypedValue typedValue = new TypedValue(); Resources.Theme theme = context.getTheme(); diff --git a/app/src/main/java/app/fedilab/android/imageeditor/ColorPickerAdapter.java b/app/src/main/java/app/fedilab/android/imageeditor/ColorPickerAdapter.java index 7356faf95..36ca2c91f 100644 --- a/app/src/main/java/app/fedilab/android/imageeditor/ColorPickerAdapter.java +++ b/app/src/main/java/app/fedilab/android/imageeditor/ColorPickerAdapter.java @@ -15,6 +15,8 @@ import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.RecyclerView; +import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; import java.util.List; @@ -31,7 +33,7 @@ public class ColorPickerAdapter extends RecyclerView.Adapter colorPickerColors; private OnColorPickerClickListener onColorPickerClickListener; - ColorPickerAdapter(@NonNull Context context, @NonNull List colorPickerColors) { + private ColorPickerAdapter(@NonNull Context context, @NonNull List colorPickerColors) { this.context = context; this.inflater = LayoutInflater.from(context); this.colorPickerColors = colorPickerColors; @@ -43,7 +45,7 @@ public class ColorPickerAdapter extends RecyclerView.Adapter getDefaultColors(Context context) { + private static List getDefaultColors(Context context) { ArrayList colorPickerColors = new ArrayList<>(); colorPickerColors.add(ContextCompat.getColor(context, R.color.blue_color_picker)); colorPickerColors.add(ContextCompat.getColor(context, R.color.brown_color_picker)); @@ -60,8 +62,9 @@ public class ColorPickerAdapter extends RecyclerView.Adapter { + if (onColorPickerClickListener != null) + onColorPickerClickListener.onColorPickerClickListener(colorPickerColors.get(getAdapterPosition())); }); } } diff --git a/app/src/main/java/app/fedilab/android/imageeditor/EmojiBSFragment.java b/app/src/main/java/app/fedilab/android/imageeditor/EmojiBSFragment.java index 894875914..af3f0c49d 100644 --- a/app/src/main/java/app/fedilab/android/imageeditor/EmojiBSFragment.java +++ b/app/src/main/java/app/fedilab/android/imageeditor/EmojiBSFragment.java @@ -18,6 +18,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.Objects; import app.fedilab.android.R; import ja.burhanrashid52.photoeditor.PhotoEditor; @@ -46,7 +47,7 @@ public class EmojiBSFragment extends BottomSheetDialogFragment { @SuppressLint("RestrictedApi") @Override - public void setupDialog(Dialog dialog, int style) { + public void setupDialog(@NotNull Dialog dialog, int style) { super.setupDialog(dialog, style); View contentView = View.inflate(getContext(), R.layout.fragment_bottom_sticker_emoji_dialog, null); dialog.setContentView(contentView); @@ -75,7 +76,7 @@ public class EmojiBSFragment extends BottomSheetDialogFragment { public class EmojiAdapter extends RecyclerView.Adapter { - ArrayList emojisList = PhotoEditor.getEmojis(getActivity()); + ArrayList emojisList = PhotoEditor.getEmojis(Objects.requireNonNull(getActivity())); @NotNull @Override @@ -101,14 +102,11 @@ public class EmojiBSFragment extends BottomSheetDialogFragment { super(itemView); txtEmoji = itemView.findViewById(R.id.txtEmoji); - itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (mEmojiListener != null) { - mEmojiListener.onEmojiClick(emojisList.get(getLayoutPosition())); - } - dismiss(); + itemView.setOnClickListener(v -> { + if (mEmojiListener != null) { + mEmojiListener.onEmojiClick(emojisList.get(getLayoutPosition())); } + dismiss(); }); } } diff --git a/app/src/main/java/app/fedilab/android/imageeditor/PropertiesBSFragment.java b/app/src/main/java/app/fedilab/android/imageeditor/PropertiesBSFragment.java index 0142c03ac..5a7d48087 100644 --- a/app/src/main/java/app/fedilab/android/imageeditor/PropertiesBSFragment.java +++ b/app/src/main/java/app/fedilab/android/imageeditor/PropertiesBSFragment.java @@ -51,13 +51,10 @@ public class PropertiesBSFragment extends BottomSheetDialogFragment implements S rvColor.setLayoutManager(layoutManager); rvColor.setHasFixedSize(true); ColorPickerAdapter colorPickerAdapter = new ColorPickerAdapter(Objects.requireNonNull(getActivity())); - colorPickerAdapter.setOnColorPickerClickListener(new ColorPickerAdapter.OnColorPickerClickListener() { - @Override - public void onColorPickerClickListener(int colorCode) { - if (mProperties != null) { - dismiss(); - mProperties.onColorChanged(colorCode); - } + colorPickerAdapter.setOnColorPickerClickListener(colorCode -> { + if (mProperties != null) { + dismiss(); + mProperties.onColorChanged(colorCode); } }); rvColor.setAdapter(colorPickerAdapter); diff --git a/app/src/main/java/app/fedilab/android/imageeditor/StickerBSFragment.java b/app/src/main/java/app/fedilab/android/imageeditor/StickerBSFragment.java index e87a1ab37..a2f71520e 100644 --- a/app/src/main/java/app/fedilab/android/imageeditor/StickerBSFragment.java +++ b/app/src/main/java/app/fedilab/android/imageeditor/StickerBSFragment.java @@ -51,7 +51,7 @@ public class StickerBSFragment extends BottomSheetDialogFragment { @SuppressLint("RestrictedApi") @Override - public void setupDialog(Dialog dialog, int style) { + public void setupDialog(@NotNull Dialog dialog, int style) { super.setupDialog(dialog, style); View contentView = View.inflate(getContext(), R.layout.fragment_bottom_sticker_emoji_dialog, null); dialog.setContentView(contentView); @@ -76,6 +76,7 @@ public class StickerBSFragment extends BottomSheetDialogFragment { } + @SuppressWarnings("unused") private String convertEmoji(String emoji) { String returnedEmoji = ""; try { @@ -137,16 +138,13 @@ public class StickerBSFragment extends BottomSheetDialogFragment { super(itemView); imgSticker = itemView.findViewById(R.id.imgSticker); - itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (mStickerListener != null) { - mStickerListener.onStickerClick( - BitmapFactory.decodeResource(getResources(), - stickerList[getLayoutPosition()])); - } - dismiss(); + itemView.setOnClickListener(v -> { + if (mStickerListener != null) { + mStickerListener.onStickerClick( + BitmapFactory.decodeResource(getResources(), + stickerList[getLayoutPosition()])); } + dismiss(); }); } } diff --git a/app/src/main/java/app/fedilab/android/imageeditor/TextEditorDialogFragment.java b/app/src/main/java/app/fedilab/android/imageeditor/TextEditorDialogFragment.java index e65dcd382..2e6c88b12 100644 --- a/app/src/main/java/app/fedilab/android/imageeditor/TextEditorDialogFragment.java +++ b/app/src/main/java/app/fedilab/android/imageeditor/TextEditorDialogFragment.java @@ -32,10 +32,9 @@ import app.fedilab.android.R; public class TextEditorDialogFragment extends DialogFragment { public static final String TAG = TextEditorDialogFragment.class.getSimpleName(); - public static final String EXTRA_INPUT_TEXT = "extra_input_text"; - public static final String EXTRA_COLOR_CODE = "extra_color_code"; + private static final String EXTRA_INPUT_TEXT = "extra_input_text"; + private static final String EXTRA_COLOR_CODE = "extra_color_code"; private EditText mAddTextEditText; - private TextView mAddTextDoneTextView; private InputMethodManager mInputMethodManager; private int mColorCode; private TextEditor mTextEditor; @@ -64,7 +63,7 @@ public class TextEditorDialogFragment extends DialogFragment { super.onStart(); Dialog dialog = getDialog(); //Make dialog full screen with transparent background - if (dialog != null) { + if (dialog != null && dialog.getWindow() != null) { int width = ViewGroup.LayoutParams.MATCH_PARENT; int height = ViewGroup.LayoutParams.MATCH_PARENT; dialog.getWindow().setLayout(width, height); @@ -82,41 +81,39 @@ public class TextEditorDialogFragment extends DialogFragment { public void onViewCreated(@NotNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mAddTextEditText = view.findViewById(R.id.add_text_edit_text); - mInputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); - mAddTextDoneTextView = view.findViewById(R.id.add_text_done_tv); + if( getActivity() != null) { + mInputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + TextView mAddTextDoneTextView = view.findViewById(R.id.add_text_done_tv); - //Setup the color picker for text color - RecyclerView addTextColorPickerRecyclerView = view.findViewById(R.id.add_text_color_picker_recycler_view); - LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false); - addTextColorPickerRecyclerView.setLayoutManager(layoutManager); - addTextColorPickerRecyclerView.setHasFixedSize(true); - ColorPickerAdapter colorPickerAdapter = new ColorPickerAdapter(getActivity()); - //This listener will change the text color when clicked on any color from picker - colorPickerAdapter.setOnColorPickerClickListener(new ColorPickerAdapter.OnColorPickerClickListener() { - @Override - public void onColorPickerClickListener(int colorCode) { + + //Setup the color picker for text color + RecyclerView addTextColorPickerRecyclerView = view.findViewById(R.id.add_text_color_picker_recycler_view); + LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false); + addTextColorPickerRecyclerView.setLayoutManager(layoutManager); + addTextColorPickerRecyclerView.setHasFixedSize(true); + ColorPickerAdapter colorPickerAdapter = new ColorPickerAdapter(getActivity()); + //This listener will change the text color when clicked on any color from picker + colorPickerAdapter.setOnColorPickerClickListener(colorCode -> { mColorCode = colorCode; mAddTextEditText.setTextColor(colorCode); - } - }); - addTextColorPickerRecyclerView.setAdapter(colorPickerAdapter); - mAddTextEditText.setText(getArguments().getString(EXTRA_INPUT_TEXT)); - mColorCode = getArguments().getInt(EXTRA_COLOR_CODE); - mAddTextEditText.setTextColor(mColorCode); - mInputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); + }); + addTextColorPickerRecyclerView.setAdapter(colorPickerAdapter); + assert getArguments() != null; + mAddTextEditText.setText(getArguments().getString(EXTRA_INPUT_TEXT)); + mColorCode = getArguments().getInt(EXTRA_COLOR_CODE); + mAddTextEditText.setTextColor(mColorCode); + mInputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); - //Make a callback on activity when user is done with text editing - mAddTextDoneTextView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - mInputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + //Make a callback on activity when user is done with text editing + mAddTextDoneTextView.setOnClickListener(view1 -> { + mInputMethodManager.hideSoftInputFromWindow(view1.getWindowToken(), 0); dismiss(); String inputText = mAddTextEditText.getText().toString(); if (!TextUtils.isEmpty(inputText) && mTextEditor != null) { mTextEditor.onDone(inputText, mColorCode); } - } - }); + }); + } } diff --git a/app/src/main/java/app/fedilab/android/imageeditor/tools/EditingToolsAdapter.java b/app/src/main/java/app/fedilab/android/imageeditor/tools/EditingToolsAdapter.java index 81f110251..0ee63e63a 100644 --- a/app/src/main/java/app/fedilab/android/imageeditor/tools/EditingToolsAdapter.java +++ b/app/src/main/java/app/fedilab/android/imageeditor/tools/EditingToolsAdapter.java @@ -59,7 +59,7 @@ public class EditingToolsAdapter extends RecyclerView.Adapter mOnItemSelected.onToolSelected(mToolList.get(getLayoutPosition()).mToolType)); } } } \ No newline at end of file diff --git a/app/src/main/java/app/fedilab/android/services/BackupNotificationInDataBaseService.java b/app/src/main/java/app/fedilab/android/services/BackupNotificationInDataBaseService.java index 60da93afc..16bfdb9a1 100644 --- a/app/src/main/java/app/fedilab/android/services/BackupNotificationInDataBaseService.java +++ b/app/src/main/java/app/fedilab/android/services/BackupNotificationInDataBaseService.java @@ -93,21 +93,15 @@ public class BackupNotificationInDataBaseService extends IntentService { } boolean finalToastMessage = toastMessage; if (instanceRunning == 0) { - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { - if (finalToastMessage) { - Toasty.info(BackupNotificationInDataBaseService.this, getString(R.string.data_export_start), Toast.LENGTH_LONG).show(); - } + new Handler(Looper.getMainLooper()).post(() -> { + if (finalToastMessage) { + Toasty.info(BackupNotificationInDataBaseService.this, getString(R.string.data_export_start), Toast.LENGTH_LONG).show(); } }); } else { - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { - if (finalToastMessage) { - Toasty.info(BackupNotificationInDataBaseService.this, getString(R.string.data_export_running), Toast.LENGTH_LONG).show(); - } + new Handler(Looper.getMainLooper()).post(() -> { + if (finalToastMessage) { + Toasty.info(BackupNotificationInDataBaseService.this, getString(R.string.data_export_running), Toast.LENGTH_LONG).show(); } }); return; @@ -161,12 +155,9 @@ public class BackupNotificationInDataBaseService extends IntentService { e.printStackTrace(); message = getString(R.string.data_export_error, account.getAcct()); final String finalMessage = message; - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { - if (finalToastMessage) { - Toasty.error(BackupNotificationInDataBaseService.this, finalMessage, Toast.LENGTH_LONG).show(); - } + new Handler(Looper.getMainLooper()).post(() -> { + if (finalToastMessage) { + Toasty.error(BackupNotificationInDataBaseService.this, finalMessage, Toast.LENGTH_LONG).show(); } }); } diff --git a/app/src/main/java/app/fedilab/android/services/BackupStatusInDataBaseService.java b/app/src/main/java/app/fedilab/android/services/BackupStatusInDataBaseService.java index 33d57bfc7..cf8e756e7 100644 --- a/app/src/main/java/app/fedilab/android/services/BackupStatusInDataBaseService.java +++ b/app/src/main/java/app/fedilab/android/services/BackupStatusInDataBaseService.java @@ -94,21 +94,15 @@ public class BackupStatusInDataBaseService extends IntentService { } boolean finalToastMessage = toastMessage; if (instanceRunning == 0) { - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { - if (finalToastMessage) { - Toasty.info(BackupStatusInDataBaseService.this, getString(R.string.data_export_start), Toast.LENGTH_LONG).show(); - } + new Handler(Looper.getMainLooper()).post(() -> { + if (finalToastMessage) { + Toasty.info(BackupStatusInDataBaseService.this, getString(R.string.data_export_start), Toast.LENGTH_LONG).show(); } }); } else { - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { - if (finalToastMessage) { - Toasty.info(BackupStatusInDataBaseService.this, getString(R.string.data_export_running), Toast.LENGTH_LONG).show(); - } + new Handler(Looper.getMainLooper()).post(() -> { + if (finalToastMessage) { + Toasty.info(BackupStatusInDataBaseService.this, getString(R.string.data_export_running), Toast.LENGTH_LONG).show(); } }); return; @@ -159,12 +153,9 @@ public class BackupStatusInDataBaseService extends IntentService { e.printStackTrace(); message = getString(R.string.data_export_error, account.getAcct()); final String finalMessage = message; - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { - if (finalToastMessage) { - Toasty.error(BackupStatusInDataBaseService.this, finalMessage, Toast.LENGTH_LONG).show(); - } + new Handler(Looper.getMainLooper()).post(() -> { + if (finalToastMessage) { + Toasty.error(BackupStatusInDataBaseService.this, finalMessage, Toast.LENGTH_LONG).show(); } }); } diff --git a/app/src/main/java/app/fedilab/android/services/BackupStatusService.java b/app/src/main/java/app/fedilab/android/services/BackupStatusService.java index 271bdf276..901b42dbd 100644 --- a/app/src/main/java/app/fedilab/android/services/BackupStatusService.java +++ b/app/src/main/java/app/fedilab/android/services/BackupStatusService.java @@ -86,19 +86,9 @@ public class BackupStatusService extends IntentService { @Override protected void onHandleIntent(@Nullable Intent intent) { if (instanceRunning == 0) { - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { - Toasty.info(BackupStatusService.this, getString(R.string.data_export_start), Toast.LENGTH_LONG).show(); - } - }); + new Handler(Looper.getMainLooper()).post(() -> Toasty.info(BackupStatusService.this, getString(R.string.data_export_start), Toast.LENGTH_LONG).show()); } else { - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { - Toasty.info(BackupStatusService.this, getString(R.string.data_export_running), Toast.LENGTH_LONG).show(); - } - }); + new Handler(Looper.getMainLooper()).post(() -> Toasty.info(BackupStatusService.this, getString(R.string.data_export_running), Toast.LENGTH_LONG).show()); return; } instanceRunning++; @@ -164,7 +154,6 @@ public class BackupStatusService extends IntentService { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) content = Html.fromHtml(status.getContent(), Html.FROM_HTML_MODE_LEGACY).toString(); else - //noinspection deprecation content = Html.fromHtml(status.getContent()).toString(); builder.append("\"").append(content.replace("\"", "'").replace("\n", " ")).append("\"").append(','); builder.append("\"").append(Helper.shortDateTime(BackupStatusService.this, status.getCreated_at())).append("\"").append(','); @@ -198,12 +187,7 @@ public class BackupStatusService extends IntentService { e.printStackTrace(); message = getString(R.string.data_export_error, account.getAcct()); final String finalMessage = message; - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { - Toasty.error(BackupStatusService.this, finalMessage, Toast.LENGTH_LONG).show(); - } - }); + new Handler(Looper.getMainLooper()).post(() -> Toasty.error(BackupStatusService.this, finalMessage, Toast.LENGTH_LONG).show()); } instanceRunning--; diff --git a/app/src/main/java/app/fedilab/android/services/LiveNotificationDelayedService.java b/app/src/main/java/app/fedilab/android/services/LiveNotificationDelayedService.java index 0dbdf4c72..0aa989132 100644 --- a/app/src/main/java/app/fedilab/android/services/LiveNotificationDelayedService.java +++ b/app/src/main/java/app/fedilab/android/services/LiveNotificationDelayedService.java @@ -210,6 +210,7 @@ public class LiveNotificationDelayedService extends Service { private void startThread(Account accountStream, String key) { Thread thread = new Thread() { + @SuppressWarnings("ConstantConditions") @Override public void run() { while (fetch) { @@ -236,6 +237,7 @@ public class LiveNotificationDelayedService extends Service { } + @SuppressWarnings("ConstantConditions") private void taks(Account account) { String key = account.getUsername() + "@" + account.getInstance(); APIResponse apiResponse; @@ -433,39 +435,36 @@ public class LiveNotificationDelayedService extends Service { final String finalMessage = message; Handler mainHandler = new Handler(Looper.getMainLooper()); Helper.NotifType finalNotifType = notifType; - Runnable myRunnable = new Runnable() { - @Override - public void run() { - if (finalMessage != null) { - Glide.with(LiveNotificationDelayedService.this) - .asBitmap() - .load(notification.getAccount().getAvatar()) - .listener(new RequestListener() { - @Override - public boolean onResourceReady(Bitmap resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { - return false; - } + Runnable myRunnable = () -> { + if (finalMessage != null) { + Glide.with(LiveNotificationDelayedService.this) + .asBitmap() + .load(notification.getAccount().getAvatar()) + .listener(new RequestListener() { + @Override + public boolean onResourceReady(Bitmap resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { + return false; + } - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { - Helper.notify_user(LiveNotificationDelayedService.this, account, intent, BitmapFactory.decodeResource(getResources(), - getMainLogo(LiveNotificationDelayedService.this)), finalNotifType, "@" + notification.getAccount().getAcct(), finalMessage); - return false; - } - }) - .into(new CustomTarget() { - @Override - public void onResourceReady(@NonNull Bitmap resource, Transition transition) { + @Override + public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { + Helper.notify_user(LiveNotificationDelayedService.this, account, intent, BitmapFactory.decodeResource(getResources(), + getMainLogo(LiveNotificationDelayedService.this)), finalNotifType, "@" + notification.getAccount().getAcct(), finalMessage); + return false; + } + }) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, Transition transition) { - Helper.notify_user(LiveNotificationDelayedService.this, account, intent, resource, finalNotifType, "@" + notification.getAccount().getAcct(), finalMessage); - } + Helper.notify_user(LiveNotificationDelayedService.this, account, intent, resource, finalNotifType, "@" + notification.getAccount().getAcct(), finalMessage); + } - @Override - public void onLoadCleared(@Nullable Drawable placeholder) { + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { - } - }); - } + } + }); } }; mainHandler.post(myRunnable); diff --git a/app/src/main/java/app/fedilab/android/services/LiveNotificationService.java b/app/src/main/java/app/fedilab/android/services/LiveNotificationService.java index 7e3c26c68..25cf2e1fb 100644 --- a/app/src/main/java/app/fedilab/android/services/LiveNotificationService.java +++ b/app/src/main/java/app/fedilab/android/services/LiveNotificationService.java @@ -197,7 +197,6 @@ public class LiveNotificationService extends Service implements NetworkStateRece for (Thread t : Thread.getAllStackTraces().keySet()) { if (t.getName().startsWith("notif_live_")) { t.interrupt(); - t = null; } } Thread.currentThread().interrupt(); diff --git a/app/src/main/java/app/fedilab/android/services/StreamingFederatedTimelineService.java b/app/src/main/java/app/fedilab/android/services/StreamingFederatedTimelineService.java index 03b2aef6a..2ff960735 100644 --- a/app/src/main/java/app/fedilab/android/services/StreamingFederatedTimelineService.java +++ b/app/src/main/java/app/fedilab/android/services/StreamingFederatedTimelineService.java @@ -29,7 +29,6 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.koushikdutta.async.http.AsyncHttpClient; import com.koushikdutta.async.http.AsyncHttpRequest; import com.koushikdutta.async.http.Headers; -import com.koushikdutta.async.http.WebSocket; import org.json.JSONException; import org.json.JSONObject; @@ -37,8 +36,6 @@ import org.json.JSONObject; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; -import javax.net.ssl.HttpsURLConnection; - import app.fedilab.android.client.API; import app.fedilab.android.client.Entities.Account; import app.fedilab.android.client.Entities.Status; @@ -55,7 +52,6 @@ import app.fedilab.android.sqlite.Sqlite; public class StreamingFederatedTimelineService extends IntentService { - private static HttpsURLConnection httpsURLConnection; static { Helper.installProvider(); @@ -116,34 +112,27 @@ public class StreamingFederatedTimelineService extends IntentService { try { AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory(accountStream.getInstance()).getSSLContext()); AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setConnectAllAddresses(true); - } catch (KeyManagementException e) { - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { + } catch (KeyManagementException | NoSuchAlgorithmException e) { e.printStackTrace(); } } - AsyncHttpClient.getDefaultInstance().websocket("wss://" + accountStream.getInstance() + "/api/v1/streaming/?stream=public&access_token=" + accountStream.getToken(), "wss", new AsyncHttpClient.WebSocketConnectCallback() { - @Override - public void onCompleted(Exception ex, WebSocket webSocket) { - if (ex != null) { - ex.printStackTrace(); + AsyncHttpClient.getDefaultInstance().websocket("wss://" + accountStream.getInstance() + "/api/v1/streaming/?stream=public&access_token=" + accountStream.getToken(), "wss", (ex, webSocket) -> { + if (ex != null) { + ex.printStackTrace(); + return; + } + webSocket.setStringCallback(s -> { + if (!sharedpreferences.getBoolean(Helper.SHOULD_CONTINUE_STREAMING_FEDERATED + finalAccountStream.getId() + finalAccountStream.getInstance(), true)) { + stopSelf(); return; } - webSocket.setStringCallback(new WebSocket.StringCallback() { - public void onStringAvailable(String s) { - if (!sharedpreferences.getBoolean(Helper.SHOULD_CONTINUE_STREAMING_FEDERATED + finalAccountStream.getId() + finalAccountStream.getInstance(), true)) { - stopSelf(); - return; - } - try { - JSONObject eventJson = new JSONObject(s); + try { + JSONObject eventJson = new JSONObject(s); - onRetrieveStreaming(finalAccountStream, eventJson); - } catch (JSONException ignored) { - } - } - }); - } + onRetrieveStreaming(finalAccountStream, eventJson); + } catch (JSONException ignored) { + } + }); }); } } diff --git a/app/src/main/java/app/fedilab/android/services/StreamingHomeTimelineService.java b/app/src/main/java/app/fedilab/android/services/StreamingHomeTimelineService.java index a263b904a..858727ffa 100644 --- a/app/src/main/java/app/fedilab/android/services/StreamingHomeTimelineService.java +++ b/app/src/main/java/app/fedilab/android/services/StreamingHomeTimelineService.java @@ -29,7 +29,6 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.koushikdutta.async.http.AsyncHttpClient; import com.koushikdutta.async.http.AsyncHttpRequest; import com.koushikdutta.async.http.Headers; -import com.koushikdutta.async.http.WebSocket; import org.json.JSONException; import org.json.JSONObject; @@ -37,8 +36,6 @@ import org.json.JSONObject; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; -import javax.net.ssl.HttpsURLConnection; - import app.fedilab.android.client.API; import app.fedilab.android.client.Entities.Account; import app.fedilab.android.client.Entities.Status; @@ -55,7 +52,6 @@ import app.fedilab.android.sqlite.Sqlite; public class StreamingHomeTimelineService extends IntentService { - private static HttpsURLConnection httpsURLConnection; static { Helper.installProvider(); @@ -116,34 +112,27 @@ public class StreamingHomeTimelineService extends IntentService { try { AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory(accountStream.getInstance()).getSSLContext()); AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setConnectAllAddresses(true); - } catch (KeyManagementException e) { - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { + } catch (KeyManagementException | NoSuchAlgorithmException e) { e.printStackTrace(); } } - AsyncHttpClient.getDefaultInstance().websocket("wss://" + accountStream.getInstance() + "/api/v1/streaming/?stream=user&access_token=" + accountStream.getToken(), "wss", new AsyncHttpClient.WebSocketConnectCallback() { - @Override - public void onCompleted(Exception ex, WebSocket webSocket) { - if (ex != null) { - ex.printStackTrace(); + AsyncHttpClient.getDefaultInstance().websocket("wss://" + accountStream.getInstance() + "/api/v1/streaming/?stream=user&access_token=" + accountStream.getToken(), "wss", (ex, webSocket) -> { + if (ex != null) { + ex.printStackTrace(); + return; + } + webSocket.setStringCallback(s -> { + if (!sharedpreferences.getBoolean(Helper.SHOULD_CONTINUE_STREAMING_HOME + finalAccountStream.getId() + finalAccountStream.getInstance(), true)) { + stopSelf(); return; } - webSocket.setStringCallback(new WebSocket.StringCallback() { - public void onStringAvailable(String s) { - if (!sharedpreferences.getBoolean(Helper.SHOULD_CONTINUE_STREAMING_HOME + finalAccountStream.getId() + finalAccountStream.getInstance(), true)) { - stopSelf(); - return; - } - try { - JSONObject eventJson = new JSONObject(s); + try { + JSONObject eventJson = new JSONObject(s); - onRetrieveStreaming(finalAccountStream, eventJson); - } catch (JSONException ignored) { - } - } - }); - } + onRetrieveStreaming(finalAccountStream, eventJson); + } catch (JSONException ignored) { + } + }); }); } } diff --git a/app/src/main/java/app/fedilab/android/services/StreamingLocalTimelineService.java b/app/src/main/java/app/fedilab/android/services/StreamingLocalTimelineService.java index 4cd1be065..ae9a2f7ea 100644 --- a/app/src/main/java/app/fedilab/android/services/StreamingLocalTimelineService.java +++ b/app/src/main/java/app/fedilab/android/services/StreamingLocalTimelineService.java @@ -29,7 +29,6 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.koushikdutta.async.http.AsyncHttpClient; import com.koushikdutta.async.http.AsyncHttpRequest; import com.koushikdutta.async.http.Headers; -import com.koushikdutta.async.http.WebSocket; import org.json.JSONException; import org.json.JSONObject; @@ -37,8 +36,6 @@ import org.json.JSONObject; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; -import javax.net.ssl.HttpsURLConnection; - import app.fedilab.android.client.API; import app.fedilab.android.client.Entities.Account; import app.fedilab.android.client.Entities.Status; @@ -55,7 +52,6 @@ import app.fedilab.android.sqlite.Sqlite; public class StreamingLocalTimelineService extends IntentService { - private static HttpsURLConnection httpsURLConnection; static { Helper.installProvider(); @@ -117,33 +113,26 @@ public class StreamingLocalTimelineService extends IntentService { try { AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory(accountStream.getInstance()).getSSLContext()); AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setConnectAllAddresses(true); - } catch (KeyManagementException e) { - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { + } catch (KeyManagementException | NoSuchAlgorithmException e) { e.printStackTrace(); } } - AsyncHttpClient.getDefaultInstance().websocket("wss://" + accountStream.getInstance() + "/api/v1/streaming/?stream=public:local&access_token=" + accountStream.getToken(), "wss", new AsyncHttpClient.WebSocketConnectCallback() { - @Override - public void onCompleted(Exception ex, WebSocket webSocket) { - if (ex != null) { - ex.printStackTrace(); + AsyncHttpClient.getDefaultInstance().websocket("wss://" + accountStream.getInstance() + "/api/v1/streaming/?stream=public:local&access_token=" + accountStream.getToken(), "wss", (ex, webSocket) -> { + if (ex != null) { + ex.printStackTrace(); + return; + } + webSocket.setStringCallback(s -> { + if (!sharedpreferences.getBoolean(Helper.SHOULD_CONTINUE_STREAMING_LOCAL + finalAccountStream.getId() + finalAccountStream.getInstance(), true)) { + stopSelf(); return; } - webSocket.setStringCallback(new WebSocket.StringCallback() { - public void onStringAvailable(String s) { - if (!sharedpreferences.getBoolean(Helper.SHOULD_CONTINUE_STREAMING_LOCAL + finalAccountStream.getId() + finalAccountStream.getInstance(), true)) { - stopSelf(); - return; - } - try { - JSONObject eventJson = new JSONObject(s); - onRetrieveStreaming(finalAccountStream, eventJson); - } catch (JSONException ignored) { - } - } - }); - } + try { + JSONObject eventJson = new JSONObject(s); + onRetrieveStreaming(finalAccountStream, eventJson); + } catch (JSONException ignored) { + } + }); }); } } diff --git a/app/src/main/java/app/fedilab/android/sqlite/DomainBlockDAO.java b/app/src/main/java/app/fedilab/android/sqlite/DomainBlockDAO.java index 6a1ab654d..15d2bddbd 100644 --- a/app/src/main/java/app/fedilab/android/sqlite/DomainBlockDAO.java +++ b/app/src/main/java/app/fedilab/android/sqlite/DomainBlockDAO.java @@ -51,7 +51,8 @@ public class DomainBlockDAO { values.put(Sqlite.COL_DOMAIN, domain); try { db.insert(Sqlite.TABLE_TRACKING_BLOCK, null, values); - } catch (Exception ignored) {} + } catch (Exception ignored) { + } } /** diff --git a/app/src/main/res/layout-sw600dp/activity_show_account.xml b/app/src/main/res/layout-sw600dp/activity_show_account.xml index 489d971be..49de64803 100644 --- a/app/src/main/res/layout-sw600dp/activity_show_account.xml +++ b/app/src/main/res/layout-sw600dp/activity_show_account.xml @@ -172,7 +172,7 @@ android:id="@+id/account_dn" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:maxLines="1" + android:singleLine="true" android:textAppearance="@style/TextAppearance.AppCompat.Body1" android:textColor="?colorAccent" android:textSize="16sp" /> @@ -181,7 +181,7 @@ android:id="@+id/account_un" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:maxLines="1" + android:singleLine="true" android:textSize="14sp" /> @@ -279,7 +279,7 @@ android:layout_marginStart="3dp" android:layout_marginEnd="3dp" android:background="@drawable/blue_border" - android:maxLines="1" + android:singleLine="true" android:visibility="gone" android:textColor="@color/mastodonC4" /> @@ -290,7 +290,7 @@ android:layout_marginStart="3dp" android:layout_marginEnd="3dp" android:background="@drawable/green_border" - android:maxLines="1" + android:singleLine="true" android:text="@string/followed_by" android:textColor="@color/verified_text" android:visibility="gone" /> @@ -302,7 +302,7 @@ android:layout_marginStart="3dp" android:layout_marginEnd="3dp" android:background="@drawable/blue_border" - android:maxLines="1" + android:singleLine="true" android:text="@string/request_sent" android:textColor="@color/mastodonC4" android:visibility="gone" /> @@ -521,7 +521,7 @@ android:layout_marginStart="5dp" android:layout_marginLeft="5dp" android:layout_weight="1" - android:maxLines="1" + android:singleLine="true" android:textSize="14sp" /> @@ -57,7 +57,7 @@ android:id="@+id/account_un" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:maxLines="1" + android:singleLine="true" android:textSize="14sp" /> @@ -66,7 +66,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:maxLines="1" + android:singleLine="true" android:textSize="16sp" android:visibility="gone" /> @@ -93,7 +93,7 @@ diff --git a/app/src/main/res/layout/activity_edit_profile.xml b/app/src/main/res/layout/activity_edit_profile.xml index 415401a84..62ecd8c27 100644 --- a/app/src/main/res/layout/activity_edit_profile.xml +++ b/app/src/main/res/layout/activity_edit_profile.xml @@ -56,7 +56,7 @@ android:layout_height="wrap_content" android:layout_marginTop="10dp" android:inputType="textPersonName" - android:maxLines="1" /> + android:singleLine="true" />