diff --git a/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java b/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java index f3b182d74..c8c0c22b9 100644 --- a/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java +++ b/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java @@ -183,7 +183,7 @@ public class InputPanel extends ConstraintLayout if (quoteView.getVisibility() == View.VISIBLE && quoteView.getBody() != null) { return Optional.of(new QuoteModel( quoteView.getDcContact(), quoteView.getBody().toString(), - false, quoteView.getAttachments(), quoteView.getOriginalMsg() + quoteView.getAttachments(), quoteView.getOriginalMsg() )); } else { return Optional.absent(); diff --git a/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java b/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java index 0a02f6494..28d627254 100644 --- a/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java +++ b/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java @@ -83,7 +83,7 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM } else { this.avatar.setAvatar(glideRequests, recipient, false); } - this.avatar.setSeenRecently(contact!=null? contact.wasSeenRecently() : false); + this.avatar.setSeenRecently(contact != null && contact.wasSeenRecently()); setText(name, number, label, contact); setEnabled(enabled); @@ -110,7 +110,7 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM this.nameView.setText(name==null? "#" : name); if(number!=null) { - this.numberView.setText(number == null ? "" : number); + this.numberView.setText(number); this.labelView.setText(label==null? "" : label); this.numberContainer.setVisibility(View.VISIBLE); } @@ -154,7 +154,7 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM Util.runOnMain(() -> { avatar.setAvatar(glideRequests, recipient, false); DcContact contact = recipient.getDcContact(); - avatar.setSeenRecently(contact!=null? contact.wasSeenRecently() : false); + avatar.setSeenRecently(contact != null && contact.wasSeenRecently()); nameView.setText(recipient.toShortString()); }); } diff --git a/src/main/java/org/thoughtcrime/securesms/contacts/avatars/LocalFileContactPhoto.java b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/LocalFileContactPhoto.java index 2e43186cc..dac672756 100644 --- a/src/main/java/org/thoughtcrime/securesms/contacts/avatars/LocalFileContactPhoto.java +++ b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/LocalFileContactPhoto.java @@ -55,7 +55,7 @@ public abstract class LocalFileContactPhoto implements ContactPhoto { @Override public boolean equals(Object other) { - if (other == null || !(other instanceof LocalFileContactPhoto)) return false; + if (!(other instanceof LocalFileContactPhoto)) return false; LocalFileContactPhoto that = (LocalFileContactPhoto) other; return this.address.equals(that.address) && this.id == that.id && this.path.equals(that.path); diff --git a/src/main/java/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java b/src/main/java/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java index c75af9e59..e517390ca 100644 --- a/src/main/java/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java @@ -115,7 +115,7 @@ public abstract class CursorRecyclerViewAdapter 0) { + while (!pendingShareLastLocation.isEmpty()) { shareLastLocation(pendingShareLastLocation.pop()); } } diff --git a/src/main/java/org/thoughtcrime/securesms/geolocation/LocationBackgroundService.java b/src/main/java/org/thoughtcrime/securesms/geolocation/LocationBackgroundService.java index 05ae2409e..4b17f1d27 100644 --- a/src/main/java/org/thoughtcrime/securesms/geolocation/LocationBackgroundService.java +++ b/src/main/java/org/thoughtcrime/securesms/geolocation/LocationBackgroundService.java @@ -12,6 +12,8 @@ import android.os.Bundle; import android.os.IBinder; import android.util.Log; +import androidx.annotation.NonNull; + public class LocationBackgroundService extends Service { private static final int INITIAL_TIMEOUT = 1000 * 60 * 2; @@ -111,7 +113,7 @@ public class LocationBackgroundService extends Service { private class ServiceLocationListener implements LocationListener { @Override - public void onLocationChanged(Location location) { + public void onLocationChanged(@NonNull Location location) { Log.d(TAG, "onLocationChanged: " + location); if (location == null) { return; @@ -120,12 +122,12 @@ public class LocationBackgroundService extends Service { } @Override - public void onProviderDisabled(String provider) { + public void onProviderDisabled(@NonNull String provider) { Log.e(TAG, "onProviderDisabled: " + provider); } @Override - public void onProviderEnabled(String provider) { + public void onProviderEnabled(@NonNull String provider) { Log.e(TAG, "onProviderEnabled: " + provider); } diff --git a/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoFetcher.java b/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoFetcher.java index d7844ce48..56db549e7 100644 --- a/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoFetcher.java +++ b/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoFetcher.java @@ -27,7 +27,7 @@ class ContactPhotoFetcher implements DataFetcher { } @Override - public void loadData(Priority priority, DataCallback callback) { + public void loadData(@NonNull Priority priority, DataCallback callback) { try { inputStream = contactPhoto.openInputStream(context); callback.onDataReady(inputStream); @@ -40,7 +40,7 @@ class ContactPhotoFetcher implements DataFetcher { public void cleanup() { try { if (inputStream != null) inputStream.close(); - } catch (IOException e) {} + } catch (IOException ignored) {} } @Override diff --git a/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoLoader.java b/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoLoader.java index 0bafbfc1d..cfe867ce4 100644 --- a/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoLoader.java +++ b/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoLoader.java @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.glide; import android.content.Context; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.bumptech.glide.load.Options; @@ -23,12 +24,12 @@ public class ContactPhotoLoader implements ModelLoader buildLoadData(ContactPhoto contactPhoto, int width, int height, Options options) { + public LoadData buildLoadData(@NonNull ContactPhoto contactPhoto, int width, int height, @NonNull Options options) { return new LoadData<>(contactPhoto, new ContactPhotoFetcher(context, contactPhoto)); } @Override - public boolean handles(ContactPhoto contactPhoto) { + public boolean handles(@NonNull ContactPhoto contactPhoto) { return true; } @@ -40,8 +41,9 @@ public class ContactPhotoLoader implements ModelLoader build(MultiModelLoaderFactory multiFactory) { + public ModelLoader build(@NonNull MultiModelLoaderFactory multiFactory) { return new ContactPhotoLoader(context); } diff --git a/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java b/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java index 77bd46add..d00fe7e9a 100644 --- a/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -273,7 +273,7 @@ public class AttachmentManager { if (slide == null) { setAttachmentPresent(false); result.set(false); - } else if (slide.getFileSize()>1*1024*1024*1024) { + } else if (slide.getFileSize() > 1024 * 1024 * 1024) { // this is only a rough check, videos and images may be recoded // and the core checks more carefully later. setAttachmentPresent(false); @@ -333,28 +333,24 @@ public class AttachmentManager { } private @Nullable Slide getContentResolverSlideInfo(Uri uri, int width, int height, int chatId) { - Cursor cursor = null; - long start = System.currentTimeMillis(); - try { - cursor = context.getContentResolver().query(uri, null, null, null, null); + long start = System.currentTimeMillis(); + try (Cursor cursor = context.getContentResolver().query(uri, null, null, null, null)) { if (cursor != null && cursor.moveToFirst()) { String fileName = cursor.getString(cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME)); - long fileSize = cursor.getLong(cursor.getColumnIndexOrThrow(OpenableColumns.SIZE)); + long fileSize = cursor.getLong(cursor.getColumnIndexOrThrow(OpenableColumns.SIZE)); String mimeType = context.getContentResolver().getType(uri); if (width == 0 || height == 0) { Pair dimens = MediaUtil.getDimensions(context, mimeType, uri); - width = dimens.first; + width = dimens.first; height = dimens.second; } Log.w(TAG, "remote slide with size " + fileSize + " took " + (System.currentTimeMillis() - start) + "ms"); return mediaType.createSlide(context, uri, fileName, mimeType, fileSize, width, height, chatId); } - } finally { - if (cursor != null) cursor.close(); } return null; @@ -395,7 +391,7 @@ public class AttachmentManager { try { fileName = new File(uri.getPath()).getName(); } catch(Exception e) { - Log.w(TAG, "Could not get file name from uri: " + e.toString()); + Log.w(TAG, "Could not get file name from uri: " + e); } } @@ -431,14 +427,11 @@ public class AttachmentManager { public static @Nullable String getFileName(Context context, Uri uri) { String result = null; - if (uri.getScheme().equals("content")) { - Cursor cursor = context.getContentResolver().query(uri, new String[]{OpenableColumns.DISPLAY_NAME}, null, null, null); - try { + if ("content".equals(uri.getScheme())) { + try (Cursor cursor = context.getContentResolver().query(uri, new String[]{OpenableColumns.DISPLAY_NAME}, null, null, null)) { if (cursor != null && cursor.moveToFirst()) { result = cursor.getString(cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME)); } - } finally { - if (cursor != null) cursor.close(); } } if (result == null) { @@ -495,11 +488,10 @@ public class AttachmentManager { .withPermanentDenialDialog(activity.getString(R.string.perm_explain_access_to_location_denied)) .onAllGranted(() -> { ShareLocationDialog.show(activity, durationInSeconds -> { - switch (durationInSeconds) { - case 1: dcLocationManager.shareLastLocation(chatId); break; - default: - dcLocationManager.shareLocation(durationInSeconds, chatId); - break; + if (durationInSeconds == 1) { + dcLocationManager.shareLastLocation(chatId); + } else { + dcLocationManager.shareLocation(durationInSeconds, chatId); } }); }); @@ -704,7 +696,7 @@ public class AttachmentManager { return slide; } } catch (RpcException e) { - e.printStackTrace(); + Log.e(TAG, "Error in call to rpc.parseVcard()", e); } } diff --git a/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java b/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java index 421c2db62..48a9a904b 100644 --- a/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java +++ b/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java @@ -58,11 +58,6 @@ public class AudioSlide extends Slide { return null; } - @Override - public boolean hasImage() { - return false; - } - @Override public boolean hasAudio() { return true; diff --git a/src/main/java/org/thoughtcrime/securesms/mms/GifSlide.java b/src/main/java/org/thoughtcrime/securesms/mms/GifSlide.java index 44620dac8..2811be6e3 100644 --- a/src/main/java/org/thoughtcrime/securesms/mms/GifSlide.java +++ b/src/main/java/org/thoughtcrime/securesms/mms/GifSlide.java @@ -3,8 +3,6 @@ package org.thoughtcrime.securesms.mms; import android.content.Context; import android.net.Uri; -import androidx.annotation.Nullable; - import com.b44t.messenger.DcMsg; import org.thoughtcrime.securesms.util.MediaUtil; @@ -19,9 +17,4 @@ public class GifSlide extends ImageSlide { super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_GIF, size, width, height, uri, fileName, false)); } - @Override - @Nullable - public Uri getThumbnailUri() { - return getUri(); - } } diff --git a/src/main/java/org/thoughtcrime/securesms/mms/QuoteModel.java b/src/main/java/org/thoughtcrime/securesms/mms/QuoteModel.java index 9969f594b..3b6655c61 100644 --- a/src/main/java/org/thoughtcrime/securesms/mms/QuoteModel.java +++ b/src/main/java/org/thoughtcrime/securesms/mms/QuoteModel.java @@ -17,7 +17,7 @@ public class QuoteModel { private final List attachments; private final DcMsg quotedMsg; - public QuoteModel(DcContact author, String text, boolean missing, @Nullable List attachments, DcMsg quotedMsg) { + public QuoteModel(DcContact author, String text, @Nullable List attachments, DcMsg quotedMsg) { this.author = author; this.text = text; this.attachments = attachments; diff --git a/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideModule.java b/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideModule.java index 01095ad12..862c7c7fd 100644 --- a/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideModule.java +++ b/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideModule.java @@ -32,7 +32,7 @@ public class SignalGlideModule extends AppGlideModule { } @Override - public void applyOptions(Context context, GlideBuilder builder) { + public void applyOptions(@NonNull Context context, GlideBuilder builder) { builder.setLogLevel(Log.ERROR); // builder.setDiskCache(new NoopDiskCacheFactory()); } diff --git a/src/main/java/org/thoughtcrime/securesms/notifications/InChatSounds.java b/src/main/java/org/thoughtcrime/securesms/notifications/InChatSounds.java index 6838def9c..373d7bc09 100644 --- a/src/main/java/org/thoughtcrime/securesms/notifications/InChatSounds.java +++ b/src/main/java/org/thoughtcrime/securesms/notifications/InChatSounds.java @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.notifications; import android.content.Context; -import android.media.AudioManager; +import android.media.AudioAttributes; import android.media.SoundPool; import android.util.Log; @@ -28,7 +28,11 @@ public class InChatSounds { private InChatSounds(Context context) { try { - soundPool = new SoundPool(3, AudioManager.STREAM_SYSTEM, 0); + AudioAttributes audioAttrs = new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .build(); + soundPool = new SoundPool.Builder().setMaxStreams(3).setAudioAttributes(audioAttrs).build(); soundIn = soundPool.load(context, R.raw.sound_in, 1); soundOut = soundPool.load(context, R.raw.sound_out, 1); } catch(Exception e) { diff --git a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java index 7c39fee4f..5e2f07d1d 100644 --- a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java +++ b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java @@ -241,7 +241,7 @@ public class NotificationCenter { return new ChatData(accountId, chatId); } } - } catch(Exception e) { } + } catch(Exception ignored) { } return null; } @@ -326,7 +326,7 @@ public class NotificationCenter { } } catch(Exception e) { - e.printStackTrace(); + Log.e(TAG, "Error in getNotificationChannel()", e); } } @@ -604,7 +604,7 @@ public class NotificationCenter { .setGroup(GRP_MSG + "." + accountId) .setGroupSummary(true) .setSmallIcon(R.drawable.icon_notification) - .setColor(context.getResources().getColor(R.color.delta_primary)) + .setColor(context.getResources().getColor(R.color.delta_primary, null)) .setCategory(NotificationCompat.CATEGORY_MESSAGE) .setContentTitle("Delta Chat") // content title would only be used on SDK <24 .setContentText("New messages") // content text would only be used on SDK <24 @@ -692,7 +692,7 @@ public class NotificationCenter { } } - private class ChatData { + private static class ChatData { public final int accountId; public final int chatId; diff --git a/src/main/java/org/thoughtcrime/securesms/permissions/PermissionsRequest.java b/src/main/java/org/thoughtcrime/securesms/permissions/PermissionsRequest.java index 3c008fc1e..2bc0812fe 100644 --- a/src/main/java/org/thoughtcrime/securesms/permissions/PermissionsRequest.java +++ b/src/main/java/org/thoughtcrime/securesms/permissions/PermissionsRequest.java @@ -66,18 +66,18 @@ class PermissionsRequest { } } - if (allGrantedListener != null && granted.size() > 0 && (denied.size() == 0 && permanentlyDenied.size() == 0)) { + if (allGrantedListener != null && !granted.isEmpty() && (denied.isEmpty() && permanentlyDenied.isEmpty())) { allGrantedListener.run(); - } else if (someGrantedListener != null && granted.size() > 0) { + } else if (someGrantedListener != null && !granted.isEmpty()) { someGrantedListener.accept(granted); } - if (denied.size() > 0) { + if (!denied.isEmpty()) { if (anyDeniedListener != null) anyDeniedListener.run(); if (someDeniedListener != null) someDeniedListener.accept(denied); } - if (permanentlyDenied.size() > 0) { + if (!permanentlyDenied.isEmpty()) { if (anyPermanentlyDeniedListener != null) anyPermanentlyDeniedListener.run(); if (somePermanentlyDeniedListener != null) somePermanentlyDeniedListener.accept(permanentlyDenied); } diff --git a/src/main/java/org/thoughtcrime/securesms/preferences/AppearancePreferenceFragment.java b/src/main/java/org/thoughtcrime/securesms/preferences/AppearancePreferenceFragment.java index fe95915d7..e5dc4939c 100644 --- a/src/main/java/org/thoughtcrime/securesms/preferences/AppearancePreferenceFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/preferences/AppearancePreferenceFragment.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.ListPreference; import androidx.preference.Preference; @@ -82,9 +83,9 @@ public class AppearancePreferenceFragment extends ListSummaryPreferenceFragment private class BackgroundClickListener implements Preference.OnPreferenceClickListener { @Override - public boolean onPreferenceClick(Preference preference) { + public boolean onPreferenceClick(@NonNull Preference preference) { Intent intent = new Intent(getContext(), ChatBackgroundActivity.class); - getActivity().startActivity(intent); + requireActivity().startActivity(intent); return true; } } diff --git a/src/main/java/org/thoughtcrime/securesms/preferences/ChatBackgroundActivity.java b/src/main/java/org/thoughtcrime/securesms/preferences/ChatBackgroundActivity.java index c02cc58dc..f4b58b581 100644 --- a/src/main/java/org/thoughtcrime/securesms/preferences/ChatBackgroundActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/preferences/ChatBackgroundActivity.java @@ -134,11 +134,7 @@ public class ChatBackgroundActivity extends PassphraseRequiredActionBarActivity .get(); FileOutputStream outStream = new FileOutputStream(destinationPath); scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 85, outStream); - } catch (InterruptedException e) { - e.printStackTrace(); - Prefs.setBackgroundImagePath(context, accountId, ""); - showBackgroundSaveError(); - } catch (ExecutionException e) { + } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); Prefs.setBackgroundImagePath(context, accountId, ""); showBackgroundSaveError(); diff --git a/src/main/java/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java b/src/main/java/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java index e31ee397f..7c8796a71 100644 --- a/src/main/java/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java @@ -4,6 +4,7 @@ package org.thoughtcrime.securesms.preferences; import android.os.Bundle; import android.view.View; +import androidx.annotation.NonNull; import androidx.fragment.app.DialogFragment; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; @@ -26,7 +27,7 @@ public abstract class CorrectedPreferenceFragment extends PreferenceFragmentComp } @Override - public void onDisplayPreferenceDialog(Preference preference) { + public void onDisplayPreferenceDialog(@NonNull Preference preference) { DialogFragment dialogFragment = null; if (preference instanceof CustomDefaultPreference) { diff --git a/src/main/java/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java b/src/main/java/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java index 067c84286..140e4a6bb 100644 --- a/src/main/java/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java @@ -72,7 +72,7 @@ public abstract class ListSummaryPreferenceFragment extends CorrectedPreferenceF protected class ListSummaryListener implements Preference.OnPreferenceChangeListener { @Override - public boolean onPreferenceChange(Preference preference, Object value) { + public boolean onPreferenceChange(@NonNull Preference preference, Object value) { updateListSummary(preference, value); return true; } diff --git a/src/main/java/org/thoughtcrime/securesms/preferences/widgets/ProfilePreference.java b/src/main/java/org/thoughtcrime/securesms/preferences/widgets/ProfilePreference.java index 8dfef4bdb..34785739e 100644 --- a/src/main/java/org/thoughtcrime/securesms/preferences/widgets/ProfilePreference.java +++ b/src/main/java/org/thoughtcrime/securesms/preferences/widgets/ProfilePreference.java @@ -7,6 +7,7 @@ import android.util.AttributeSet; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.NonNull; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; @@ -50,7 +51,7 @@ public class ProfilePreference extends Preference { } @Override - public void onBindViewHolder(PreferenceViewHolder viewHolder) { + public void onBindViewHolder(@NonNull PreferenceViewHolder viewHolder) { super.onBindViewHolder(viewHolder); avatarView = (ImageView)viewHolder.findViewById(R.id.avatar); profileNameView = (TextView)viewHolder.findViewById(R.id.profile_name);