diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8b01d869..9003cab6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -150,6 +150,20 @@
android:name="android.support.PARENT_ACTIVITY"
android:value=".activities.main.MainActivity" />
+
+
+
+
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardActivity.java
index 057b6d63..76d15b4f 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardActivity.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/activities/board/BoardActivity.java
@@ -8,6 +8,7 @@ import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
+import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -142,7 +143,7 @@ public class BoardActivity extends BaseActivity implements BoardAdapter.OnLoadMo
mainContent.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
- public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
totalItemCount = layoutManager.getItemCount();
lastVisibleItem = layoutManager.findLastVisibleItemPosition();
diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksActivity.java
index 107ed6ce..dcf2ea84 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksActivity.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/activities/bookmarks/BookmarksActivity.java
@@ -4,6 +4,7 @@ import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
+import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
@@ -128,7 +129,7 @@ public class BookmarksActivity extends BaseActivity {
* it may be best to switch to a
* {@link FragmentStatePagerAdapter}.
*/
- private class SectionsPagerAdapter extends FragmentPagerAdapter {
+ private static class SectionsPagerAdapter extends FragmentPagerAdapter {
private final List fragmentList = new ArrayList<>();
private final List fragmentTitleList = new ArrayList<>();
@@ -142,6 +143,7 @@ public class BookmarksActivity extends BaseActivity {
notifyDataSetChanged();
}
+ @NonNull
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
@@ -158,8 +160,7 @@ public class BookmarksActivity extends BaseActivity {
}
@Override
- public int getItemPosition(Object object) {
- @SuppressWarnings("RedundantCast")
+ public int getItemPosition(@NonNull Object object) {
int position = fragmentList.indexOf((Fragment) object);
return position == -1 ? POSITION_NONE : position;
}
diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java
index 625f7440..ed4431ce 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/activities/main/recent/RecentFragment.java
@@ -32,8 +32,6 @@ import gr.thmmy.mthmmy.utils.parsing.ParseException;
import gr.thmmy.mthmmy.views.CustomRecyclerView;
import me.zhanghai.android.materialprogressbar.MaterialProgressBar;
import okhttp3.Response;
-import timber.log.Timber;
-
/**
* A {@link BaseFragment} subclass.
@@ -86,10 +84,8 @@ public class RecentFragment extends BaseFragment {
recentTask = new RecentTask(this::onRecentTaskStarted, this::onRecentTaskFinished);
recentTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, SessionManager.indexUrl.toString());
}
- Timber.d("onActivityCreated");
}
-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/summary/SummaryFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/summary/SummaryFragment.java
index 749f42bc..a0cac182 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/activities/profile/summary/SummaryFragment.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/activities/profile/summary/SummaryFragment.java
@@ -21,6 +21,7 @@ import org.jsoup.select.Elements;
import java.util.HashMap;
import java.util.LinkedHashMap;
+import java.util.Objects;
import gr.thmmy.mthmmy.R;
import gr.thmmy.mthmmy.utils.parsing.ParseHelpers;
@@ -68,7 +69,7 @@ public class SummaryFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- profileSummaryDocument = Jsoup.parse(requireArguments().getString(PROFILE_DOCUMENT));
+ profileSummaryDocument = Jsoup.parse(Objects.requireNonNull(requireArguments().getString(PROFILE_DOCUMENT)));
parsedProfileSummaryData = new LinkedHashMap<>();
}
diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutboxFragment.java b/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutboxFragment.java
index d6ab6cfd..fd7bb28e 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutboxFragment.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/activities/shoutbox/ShoutboxFragment.java
@@ -56,6 +56,7 @@ public class ShoutboxFragment extends Fragment {
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
layoutManager.setReverseLayout(true);
recyclerView.setLayoutManager(layoutManager);
+ recyclerView.setItemViewCacheSize(25);
recyclerView.setOnTouchListener((view, motionEvent) -> {
editorView.hideMarkdown();
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
@@ -82,7 +83,7 @@ public class ShoutboxFragment extends Fragment {
}
@Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.shoutbox_menu, menu);
}
@@ -100,7 +101,7 @@ public class ShoutboxFragment extends Fragment {
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
shoutboxViewModel = ViewModelProviders.of(getActivity()).get(ShoutboxViewModel.class);
- shoutboxViewModel.getShoutboxMutableLiveData().observe(this, shoutbox -> {
+ shoutboxViewModel.getShoutboxMutableLiveData().observe(getViewLifecycleOwner(), shoutbox -> {
if (shoutbox != null) {
Timber.i("Shoutbox loaded successfully");
shoutAdapter.setShouts(shoutbox.getShouts());
diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java
index 0584192f..9d0d4556 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java
@@ -43,7 +43,7 @@ import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.appcompat.widget.AppCompatButton;
-import androidx.lifecycle.ViewModelProviders;
+import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
@@ -113,7 +113,7 @@ class TopicAdapter extends RecyclerView.Adapter {
this.postFocusListener = context;
this.emojiKeyboard = emojiKeyboard;
- viewModel = ViewModelProviders.of(context).get(TopicViewModel.class);
+ viewModel = new ViewModelProvider(context).get(TopicViewModel.class);
}
@Override
@@ -137,7 +137,8 @@ class TopicAdapter extends RecyclerView.Adapter {
quickReplyText.setFocusableInTouchMode(true);
quickReplyText.setOnFocusChangeListener((v, hasFocus) -> quickReplyText.post(() -> {
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(quickReplyText, InputMethodManager.SHOW_IMPLICIT);
+ if (imm != null)
+ imm.showSoftInput(quickReplyText, InputMethodManager.SHOW_IMPLICIT);
}));
quickReplyText.requestFocus();
@@ -150,7 +151,8 @@ class TopicAdapter extends RecyclerView.Adapter {
editPostEdittext.setFocusableInTouchMode(true);
editPostEdittext.setOnFocusChangeListener((v, hasFocus) -> editPostEdittext.post(() -> {
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(editPostEdittext, InputMethodManager.SHOW_IMPLICIT);
+ if (imm != null)
+ imm.showSoftInput(editPostEdittext, InputMethodManager.SHOW_IMPLICIT);
}));
editPostEdittext.requestFocus();
@@ -215,12 +217,10 @@ class TopicAdapter extends RecyclerView.Adapter {
for (Poll.Entry entry : entries) {
CheckBox checkBox = new CheckBox(context);
checkBox.setMovementMethod(LinkMovementMethod.getInstance());
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
checkBox.setText(Html.fromHtml(entry.getEntryName(), Html.FROM_HTML_MODE_LEGACY));
- } else {
- //noinspection deprecation
+ else
checkBox.setText(Html.fromHtml(entry.getEntryName()));
- }
checkBox.setTextColor(primaryTextColor);
holder.optionsLayout.addView(checkBox);
}
@@ -236,10 +236,9 @@ class TopicAdapter extends RecyclerView.Adapter {
radioButton.setMovementMethod(LinkMovementMethod.getInstance());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
radioButton.setText(Html.fromHtml(entries[i].getEntryName(), Html.FROM_HTML_MODE_LEGACY));
- } else {
- //noinspection deprecation
+ } else
radioButton.setText(Html.fromHtml(entries[i].getEntryName()));
- }
+
radioButton.setText(ThmmyParser.html2span(context, entries[i].getEntryName()));
radioButton.setTextColor(primaryTextColor);
radioGroup.addView(radioButton);
@@ -255,12 +254,11 @@ class TopicAdapter extends RecyclerView.Adapter {
Poll.Entry entry = entries1[i];
TextView textView = new TextView(context);
textView.setMovementMethod(LinkMovementMethod.getInstance());
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
textView.setText(Html.fromHtml(entry.getEntryName(), Html.FROM_HTML_MODE_LEGACY));
- } else {
- //noinspection deprecation
+ else
textView.setText(Html.fromHtml(entry.getEntryName()));
- }
+
textView.setTextColor(primaryTextColor);
if (poll.getSelectedEntryIndex() == i) {
// apply bold to the selected entry
@@ -363,7 +361,6 @@ class TopicAdapter extends RecyclerView.Adapter {
holder.post.setClickable(true);
holder.post.setWebViewClient(new LinkLauncher());
- //noinspection ConstantConditions
loadAvatar(currentPost.getThumbnailURL(), holder.thumbnail, holder.itemView.getContext());
//Sets username,submit date, index number, subject, post's and attached files texts
@@ -385,7 +382,7 @@ class TopicAdapter extends RecyclerView.Adapter {
int filesTextColor;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
filesTextColor = context.getResources().getColor(R.color.accent, null);
- } else //noinspection deprecation
+ } else
filesTextColor = context.getResources().getColor(R.color.accent);
for (final ThmmyFile attachedFile : currentPost.getAttachedFiles()) {
@@ -408,7 +405,7 @@ class TopicAdapter extends RecyclerView.Adapter {
int lastEditTextColor;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
lastEditTextColor = context.getResources().getColor(R.color.white, null);
- } else //noinspection deprecation
+ } else
lastEditTextColor = context.getResources().getColor(R.color.white);
final TextView lastEdit = new TextView(context);
@@ -492,7 +489,7 @@ class TopicAdapter extends RecyclerView.Adapter {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
holder.cardChildLinear.setBackground(context.getResources().
getDrawable(R.drawable.mention_card, null));
- } else //noinspection deprecation
+ } else
holder.cardChildLinear.setBackground(context.getResources().
getDrawable(R.drawable.mention_card));
} else if (mUserColor == TopicParser.USER_COLOR_PINK) {
@@ -500,7 +497,7 @@ class TopicAdapter extends RecyclerView.Adapter {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
holder.cardChildLinear.setBackground(context.getResources().
getDrawable(R.drawable.member_of_the_month_card, null));
- } else //noinspection deprecation
+ } else
holder.cardChildLinear.setBackground(context.getResources().
getDrawable(R.drawable.member_of_the_month_card));
} else holder.cardChildLinear.setBackground(null);
@@ -623,7 +620,6 @@ class TopicAdapter extends RecyclerView.Adapter {
popUp.showAsDropDown(holder.overflowButton);
});
- //noinspection PointlessBooleanExpression,ConstantConditions
if (!BaseActivity.getSessionManager().isLoggedIn() || !viewModel.canReply())
holder.quoteToggle.setVisibility(View.GONE);
else {
@@ -644,7 +640,6 @@ class TopicAdapter extends RecyclerView.Adapter {
final QuickReplyViewHolder holder = (QuickReplyViewHolder) currentHolder;
Post reply = (Post) topicItems.get(position);
- //noinspection ConstantConditions
loadAvatar(getSessionManager().getAvatarLink(), holder.thumbnail, holder.itemView.getContext());
holder.username.setText(getSessionManager().getUsername());
@@ -669,7 +664,9 @@ class TopicAdapter extends RecyclerView.Adapter {
return;
}
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ if (imm != null)
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+
holder.itemView.setAlpha(0.5f);
holder.itemView.setEnabled(false);
emojiKeyboard.hide();
@@ -706,7 +703,6 @@ class TopicAdapter extends RecyclerView.Adapter {
} else if (currentHolder instanceof EditMessageViewHolder) {
final EditMessageViewHolder holder = (EditMessageViewHolder) currentHolder;
- //noinspection ConstantConditions
loadAvatar(getSessionManager().getAvatarLink(), holder.thumbnail, holder.itemView.getContext());
holder.username.setText(getSessionManager().getUsername());
@@ -729,7 +725,9 @@ class TopicAdapter extends RecyclerView.Adapter {
return;
}
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ if (imm != null)
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+
holder.itemView.setAlpha(0.5f);
holder.itemView.setEnabled(false);
emojiKeyboard.hide();
@@ -898,9 +896,7 @@ class TopicAdapter extends RecyclerView.Adapter {
* This class is used to handle link clicks in WebViews. When link url is one that the app can
* handle internally, it does. Otherwise user is prompt to open the link in a browser.
*/
- @SuppressWarnings("unchecked")
private class LinkLauncher extends WebViewClient {
- @SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
final Uri uri = Uri.parse(url);
diff --git a/app/src/main/java/gr/thmmy/mthmmy/utils/crashreporting/CrashReportingTree.java b/app/src/main/java/gr/thmmy/mthmmy/utils/crashreporting/CrashReportingTree.java
index 83e55a37..77d4e352 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/utils/crashreporting/CrashReportingTree.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/utils/crashreporting/CrashReportingTree.java
@@ -2,6 +2,8 @@ package gr.thmmy.mthmmy.utils.crashreporting;
import android.util.Log;
+import androidx.annotation.NonNull;
+
import com.google.firebase.crashlytics.FirebaseCrashlytics;
import timber.log.Timber.DebugTree;
@@ -14,7 +16,7 @@ public class CrashReportingTree extends DebugTree {
}
@Override
- protected void log(int priority, String tag, String message, Throwable t) {
+ protected void log(int priority, String tag, @NonNull String message, Throwable t) {
if (priority == Log.VERBOSE || priority == Log.DEBUG) {
return;
}
diff --git a/app/src/main/java/gr/thmmy/mthmmy/views/editorview/EditorView.java b/app/src/main/java/gr/thmmy/mthmmy/views/editorview/EditorView.java
index 051bfdfb..df39daa3 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/views/editorview/EditorView.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/views/editorview/EditorView.java
@@ -375,11 +375,13 @@ public class EditorView extends LinearLayout implements EmojiInputField {
if (emojiKeyboard.onEmojiButtonToggle()) {
//prevent system keyboard from appearing when clicking the edittext
editText.setTextIsSelectable(true);
- imm.hideSoftInputFromWindow(getWindowToken(), 0);
+ if (imm != null)
+ imm.hideSoftInputFromWindow(getWindowToken(), 0);
}
else {
editText.requestFocus();
- imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
+ if (imm != null)
+ imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
editText.setSelection(selectionStart, selectionEnd);
});
@@ -398,10 +400,12 @@ public class EditorView extends LinearLayout implements EmojiInputField {
editText.setOnClickListener(view -> {
if (!emojiKeyboard.isVisible()) {
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
- imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
+ if (imm != null)
+ imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
} else {
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Activity.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(getWindowToken(), 0);
+ if (imm != null)
+ imm.hideSoftInputFromWindow(getWindowToken(), 0);
requestEditTextFocus();
}
showMarkdown();
diff --git a/app/src/main/res/layout/activity_create_content.xml b/app/src/main/res/layout/activity_create_content.xml
index 5c42f68b..279eb871 100644
--- a/app/src/main/res/layout/activity_create_content.xml
+++ b/app/src/main/res/layout/activity_create_content.xml
@@ -53,7 +53,7 @@
android:layout_below="@id/subject_input"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
- app:hint="topic message"/>
+ app:hint="@string/message"/>
Page
next
last
- Quick reply…
- Subject…
+ Subject
+ Message
Submit
- Message…
Could not connect to thmmy.gr\n\nTap to retry
Network error
retry