From a585e9c091e89b46e5f3a688bcbc298a79f1d381 Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Mon, 12 Aug 2024 14:07:57 +1000 Subject: [PATCH 01/12] Removing unrequired APi checks --- .../securesms/MediaOverviewActivity.java | 23 ++++++----- .../securesms/audio/AudioCodec.java | 5 +-- .../securesms/audio/AudioSlidePlayer.java | 6 ++- .../components/AttachmentTypeSelector.java | 30 +++++--------- .../securesms/components/ComposeText.java | 1 - .../securesms/components/SearchToolbar.java | 36 +++++++---------- .../v2/input_bar/InputBarButton.kt | 7 +--- .../crypto/AttachmentSecretProvider.java | 28 ++++--------- .../crypto/DatabaseSecretProvider.java | 28 ++++--------- .../securesms/crypto/IdentityKeyUtil.java | 39 +++++++------------ .../database/AttachmentDatabase.java | 5 --- .../securesms/home/PathActivity.kt | 6 +-- .../securesms/home/PathStatusView.kt | 4 +- .../securesms/logging/LogSecretProvider.java | 16 ++------ .../securesms/util/FileProviderUtil.java | 5 +-- .../securesms/util/GeneralUtilities.kt | 11 ------ .../thoughtcrime/securesms/util/GlowView.kt | 25 ------------ .../video/EncryptedMediaDataSource.java | 6 +-- 18 files changed, 87 insertions(+), 194 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java index 7715eab01e0..8cb8fcd1950 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MediaOverviewActivity.java @@ -39,7 +39,9 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.view.ActionMode; import androidx.appcompat.widget.Toolbar; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.loader.app.LoaderManager; @@ -421,11 +423,13 @@ public boolean onCreateActionMode(ActionMode mode, Menu menu) { mode.getMenuInflater().inflate(R.menu.media_overview_context, menu); mode.setTitle("1"); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - Window window = getActivity().getWindow(); - originalStatusBarColor = window.getStatusBarColor(); - window.setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar)); - } + FragmentActivity activity = getActivity(); + if (activity == null) return false; + + Window window = activity.getWindow(); + originalStatusBarColor = window.getStatusBarColor(); + window.setStatusBarColor(ContextCompat.getColor(activity, R.color.action_mode_status_bar)); + return true; } @@ -455,11 +459,12 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem menuItem) { public void onDestroyActionMode(ActionMode mode) { actionMode = null; getListAdapter().clearSelection(); - ((MediaOverviewActivity) getActivity()).onExitMultiSelect(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - getActivity().getWindow().setStatusBarColor(originalStatusBarColor); - } + MediaOverviewActivity activity = ((MediaOverviewActivity) getActivity()); + if(activity == null) return; + + activity.onExitMultiSelect(); + activity.getWindow().setStatusBarColor(originalStatusBarColor); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/audio/AudioCodec.java b/app/src/main/java/org/thoughtcrime/securesms/audio/AudioCodec.java index 699e9ba9730..64c7ac3df25 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/audio/AudioCodec.java +++ b/app/src/main/java/org/thoughtcrime/securesms/audio/AudioCodec.java @@ -1,22 +1,19 @@ package org.thoughtcrime.securesms.audio; -import android.annotation.TargetApi; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaCodec; import android.media.MediaCodecInfo; import android.media.MediaFormat; import android.media.MediaRecorder; -import android.os.Build; -import org.session.libsignal.utilities.Log; import org.session.libsession.utilities.Util; +import org.session.libsignal.utilities.Log; import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; -@TargetApi(Build.VERSION_CODES.JELLY_BEAN) public class AudioCodec { private static final String TAG = AudioCodec.class.getSimpleName(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java b/app/src/main/java/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java index 3aa159bc1e6..fc88656469f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java @@ -46,7 +46,7 @@ public class AudioSlidePlayer implements SensorEventListener { private final @NonNull Handler progressEventHandler; private final @NonNull AudioManager audioManager; private final @NonNull SensorManager sensorManager; - private final @NonNull Sensor proximitySensor; + private final Sensor proximitySensor; private final @Nullable WakeLock wakeLock; private @NonNull WeakReference listener; @@ -132,7 +132,9 @@ public void onPlaybackStateChanged(int playbackState) { mediaPlayer.seekTo((long) (mediaPlayer.getDuration() * progress)); } - sensorManager.registerListener(AudioSlidePlayer.this, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL); + if(proximitySensor != null) { + sensorManager.registerListener(AudioSlidePlayer.this, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL); + } setPlaying(AudioSlidePlayer.this); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java b/app/src/main/java/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java index e56651db254..47f799bf952 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java @@ -126,25 +126,19 @@ public void show(@NonNull Activity activity, final @NonNull View anchor) { public void onGlobalLayout() { getContentView().getViewTreeObserver().removeGlobalOnLayoutListener(this); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - animateWindowInCircular(anchor, getContentView()); - } else { - animateWindowInTranslate(getContentView()); - } + animateWindowInCircular(anchor, getContentView()); } }); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - animateButtonIn(imageButton, ANIMATION_DURATION / 2); - animateButtonIn(cameraButton, ANIMATION_DURATION / 2); + animateButtonIn(imageButton, ANIMATION_DURATION / 2); + animateButtonIn(cameraButton, ANIMATION_DURATION / 2); - animateButtonIn(audioButton, ANIMATION_DURATION / 3); - animateButtonIn(locationButton, ANIMATION_DURATION / 3); - animateButtonIn(documentButton, ANIMATION_DURATION / 4); - animateButtonIn(gifButton, ANIMATION_DURATION / 4); - animateButtonIn(contactButton, 0); - animateButtonIn(closeButton, 0); - } + animateButtonIn(audioButton, ANIMATION_DURATION / 3); + animateButtonIn(locationButton, ANIMATION_DURATION / 3); + animateButtonIn(documentButton, ANIMATION_DURATION / 4); + animateButtonIn(gifButton, ANIMATION_DURATION / 4); + animateButtonIn(contactButton, 0); + animateButtonIn(closeButton, 0); } private void updateHeight() { @@ -159,11 +153,7 @@ private void updateHeight() { @Override public void dismiss() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - animateWindowOutCircular(currentAnchor, getContentView()); - } else { - animateWindowOutTranslate(getContentView()); - } + animateWindowOutCircular(currentAnchor, getContentView()); } public void setListener(@Nullable AttachmentClickedListener listener) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java b/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java index 42825360c08..2d9a48a9eaa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java @@ -136,7 +136,6 @@ public InputConnection onCreateInputConnection(EditorInfo editorInfo) { editorInfo.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION; } - if (Build.VERSION.SDK_INT < 21) return inputConnection; if (mediaListener == null) return inputConnection; if (inputConnection == null) return null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/SearchToolbar.java b/app/src/main/java/org/thoughtcrime/securesms/components/SearchToolbar.java index 9032b26a2b7..07d0883bd2d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/SearchToolbar.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/SearchToolbar.java @@ -94,15 +94,11 @@ public void display(float x, float y) { searchItem.expandActionView(); - if (Build.VERSION.SDK_INT >= 21) { - Animator animator = ViewAnimationUtils.createCircularReveal(this, (int)x, (int)y, 0, getWidth()); - animator.setDuration(400); - - setVisibility(View.VISIBLE); - animator.start(); - } else { - setVisibility(View.VISIBLE); - } + Animator animator = ViewAnimationUtils.createCircularReveal(this, (int)x, (int)y, 0, getWidth()); + animator.setDuration(400); + + setVisibility(View.VISIBLE); + animator.start(); } } @@ -116,19 +112,15 @@ private void hide() { if (listener != null) listener.onSearchClosed(); - if (Build.VERSION.SDK_INT >= 21) { - Animator animator = ViewAnimationUtils.createCircularReveal(this, (int)x, (int)y, getWidth(), 0); - animator.setDuration(400); - animator.addListener(new AnimationCompleteListener() { - @Override - public void onAnimationEnd(Animator animation) { - setVisibility(View.INVISIBLE); - } - }); - animator.start(); - } else { - setVisibility(View.INVISIBLE); - } + Animator animator = ViewAnimationUtils.createCircularReveal(this, (int)x, (int)y, getWidth(), 0); + animator.setDuration(400); + animator.addListener(new AnimationCompleteListener() { + @Override + public void onAnimationEnd(Animator animation) { + setVisibility(View.INVISIBLE); + } + }); + animator.start(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarButton.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarButton.kt index c88e05dbfbb..d2ec4b2d698 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarButton.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarButton.kt @@ -148,11 +148,8 @@ class InputBarButton : RelativeLayout { private fun onDown(event: MotionEvent) { expand() - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - performHapticFeedback(HapticFeedbackConstants.CONTEXT_CLICK) - } else { - performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) - } + performHapticFeedback(HapticFeedbackConstants.CONTEXT_CLICK) + longPressCallback?.let { gestureHandler.removeCallbacks(it) } val newLongPressCallback = Runnable { onLongPress?.invoke() } this.longPressCallback = newLongPressCallback diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/AttachmentSecretProvider.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/AttachmentSecretProvider.java index 1602ab3fcfa..844ba975f15 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/AttachmentSecretProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/AttachmentSecretProvider.java @@ -59,25 +59,17 @@ private AttachmentSecret getUnencryptedAttachmentSecret(@NonNull Context context { AttachmentSecret attachmentSecret = AttachmentSecret.fromString(unencryptedSecret); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - return attachmentSecret; - } else { - KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(attachmentSecret.serialize().getBytes()); + KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(attachmentSecret.serialize().getBytes()); - TextSecurePreferences.setAttachmentEncryptedSecret(context, encryptedSecret.serialize()); - TextSecurePreferences.setAttachmentUnencryptedSecret(context, null); + TextSecurePreferences.setAttachmentEncryptedSecret(context, encryptedSecret.serialize()); + TextSecurePreferences.setAttachmentUnencryptedSecret(context, null); - return attachmentSecret; - } + return attachmentSecret; } private AttachmentSecret getEncryptedAttachmentSecret(@NonNull String serializedEncryptedSecret) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - throw new AssertionError("OS downgrade not supported. KeyStore sealed data exists on platform < M!"); - } else { - KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.SealedData.fromString(serializedEncryptedSecret); - return AttachmentSecret.fromString(new String(KeyStoreHelper.unseal(encryptedSecret))); - } + KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.SealedData.fromString(serializedEncryptedSecret); + return AttachmentSecret.fromString(new String(KeyStoreHelper.unseal(encryptedSecret))); } private AttachmentSecret createAndStoreAttachmentSecret(@NonNull Context context) { @@ -91,12 +83,8 @@ private AttachmentSecret createAndStoreAttachmentSecret(@NonNull Context context } private void storeAttachmentSecret(@NonNull Context context, @NonNull AttachmentSecret attachmentSecret) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(attachmentSecret.serialize().getBytes()); - TextSecurePreferences.setAttachmentEncryptedSecret(context, encryptedSecret.serialize()); - } else { - TextSecurePreferences.setAttachmentUnencryptedSecret(context, attachmentSecret.serialize()); - } + KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(attachmentSecret.serialize().getBytes()); + TextSecurePreferences.setAttachmentEncryptedSecret(context, encryptedSecret.serialize()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/DatabaseSecretProvider.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/DatabaseSecretProvider.java index 44bb33161c2..ab79f7ea55d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/DatabaseSecretProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/DatabaseSecretProvider.java @@ -36,28 +36,20 @@ private DatabaseSecret getUnencryptedDatabaseSecret(@NonNull Context context, @N try { DatabaseSecret databaseSecret = new DatabaseSecret(unencryptedSecret); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - return databaseSecret; - } else { - KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(databaseSecret.asBytes()); + KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(databaseSecret.asBytes()); - TextSecurePreferences.setDatabaseEncryptedSecret(context, encryptedSecret.serialize()); - TextSecurePreferences.setDatabaseUnencryptedSecret(context, null); + TextSecurePreferences.setDatabaseEncryptedSecret(context, encryptedSecret.serialize()); + TextSecurePreferences.setDatabaseUnencryptedSecret(context, null); - return databaseSecret; - } + return databaseSecret; } catch (IOException e) { throw new AssertionError(e); } } private DatabaseSecret getEncryptedDatabaseSecret(@NonNull String serializedEncryptedSecret) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - throw new AssertionError("OS downgrade not supported. KeyStore sealed data exists on platform < M!"); - } else { - KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.SealedData.fromString(serializedEncryptedSecret); - return new DatabaseSecret(KeyStoreHelper.unseal(encryptedSecret)); - } + KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.SealedData.fromString(serializedEncryptedSecret); + return new DatabaseSecret(KeyStoreHelper.unseal(encryptedSecret)); } private DatabaseSecret createAndStoreDatabaseSecret(@NonNull Context context) { @@ -66,12 +58,8 @@ private DatabaseSecret createAndStoreDatabaseSecret(@NonNull Context context) { DatabaseSecret databaseSecret = new DatabaseSecret(secret); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(databaseSecret.asBytes()); - TextSecurePreferences.setDatabaseEncryptedSecret(context, encryptedSecret.serialize()); - } else { - TextSecurePreferences.setDatabaseUnencryptedSecret(context, databaseSecret.asString()); - } + KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(databaseSecret.asBytes()); + TextSecurePreferences.setDatabaseEncryptedSecret(context, encryptedSecret.serialize()); return databaseSecret; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java index 62aaf58f1a1..4db46a3abc4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/IdentityKeyUtil.java @@ -129,27 +129,19 @@ public static String retrieve(Context context, String key) { } private static String getUnencryptedSecret(String key, String unencryptedSecret, Context context) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - return unencryptedSecret; - } else { - KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(unencryptedSecret.getBytes()); + KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(unencryptedSecret.getBytes()); - // save the encrypted suffix secret "key_encrypted" - save(context,key+ENCRYPTED_SUFFIX,encryptedSecret.serialize()); - // delete the regular secret "key" - delete(context,key); + // save the encrypted suffix secret "key_encrypted" + save(context,key+ENCRYPTED_SUFFIX,encryptedSecret.serialize()); + // delete the regular secret "key" + delete(context,key); - return unencryptedSecret; - } + return unencryptedSecret; } private static String getEncryptedSecret(String encryptedSecret) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - throw new AssertionError("OS downgrade not supported. KeyStore sealed data exists on platform < M!"); - } else { - KeyStoreHelper.SealedData sealedData = KeyStoreHelper.SealedData.fromString(encryptedSecret); - return new String(KeyStoreHelper.unseal(sealedData)); - } + KeyStoreHelper.SealedData sealedData = KeyStoreHelper.SealedData.fromString(encryptedSecret); + return new String(KeyStoreHelper.unseal(sealedData)); } @@ -157,17 +149,14 @@ public static void save(Context context, String key, String value) { SharedPreferences preferences = context.getSharedPreferences(MASTER_SECRET_UTIL_PREFERENCES_NAME, 0); Editor preferencesEditor = preferences.edit(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - boolean isEncryptedSuffix = key.endsWith(ENCRYPTED_SUFFIX); - if (isEncryptedSuffix) { - preferencesEditor.putString(key, value); - } else { - KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(value.getBytes()); - preferencesEditor.putString(key+ENCRYPTED_SUFFIX, encryptedSecret.serialize()); - } - } else { + boolean isEncryptedSuffix = key.endsWith(ENCRYPTED_SUFFIX); + if (isEncryptedSuffix) { preferencesEditor.putString(key, value); + } else { + KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(value.getBytes()); + preferencesEditor.putString(key+ENCRYPTED_SUFFIX, encryptedSecret.serialize()); } + if (!preferencesEditor.commit()) throw new AssertionError("failed to save identity key/value to shared preferences"); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java index 45172e2f6fe..5d7301261e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java @@ -966,11 +966,6 @@ class ThumbnailFetchCallable implements Callable { @SuppressLint("NewApi") private ThumbnailData generateVideoThumbnail(AttachmentId attachmentId) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - Log.w(TAG, "Video thumbnails not supported..."); - return null; - } - DataInfo dataInfo = getAttachmentDataFileInfo(attachmentId, DATA); if (dataInfo == null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/PathActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/home/PathActivity.kt index db0c4d11cc5..e65f2d2f26c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/home/PathActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/home/PathActivity.kt @@ -15,6 +15,7 @@ import android.widget.RelativeLayout import android.widget.TextView import android.widget.Toast import androidx.annotation.ColorRes +import androidx.core.content.ContextCompat import androidx.localbroadcastmanager.content.LocalBroadcastManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -38,7 +39,6 @@ import org.thoughtcrime.securesms.util.disableClipping import org.thoughtcrime.securesms.util.fadeIn import org.thoughtcrime.securesms.util.fadeOut import org.thoughtcrime.securesms.util.getAccentColor -import org.thoughtcrime.securesms.util.getColorWithID class PathActivity : PassphraseRequiredActionBarActivity() { private lateinit var binding: ActivityPathBinding @@ -283,7 +283,7 @@ class PathActivity : PassphraseRequiredActionBarActivity() { private fun expand() { dotView.animateSizeChange(R.dimen.path_row_dot_size, R.dimen.path_row_expanded_dot_size) @ColorRes val startColorID = if (UiModeUtilities.isDayUiMode(context)) R.color.transparent_black_30 else R.color.black - val startColor = context.resources.getColorWithID(startColorID, context.theme) + val startColor = ContextCompat.getColor(context, startColorID) val endColor = context.getAccentColor() GlowViewUtilities.animateShadowColorChange(dotView, startColor, endColor) } @@ -292,7 +292,7 @@ class PathActivity : PassphraseRequiredActionBarActivity() { dotView.animateSizeChange(R.dimen.path_row_expanded_dot_size, R.dimen.path_row_dot_size) @ColorRes val endColorID = if (UiModeUtilities.isDayUiMode(context)) R.color.transparent_black_30 else R.color.black val startColor = context.getAccentColor() - val endColor = context.resources.getColorWithID(endColorID, context.theme) + val endColor = ContextCompat.getColor(context, endColorID) GlowViewUtilities.animateShadowColorChange(dotView, startColor, endColor) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/PathStatusView.kt b/app/src/main/java/org/thoughtcrime/securesms/home/PathStatusView.kt index 7ab7bfb5084..1c31a2ee178 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/home/PathStatusView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/home/PathStatusView.kt @@ -9,6 +9,7 @@ import android.graphics.Paint import android.util.AttributeSet import android.view.View import androidx.annotation.ColorInt +import androidx.core.content.ContextCompat import androidx.lifecycle.coroutineScope import androidx.localbroadcastmanager.content.LocalBroadcastManager import kotlinx.coroutines.Dispatchers @@ -17,7 +18,6 @@ import kotlinx.coroutines.withContext import network.loki.messenger.R import org.session.libsession.snode.OnionRequestAPI import org.thoughtcrime.securesms.conversation.v2.ViewUtil -import org.thoughtcrime.securesms.util.getColorWithID import org.thoughtcrime.securesms.util.toPx class PathStatusView : View { @@ -104,7 +104,7 @@ class PathStatusView : View { sessionShadowColor = hasPathsColor } else { setBackgroundResource(R.drawable.paths_building_dot) - val pathsBuildingColor = resources.getColorWithID(R.color.paths_building, context.theme) + val pathsBuildingColor = ContextCompat.getColor(context, R.color.paths_building) mainColor = pathsBuildingColor sessionShadowColor = pathsBuildingColor } diff --git a/app/src/main/java/org/thoughtcrime/securesms/logging/LogSecretProvider.java b/app/src/main/java/org/thoughtcrime/securesms/logging/LogSecretProvider.java index 763a2a430d4..533e1a1d234 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logging/LogSecretProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logging/LogSecretProvider.java @@ -32,24 +32,16 @@ private static byte[] parseUnencryptedSecret(String secret) { } private static byte[] parseEncryptedSecret(String secret) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.SealedData.fromString(secret); - return KeyStoreHelper.unseal(encryptedSecret); - } else { - throw new AssertionError("OS downgrade not supported. KeyStore sealed data exists on platform < M!"); - } + KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.SealedData.fromString(secret); + return KeyStoreHelper.unseal(encryptedSecret); } private static byte[] createAndStoreSecret(@NonNull Context context) { byte[] secret = new byte[32]; SECURE_RANDOM.nextBytes(secret); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(secret); - TextSecurePreferences.setLogEncryptedSecret(context, encryptedSecret.serialize()); - } else { - TextSecurePreferences.setLogUnencryptedSecret(context, Base64.encodeBytes(secret)); - } + KeyStoreHelper.SealedData encryptedSecret = KeyStoreHelper.seal(secret); + TextSecurePreferences.setLogEncryptedSecret(context, encryptedSecret.serialize()); return secret; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FileProviderUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/FileProviderUtil.java index ed28c7c2e20..c05832352a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FileProviderUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FileProviderUtil.java @@ -14,10 +14,7 @@ public class FileProviderUtil { private static final String AUTHORITY = "network.loki.securesms.fileprovider"; public static Uri getUriFor(@NonNull Context context, @NonNull File file) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) - return FileProvider.getUriForFile(context, AUTHORITY, file); - else - return Uri.fromFile(file); + return FileProvider.getUriForFile(context, AUTHORITY, file); } public static boolean delete(@NonNull Context context, @NonNull Uri uri) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/GeneralUtilities.kt b/app/src/main/java/org/thoughtcrime/securesms/util/GeneralUtilities.kt index 9124765763b..cc40e0cc921 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/GeneralUtilities.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/GeneralUtilities.kt @@ -1,20 +1,9 @@ package org.thoughtcrime.securesms.util import android.content.res.Resources -import android.os.Build -import androidx.annotation.ColorRes import androidx.recyclerview.widget.RecyclerView -import kotlin.math.max import kotlin.math.roundToInt -fun Resources.getColorWithID(@ColorRes id: Int, theme: Resources.Theme?): Int { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - getColor(id, theme) - } else { - @Suppress("DEPRECATION") getColor(id) - } -} - fun toPx(dp: Int, resources: Resources): Int { return toPx(dp.toFloat(), resources).roundToInt() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/GlowView.kt b/app/src/main/java/org/thoughtcrime/securesms/util/GlowView.kt index a0c0da24fe6..46ad8212333 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/GlowView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/GlowView.kt @@ -11,7 +11,6 @@ import android.view.animation.AccelerateDecelerateInterpolator import android.widget.LinearLayout import android.widget.RelativeLayout import androidx.annotation.ColorInt -import androidx.annotation.ColorRes import network.loki.messenger.R import kotlin.math.roundToInt @@ -22,18 +21,6 @@ interface GlowView { object GlowViewUtilities { - fun animateColorIdChange(context: Context, view: GlowView, @ColorRes startColorID: Int, @ColorRes endColorID: Int) { - val startColor = context.resources.getColorWithID(startColorID, context.theme) - val endColor = context.resources.getColorWithID(endColorID, context.theme) - val animation = ValueAnimator.ofObject(ArgbEvaluator(), startColor, endColor) - animation.duration = 250 - animation.addUpdateListener { animator -> - val color = animator.animatedValue as Int - view.mainColor = color - } - animation.start() - } - fun animateColorChange(view: GlowView, @ColorInt startColor: Int, @ColorInt endColor: Int) { val animation = ValueAnimator.ofObject(ArgbEvaluator(), startColor, endColor) animation.duration = 250 @@ -44,18 +31,6 @@ object GlowViewUtilities { animation.start() } - fun animateShadowColorIdChange(context: Context, view: GlowView, @ColorRes startColorID: Int, @ColorRes endColorID: Int) { - val startColor = context.resources.getColorWithID(startColorID, context.theme) - val endColor = context.resources.getColorWithID(endColorID, context.theme) - val animation = ValueAnimator.ofObject(ArgbEvaluator(), startColor, endColor) - animation.duration = 250 - animation.addUpdateListener { animator -> - val color = animator.animatedValue as Int - view.sessionShadowColor = color - } - animation.start() - } - fun animateShadowColorChange( view: GlowView, @ColorInt startColor: Int, diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/EncryptedMediaDataSource.java b/app/src/main/java/org/thoughtcrime/securesms/video/EncryptedMediaDataSource.java index 8a3d2c3f745..78541e02a48 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/EncryptedMediaDataSource.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/EncryptedMediaDataSource.java @@ -1,22 +1,20 @@ package org.thoughtcrime.securesms.video; -import android.annotation.TargetApi; import android.media.MediaDataSource; -import android.os.Build; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import org.session.libsession.utilities.Util; import org.thoughtcrime.securesms.crypto.AttachmentSecret; import org.thoughtcrime.securesms.crypto.ClassicDecryptingPartInputStream; import org.thoughtcrime.securesms.crypto.ModernDecryptingPartInputStream; -import org.session.libsession.utilities.Util; import java.io.File; import java.io.IOException; import java.io.InputStream; -@TargetApi(Build.VERSION_CODES.M) public class EncryptedMediaDataSource extends MediaDataSource { private final AttachmentSecret attachmentSecret; From 088368769d8122134e5a340018457da7db36c0de Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Thu, 15 Aug 2024 10:32:22 +1000 Subject: [PATCH 02/12] Bumping min sdk to 26 and further cleaning version checks --- .../thoughtcrime/securesms/BaseActivity.java | 6 +- .../securesms/MediaPreviewActivity.java | 7 +- .../components/AttachmentTypeSelector.java | 13 +- .../securesms/components/ComposeText.java | 7 +- .../components/ConversationItemAlertView.java | 3 - .../components/HidingLinearLayout.java | 6 +- .../securesms/components/InputPanel.java | 6 +- .../components/KeyboardAwareLinearLayout.java | 14 +- .../securesms/components/MediaView.java | 20 +- .../components/RecentPhotoViewRail.java | 22 +- .../components/SquareFrameLayout.java | 5 +- .../components/camera/CameraView.java | 48 +--- .../securesms/conversation/v2/Util.kt | 185 ------------ .../v2/input_bar/InputBarEditText.kt | 3 +- .../crypto/BiometricSecretProvider.kt | 5 +- .../database/helpers/SQLCipherOpenHelper.java | 12 +- .../securesms/mediasend/MediaRepository.java | 3 - .../AbstractNotificationBuilder.java | 4 +- .../MultipleRecipientNotificationBuilder.java | 4 - .../notifications/NotificationChannels.java | 271 ------------------ .../notifications/NotificationState.java | 3 +- .../PendingMessageNotificationBuilder.java | 4 - .../SingleRecipientNotificationBuilder.java | 21 +- .../securesms/permissions/Permissions.java | 9 +- .../NotificationsPreferenceFragment.kt | 40 +-- .../PrivacySettingsPreferenceFragment.kt | 11 +- .../securesms/preferences/SettingsActivity.kt | 3 +- .../widgets/SignalListPreference.java | 10 +- .../widget/VerticalSlideColorPicker.java | 8 - .../securesms/util/DateUtils.java | 12 +- .../securesms/util/LongClickCopySpan.java | 21 +- .../util/StickyHeaderDecoration.java | 14 +- .../webrtc/audio/AudioManagerCompat.java | 8 +- build.gradle | 2 +- .../org/session/libsession/snode/SnodeAPI.kt | 4 +- .../libsession/utilities/DecodedAudio.kt | 30 +- .../libsession/utilities/ServiceUtil.java | 9 - .../libsession/utilities/ViewUtil.java | 116 +------- .../utilities/recipients/Recipient.java | 2 +- 39 files changed, 118 insertions(+), 853 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/BaseActivity.java b/app/src/main/java/org/thoughtcrime/securesms/BaseActivity.java index d5286698cdd..d44978b05b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/BaseActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/BaseActivity.java @@ -4,12 +4,8 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.os.Build; -import android.os.Build.VERSION; -import android.os.Build.VERSION_CODES; -import androidx.annotation.NonNull; + import androidx.fragment.app.FragmentActivity; -import android.view.KeyEvent; import org.session.libsession.utilities.TextSecurePreferences; import org.session.libsession.utilities.dynamiclanguage.DynamicLanguageActivityHelper; diff --git a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java index b609b54fc69..f0493d043ac 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -17,7 +17,6 @@ package org.thoughtcrime.securesms; import android.annotation.SuppressLint; -import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.database.Cursor; @@ -26,7 +25,6 @@ import android.os.AsyncTask; import android.os.Build; import android.os.Build.VERSION; -import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -57,6 +55,9 @@ import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; +import com.bumptech.glide.Glide; +import com.bumptech.glide.RequestManager; + import org.session.libsession.messaging.messages.control.DataExtractionNotification; import org.session.libsession.messaging.sending_receiving.MessageSender; import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment; @@ -72,8 +73,6 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.mediapreview.MediaPreviewViewModel; import org.thoughtcrime.securesms.mediapreview.MediaRailAdapter; -import com.bumptech.glide.Glide; -import com.bumptech.glide.RequestManager; import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.util.AttachmentUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java b/app/src/main/java/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java index 47f799bf952..1c6a4097f58 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java @@ -2,15 +2,10 @@ import android.Manifest; import android.animation.Animator; -import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; -import android.os.Build; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.loader.app.LoaderManager; import android.util.Pair; import android.view.Gravity; import android.view.LayoutInflater; @@ -26,8 +21,12 @@ import android.widget.LinearLayout; import android.widget.PopupWindow; -import org.thoughtcrime.securesms.permissions.Permissions; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.loader.app.LoaderManager; + import org.session.libsession.utilities.ViewUtil; +import org.thoughtcrime.securesms.permissions.Permissions; import network.loki.messenger.R; @@ -172,7 +171,6 @@ private void animateButtonIn(View button, int delay) { button.startAnimation(animation); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void animateWindowInCircular(@Nullable View anchor, @NonNull View contentView) { Pair coordinates = getClickOrigin(anchor, contentView); Animator animator = ViewAnimationUtils.createCircularReveal(contentView, @@ -191,7 +189,6 @@ private void animateWindowInTranslate(@NonNull View contentView) { getContentView().startAnimation(animation); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void animateWindowOutCircular(@Nullable View anchor, @NonNull View contentView) { Pair coordinates = getClickOrigin(anchor, contentView); Animator animator = ViewAnimationUtils.createCircularReveal(getContentView(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java b/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java index 2d9a48a9eaa..2365bc843b9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.components; import android.content.Context; -import android.os.Build; import android.os.Bundle; import android.text.InputType; import android.text.Spannable; @@ -16,15 +15,14 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import androidx.core.os.BuildCompat; import androidx.core.view.inputmethod.EditorInfoCompat; import androidx.core.view.inputmethod.InputConnectionCompat; import androidx.core.view.inputmethod.InputContentInfoCompat; -import org.thoughtcrime.securesms.components.emoji.EmojiEditText; -import org.session.libsignal.utilities.Log; import org.session.libsession.utilities.TextSecurePreferences; +import org.session.libsignal.utilities.Log; +import org.thoughtcrime.securesms.components.emoji.EmojiEditText; public class ComposeText extends EmojiEditText { @@ -153,7 +151,6 @@ private void initialize() { } } - @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB_MR2) private static class CommitContentListener implements InputConnectionCompat.OnCommitContentListener { private static final String TAG = CommitContentListener.class.getSimpleName(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemAlertView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemAlertView.java index 88bd1718a11..2a8de38d334 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemAlertView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemAlertView.java @@ -1,9 +1,7 @@ package org.thoughtcrime.securesms.components; -import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; -import android.os.Build.VERSION_CODES; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; @@ -27,7 +25,6 @@ public ConversationItemAlertView(Context context, AttributeSet attrs) { initialize(attrs); } - @TargetApi(VERSION_CODES.HONEYCOMB) public ConversationItemAlertView(final Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initialize(attrs); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/HidingLinearLayout.java b/app/src/main/java/org/thoughtcrime/securesms/components/HidingLinearLayout.java index 980735aa485..bdb7c2fdf0d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/HidingLinearLayout.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/HidingLinearLayout.java @@ -1,9 +1,6 @@ package org.thoughtcrime.securesms.components; -import android.annotation.TargetApi; import android.content.Context; -import android.os.Build; -import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import android.util.AttributeSet; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; @@ -11,6 +8,8 @@ import android.view.animation.ScaleAnimation; import android.widget.LinearLayout; +import androidx.interpolator.view.animation.FastOutSlowInInterpolator; + public class HidingLinearLayout extends LinearLayout { public HidingLinearLayout(Context context) { @@ -21,7 +20,6 @@ public HidingLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); } - @TargetApi(Build.VERSION_CODES.HONEYCOMB) public HidingLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java index e81757026cf..ad375c09924 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java @@ -1,13 +1,12 @@ package org.thoughtcrime.securesms.components; -import android.annotation.TargetApi; import android.content.Context; import android.net.Uri; -import android.os.Build; -import androidx.annotation.NonNull; import android.util.AttributeSet; import android.widget.LinearLayout; +import androidx.annotation.NonNull; + public class InputPanel extends LinearLayout { public InputPanel(Context context) { @@ -18,7 +17,6 @@ public InputPanel(Context context, AttributeSet attrs) { super(context, attrs); } - @TargetApi(Build.VERSION_CODES.HONEYCOMB) public InputPanel(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java b/app/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java index 338b8017702..bebc12a7e5c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java @@ -16,26 +16,25 @@ */ package org.thoughtcrime.securesms.components; -import android.annotation.TargetApi; import android.content.Context; import android.graphics.Rect; -import android.os.Build; -import android.os.Build.VERSION_CODES; import android.preference.PreferenceManager; -import androidx.appcompat.widget.LinearLayoutCompat; import android.util.AttributeSet; -import org.session.libsignal.utilities.Log; import android.view.Surface; import android.view.View; -import network.loki.messenger.R; +import androidx.appcompat.widget.LinearLayoutCompat; + import org.session.libsession.utilities.ServiceUtil; import org.session.libsession.utilities.Util; +import org.session.libsignal.utilities.Log; import java.lang.reflect.Field; import java.util.HashSet; import java.util.Set; +import network.loki.messenger.R; + /** * LinearLayout that, when a view container, will report back when it thinks a soft keyboard * has been opened and what its height would be. @@ -95,7 +94,7 @@ private void updateRotation() { } private void updateKeyboardState() { - if (viewInset == 0 && Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) viewInset = getViewInset(); + if (viewInset == 0) viewInset = getViewInset(); getWindowVisibleDisplayFrame(rect); @@ -118,7 +117,6 @@ private void updateKeyboardState() { } } - @TargetApi(VERSION_CODES.LOLLIPOP) private int getViewInset() { try { Field attachInfoField = View.class.getDeclaredField("mAttachInfo"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/MediaView.java b/app/src/main/java/org/thoughtcrime/securesms/components/MediaView.java index bb973c23ff2..cdce4b72603 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/MediaView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/MediaView.java @@ -3,24 +3,24 @@ import android.content.Context; import android.net.Uri; -import android.os.Build; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; import android.util.AttributeSet; import android.view.View; import android.view.Window; import android.widget.FrameLayout; -import network.loki.messenger.R; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import com.bumptech.glide.RequestManager; -import org.thoughtcrime.securesms.mms.VideoSlide; -import org.thoughtcrime.securesms.video.VideoPlayer; import org.session.libsession.utilities.Stub; +import org.thoughtcrime.securesms.mms.VideoSlide; +import org.thoughtcrime.securesms.video.VideoPlayer; import java.io.IOException; +import network.loki.messenger.R; + public class MediaView extends FrameLayout { private ZoomingImageView imageView; @@ -41,12 +41,6 @@ public MediaView(@NonNull Context context, @Nullable AttributeSet attrs, int def initialize(); } - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - public MediaView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - initialize(); - } - private void initialize() { inflate(getContext(), R.layout.media_view, this); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java b/app/src/main/java/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java index e1d3236a967..98bce61010e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java @@ -1,12 +1,18 @@ package org.thoughtcrime.securesms.components; -import android.annotation.TargetApi; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.loader.app.LoaderManager; @@ -14,23 +20,17 @@ import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.FrameLayout; -import android.widget.ImageView; +import com.bumptech.glide.Glide; import com.bumptech.glide.load.Key; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.signature.MediaStoreSignature; -import network.loki.messenger.R; +import org.session.libsession.utilities.ViewUtil; import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter; import org.thoughtcrime.securesms.database.loaders.RecentPhotosLoader; -import com.bumptech.glide.Glide; -import org.session.libsession.utilities.ViewUtil; +import network.loki.messenger.R; public class RecentPhotoViewRail extends FrameLayout implements LoaderManager.LoaderCallbacks { @@ -130,14 +130,12 @@ public void onBindItemViewHolder(RecentPhotoViewHolder viewHolder, @NonNull Curs } - @TargetApi(16) @SuppressWarnings("SuspiciousNameCombination") private String getWidthColumn(int orientation) { if (orientation == 0 || orientation == 180) return MediaStore.Images.ImageColumns.WIDTH; else return MediaStore.Images.ImageColumns.HEIGHT; } - @TargetApi(16) @SuppressWarnings("SuspiciousNameCombination") private String getHeightColumn(int orientation) { if (orientation == 0 || orientation == 180) return MediaStore.Images.ImageColumns.HEIGHT; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/SquareFrameLayout.java b/app/src/main/java/org/thoughtcrime/securesms/components/SquareFrameLayout.java index 3bf15fb2729..5d369de3b35 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/SquareFrameLayout.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/SquareFrameLayout.java @@ -1,10 +1,7 @@ package org.thoughtcrime.securesms.components; -import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; -import android.graphics.BitmapFactory; -import android.os.Build.VERSION_CODES; import android.util.AttributeSet; import android.widget.FrameLayout; @@ -24,7 +21,7 @@ public SquareFrameLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } - @TargetApi(VERSION_CODES.HONEYCOMB) @SuppressWarnings("unused") + @SuppressWarnings("unused") public SquareFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/camera/CameraView.java b/app/src/main/java/org/thoughtcrime/securesms/components/camera/CameraView.java index 11f6c4104b0..5b04e39289c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/camera/CameraView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/camera/CameraView.java @@ -15,7 +15,6 @@ Portions Copyright (C) 2007 The Android Open Source Project package org.thoughtcrime.securesms.components.camera; -import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.content.pm.ActivityInfo; @@ -28,26 +27,26 @@ Portions Copyright (C) 2007 The Android Open Source Project import android.hardware.Camera.Size; import android.os.AsyncTask; import android.os.Build; -import android.os.Build.VERSION; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import android.util.AttributeSet; -import org.session.libsignal.utilities.Log; import android.view.OrientationEventListener; import android.view.ViewGroup; -import network.loki.messenger.R; -import org.thoughtcrime.securesms.util.BitmapUtil; -import org.session.libsignal.utilities.guava.Optional; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.session.libsession.utilities.TextSecurePreferences; import org.session.libsession.utilities.Util; +import org.session.libsignal.utilities.Log; +import org.session.libsignal.utilities.guava.Optional; +import org.thoughtcrime.securesms.util.BitmapUtil; import java.io.IOException; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import network.loki.messenger.R; + @SuppressWarnings("deprecation") public class CameraView extends ViewGroup { private static final String TAG = CameraView.class.getSimpleName(); @@ -91,7 +90,6 @@ public CameraView(Context context, AttributeSet attrs, int defStyle) { addView(surface); } - @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public void onResume() { if (state != State.PAUSED) return; state = State.RESUMED; @@ -255,33 +253,15 @@ public boolean isMultiCamera() { return Camera.getNumberOfCameras() > 1; } - public boolean isRearCamera() { - return cameraId == CameraInfo.CAMERA_FACING_BACK; - } - - public void flipCamera() { - if (Camera.getNumberOfCameras() > 1) { - cameraId = cameraId == CameraInfo.CAMERA_FACING_BACK - ? CameraInfo.CAMERA_FACING_FRONT - : CameraInfo.CAMERA_FACING_BACK; - onPause(); - onResume(); - TextSecurePreferences.setDirectCaptureCameraId(getContext(), cameraId); - } - } - - @TargetApi(14) private void onCameraReady(final @NonNull Camera camera) { final Parameters parameters = camera.getParameters(); - if (VERSION.SDK_INT >= 14) { - parameters.setRecordingHint(true); - final List focusModes = parameters.getSupportedFocusModes(); - if (focusModes.contains(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) { - parameters.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); - } else if (focusModes.contains(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) { - parameters.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); - } + parameters.setRecordingHint(true); + final List focusModes = parameters.getSupportedFocusModes(); + if (focusModes.contains(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) { + parameters.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); + } else if (focusModes.contains(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) { + parameters.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); } displayOrientation = CameraUtils.getCameraDisplayOrientation(getActivity(), getCameraInfo()); @@ -465,7 +445,7 @@ private Rect getCroppedRect(Size cameraPreviewSize, Rect visibleRect, int rotati } final float newWidth = visibleRect.width() * scale; final float newHeight = visibleRect.height() * scale; - final float centerX = (VERSION.SDK_INT < 14 || isTroublemaker()) ? previewWidth - newWidth / 2 : previewWidth / 2; + final float centerX = (isTroublemaker()) ? previewWidth - newWidth / 2 : previewWidth / 2; final float centerY = previewHeight / 2; visibleRect.set((int) (centerX - newWidth / 2), diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/Util.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/Util.kt index 71a0aae0fba..da8852d1d69 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/Util.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/Util.kt @@ -16,15 +16,9 @@ */ package org.thoughtcrime.securesms.conversation.v2 -import android.annotation.TargetApi -import android.app.ActivityManager -import android.content.ClipData -import android.content.ClipboardManager import android.content.Context import android.graphics.Typeface import android.net.Uri -import android.os.Build.VERSION -import android.os.Build.VERSION_CODES import android.text.Spannable import android.text.SpannableString import android.text.TextUtils @@ -33,22 +27,16 @@ import android.view.View import com.annimon.stream.Stream import com.google.android.mms.pdu_alt.CharacterSets import com.google.android.mms.pdu_alt.EncodedStringValue -import network.loki.messenger.R import org.session.libsignal.utilities.Log import org.thoughtcrime.securesms.components.ComposeText import java.io.ByteArrayOutputStream import java.io.IOException import java.io.UnsupportedEncodingException import java.util.Collections -import java.util.concurrent.TimeUnit -import kotlin.math.max -import kotlin.math.min object Util { private val TAG: String = Log.tag(Util::class.java) - private val BUILD_LIFESPAN = TimeUnit.DAYS.toMillis(90) - fun asList(vararg elements: T): List { val result = mutableListOf() // LinkedList() Collections.addAll(result, *elements) @@ -104,19 +92,6 @@ object Util { return sb.toString() } - fun rightPad(value: String, length: Int): String { - if (value.length >= length) { - return value - } - - val out = StringBuilder(value) - while (out.length < length) { - out.append(" ") - } - - return out.toString() - } - fun isEmpty(value: Array?): Boolean { return value == null || value.size == 0 } @@ -133,64 +108,6 @@ object Util { return charSequence == null || charSequence.length == 0 } - fun hasItems(collection: Collection<*>?): Boolean { - return collection != null && !collection.isEmpty() - } - - fun getOrDefault(map: Map, key: K, defaultValue: V): V? { - return if (map.containsKey(key)) map[key] else defaultValue - } - - fun getFirstNonEmpty(vararg values: String?): String { - for (value in values) { - if (!value.isNullOrEmpty()) { return value } - } - return "" - } - - fun emptyIfNull(value: String?): String { - return value ?: "" - } - - fun emptyIfNull(value: CharSequence?): CharSequence { - return value ?: "" - } - - fun getBoldedString(value: String?): CharSequence { - val spanned = SpannableString(value) - spanned.setSpan( - StyleSpan(Typeface.BOLD), 0, - spanned.length, - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE - ) - - return spanned - } - - fun toIsoString(bytes: ByteArray?): String { - try { - return String(bytes!!, charset(CharacterSets.MIMENAME_ISO_8859_1)) - } catch (e: UnsupportedEncodingException) { - throw AssertionError("ISO_8859_1 must be supported!") - } - } - - fun toIsoBytes(isoString: String): ByteArray { - try { - return isoString.toByteArray(charset(CharacterSets.MIMENAME_ISO_8859_1)) - } catch (e: UnsupportedEncodingException) { - throw AssertionError("ISO_8859_1 must be supported!") - } - } - - fun toUtf8Bytes(utf8String: String): ByteArray { - try { - return utf8String.toByteArray(charset(CharacterSets.MIMENAME_UTF_8)) - } catch (e: UnsupportedEncodingException) { - throw AssertionError("UTF_8 must be supported!") - } - } - fun wait(lock: Any, timeout: Long) { try { (lock as Object).wait(timeout) @@ -225,20 +142,6 @@ object Util { return parts } - fun combine(vararg elements: ByteArray?): ByteArray { - try { - val baos = ByteArrayOutputStream() - - for (element in elements) { - baos.write(element) - } - - return baos.toByteArray() - } catch (e: IOException) { - throw AssertionError(e) - } - } - fun trim(input: ByteArray?, length: Int): ByteArray { val result = ByteArray(length) System.arraycopy(input, 0, result, 0, result.size) @@ -251,26 +154,6 @@ object Util { else Uri.parse(uri) } - @TargetApi(VERSION_CODES.KITKAT) - fun isLowMemory(context: Context): Boolean { - val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager - - return (VERSION.SDK_INT >= VERSION_CODES.KITKAT && activityManager.isLowRamDevice) || - activityManager.largeMemoryClass <= 64 - } - - fun clamp(value: Int, min: Int, max: Int): Int { - return min(max(value.toDouble(), min.toDouble()), max.toDouble()).toInt() - } - - fun clamp(value: Long, min: Long, max: Long): Long { - return min(max(value.toDouble(), min.toDouble()), max.toDouble()).toLong() - } - - fun clamp(value: Float, min: Float, max: Float): Float { - return min(max(value.toDouble(), min.toDouble()), max.toDouble()).toFloat() - } - /** * Returns half of the difference between the given length, and the length when scaled by the * given scale. @@ -280,74 +163,6 @@ object Util { return (length - scaledLength) / 2 } - fun readTextFromClipboard(context: Context): String? { - run { - val clipboardManager = - context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - return if (clipboardManager.hasPrimaryClip() && clipboardManager.primaryClip!!.itemCount > 0) { - clipboardManager.primaryClip!!.getItemAt(0).text.toString() - } else { - null - } - } - } - - fun writeTextToClipboard(context: Context, text: String) { - writeTextToClipboard(context, context.getString(R.string.app_name), text) - } - - fun writeTextToClipboard(context: Context, label: String, text: String) { - val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - val clip = ClipData.newPlainText(label, text) - clipboard.setPrimaryClip(clip) - } - - fun toIntExact(value: Long): Int { - if (value.toInt().toLong() != value) { - throw ArithmeticException("integer overflow") - } - return value.toInt() - } - - fun isEquals(first: Long?, second: Long): Boolean { - return first != null && first == second - } - - @SafeVarargs - fun concatenatedList(vararg items: Collection): List { - val concat: MutableList = ArrayList( - Stream.of(*items).reduce(0) { sum: Int, list: Collection -> sum + list.size }) - - for (list in items) { - concat.addAll(list) - } - - return concat - } - - fun isLong(value: String): Boolean { - try { - value.toLong() - return true - } catch (e: NumberFormatException) { - return false - } - } - - fun parseInt(integer: String, defaultValue: Int): Int { - return try { - integer.toInt() - } catch (e: NumberFormatException) { - defaultValue - } - } - - // Method to determine if we're currently in a left-to-right or right-to-left language like Arabic - fun usingRightToLeftLanguage(context: Context): Boolean { - val config = context.resources.configuration - return config.layoutDirection == View.LAYOUT_DIRECTION_RTL - } - // Method to determine if we're currently in a left-to-right or right-to-left language like Arabic fun usingLeftToRightLanguage(context: Context): Boolean { val config = context.resources.configuration diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarEditText.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarEditText.kt index a42222f412f..449fe8cfd4d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarEditText.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/input_bar/InputBarEditText.kt @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.conversation.v2.input_bar import android.content.Context import android.content.res.Resources import android.net.Uri -import android.os.Build import android.util.AttributeSet import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputConnection @@ -57,7 +56,7 @@ class InputBarEditText : AppCompatEditText { InputConnectionCompat.OnCommitContentListener { inputContentInfo, flags, opts -> val lacksPermission = (flags and InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0 // read and display inputContentInfo asynchronously - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && lacksPermission) { + if (lacksPermission) { try { inputContentInfo.requestPermission() } catch (e: Exception) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/BiometricSecretProvider.kt b/app/src/main/java/org/thoughtcrime/securesms/crypto/BiometricSecretProvider.kt index ac12a69bbe5..1329ad0dc30 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/BiometricSecretProvider.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/BiometricSecretProvider.kt @@ -42,9 +42,8 @@ class BiometricSecretProvider { builder.setUnlockedDeviceRequired(true) } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - builder.setInvalidatedByBiometricEnrollment(true) - } + builder.setInvalidatedByBiometricEnrollment(true) + keyGenerator.initialize(builder.build()) keyGenerator.generateKeyPair() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java index cd1988e83ff..9ee3a6957c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java @@ -252,11 +252,9 @@ public static void migrateSqlCipher3To4IfNeeded(@NonNull Context context, @NonNu NotificationManager notificationManager = context.getSystemService(NotificationManager.class); String channelId = context.getString(R.string.NotificationChannel_failures); - if (NotificationChannels.supported()) { - NotificationChannel channel = new NotificationChannel(channelId, channelId, NotificationManager.IMPORTANCE_HIGH); - channel.enableVibration(true); - notificationManager.createNotificationChannel(channel); - } + NotificationChannel channel = new NotificationChannel(channelId, channelId, NotificationManager.IMPORTANCE_HIGH); + channel.enableVibration(true); + notificationManager.createNotificationChannel(channel); NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId) .setSmallIcon(R.drawable.ic_notification) @@ -266,10 +264,6 @@ public static void migrateSqlCipher3To4IfNeeded(@NonNull Context context, @NonNu .setContentText(context.getString(R.string.ErrorNotifier_migration_downgrade)) .setAutoCancel(true); - if (!NotificationChannels.supported()) { - builder.setPriority(NotificationCompat.PRIORITY_HIGH); - } - notificationManager.notify(5874, builder.build()); // Throw the error (app will crash but there is nothing else we can do unfortunately) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java index 76c6b4355d5..a9e7081ef8e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.mediasend; -import android.annotation.TargetApi; import android.content.Context; import android.database.Cursor; import android.net.Uri; @@ -200,14 +199,12 @@ private List getPopulatedMedia(@NonNull Context context, @NonNull List= 26; - } - /** * @return A name suitable to be displayed as the notification channel title. */ @@ -137,119 +96,18 @@ public static boolean supported() { } } - /** - * Creates a channel for the specified recipient. - * @return The channel ID for the newly-created channel. - */ - public static synchronized String createChannelFor(@NonNull Context context, @NonNull Recipient recipient) { - VibrateState vibrateState = recipient.getMessageVibrate(); - boolean vibrationEnabled = vibrateState == VibrateState.DEFAULT ? TextSecurePreferences.isNotificationVibrateEnabled(context) : vibrateState == VibrateState.ENABLED; - Uri messageRingtone = recipient.getMessageRingtone() != null ? recipient.getMessageRingtone() : getMessageRingtone(context); - String displayName = getChannelDisplayNameFor(context, recipient.getName(), recipient.getProfileName(), recipient.getAddress()); - - return createChannelFor(context, recipient.getAddress(), displayName, messageRingtone, vibrationEnabled); - } - - /** - * More verbose version of {@link #createChannelFor(Context, Recipient)}. - */ - public static synchronized @Nullable String createChannelFor(@NonNull Context context, - @NonNull Address address, - @NonNull String displayName, - @Nullable Uri messageSound, - boolean vibrationEnabled) - { - if (!supported()) { - return null; - } - String channelId = generateChannelIdFor(address); - NotificationChannel channel = new NotificationChannel(channelId, displayName, NotificationManager.IMPORTANCE_HIGH); - setLedPreference(channel, TextSecurePreferences.getNotificationLedColor(context)); - channel.setGroup(CATEGORY_MESSAGES); - channel.enableVibration(vibrationEnabled); - - if (messageSound != null) { - channel.setSound(messageSound, new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN) - .setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT) - .build()); - } - - NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); - notificationManager.createNotificationChannel(channel); - - return channelId; - } - - /** - * Deletes the channel generated for the provided recipient. Safe to call even if there was never - * a channel made for that recipient. - */ - public static synchronized void deleteChannelFor(@NonNull Context context, @NonNull Recipient recipient) { - if (!supported()) { - return; - } - - NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); - String channel = recipient.getNotificationChannel(); - - if (channel != null) { - Log.i(TAG, "Deleting channel"); - notificationManager.deleteNotificationChannel(channel); - } - } - - /** - * Navigates the user to the system settings for the desired notification channel. - */ - public static void openChannelSettings(@NonNull Context context, @NonNull String channelId) { - if (!supported()) { - return; - } - - Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); - intent.putExtra(Settings.EXTRA_CHANNEL_ID, channelId); - intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName()); - context.startActivity(intent); - } - - /** - * Updates the LED color for message notifications and all contact-specific message notification - * channels. Performs database operations and should therefore be invoked on a background thread. - */ - @WorkerThread - public static synchronized void updateMessagesLedColor(@NonNull Context context, @NonNull Integer color) { - if (!supported()) { - return; - } - Log.i(TAG, "Updating LED color."); - - NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); - - updateMessageChannel(context, channel -> setLedPreference(channel, color)); - updateAllRecipientChannelLedColors(context, notificationManager, color); - - ensureCustomChannelConsistency(context); - } /** * @return The message ringtone set for the default message channel. */ public static synchronized @NonNull Uri getMessageRingtone(@NonNull Context context) { - if (!supported()) { - return Uri.EMPTY; - } - Uri sound = ServiceUtil.getNotificationManager(context).getNotificationChannel(getMessagesChannel(context)).getSound(); return sound == null ? Uri.EMPTY : sound; } public static synchronized @Nullable Uri getMessageRingtone(@NonNull Context context, @NonNull Recipient recipient) { - if (!supported() || recipient.getNotificationChannel() == null) { - return null; - } - NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); NotificationChannel channel = notificationManager.getNotificationChannel(recipient.getNotificationChannel()); @@ -265,9 +123,6 @@ public static synchronized void updateMessagesLedColor(@NonNull Context context, * Update the message ringtone for the default message channel. */ public static synchronized void updateMessageRingtone(@NonNull Context context, @Nullable Uri uri) { - if (!supported()) { - return; - } Log.i(TAG, "Updating default message ringtone with URI: " + String.valueOf(uri)); updateMessageChannel(context, channel -> { @@ -275,121 +130,23 @@ public static synchronized void updateMessageRingtone(@NonNull Context context, }); } - /** - * Updates the message ringtone for a specific recipient. If that recipient has no channel, this - * does nothing. - * - * This has to update the database, and therefore should be run on a background thread. - */ - @WorkerThread - public static synchronized void updateMessageRingtone(@NonNull Context context, @NonNull Recipient recipient, @Nullable Uri uri) { - if (!supported() || recipient.getNotificationChannel() == null) { - return; - } - Log.i(TAG, "Updating recipient message ringtone with URI: " + String.valueOf(uri)); - - String newChannelId = generateChannelIdFor(recipient.getAddress()); - boolean success = updateExistingChannel(ServiceUtil.getNotificationManager(context), - recipient.getNotificationChannel(), - generateChannelIdFor(recipient.getAddress()), - channel -> channel.setSound(uri == null ? Settings.System.DEFAULT_NOTIFICATION_URI : uri, getRingtoneAudioAttributes())); - - DatabaseComponent.get(context).recipientDatabase().setNotificationChannel(recipient, success ? newChannelId : null); - ensureCustomChannelConsistency(context); - } /** * @return The vibrate settings for the default message channel. */ public static synchronized boolean getMessageVibrate(@NonNull Context context) { - if (!supported()) { - return false; - } - return ServiceUtil.getNotificationManager(context).getNotificationChannel(getMessagesChannel(context)).shouldVibrate(); } - /** - * @return The vibrate setting for a specific recipient. If that recipient has no channel, this - * will return the setting for the default message channel. - */ - public static synchronized boolean getMessageVibrate(@NonNull Context context, @NonNull Recipient recipient) { - if (!supported()) { - return getMessageVibrate(context); - } - - NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); - NotificationChannel channel = notificationManager.getNotificationChannel(recipient.getNotificationChannel()); - - if (!channelExists(channel)) { - Log.w(TAG, "Recipient didn't have a channel. Returning message default."); - return getMessageVibrate(context); - } - - return channel.shouldVibrate(); - } - /** * Sets the vibrate property for the default message channel. */ public static synchronized void updateMessageVibrate(@NonNull Context context, boolean enabled) { - if (!supported()) { - return; - } Log.i(TAG, "Updating default vibrate with value: " + enabled); updateMessageChannel(context, channel -> channel.enableVibration(enabled)); } - /** - * Updates the message ringtone for a specific recipient. If that recipient has no channel, this - * does nothing. - * - * This has to update the database and should therefore be run on a background thread. - */ - @WorkerThread - public static synchronized void updateMessageVibrate(@NonNull Context context, @NonNull Recipient recipient, VibrateState vibrateState) { - if (!supported() || recipient.getNotificationChannel() == null) { - return ; - } - Log.i(TAG, "Updating recipient vibrate with value: " + vibrateState); - - boolean enabled = vibrateState == VibrateState.DEFAULT ? getMessageVibrate(context) : vibrateState == VibrateState.ENABLED; - String newChannelId = generateChannelIdFor(recipient.getAddress()); - boolean success = updateExistingChannel(ServiceUtil.getNotificationManager(context), - recipient.getNotificationChannel(), - newChannelId, - channel -> channel.enableVibration(enabled)); - - DatabaseComponent.get(context).recipientDatabase().setNotificationChannel(recipient, success ? newChannelId : null); - ensureCustomChannelConsistency(context); - } - - /** - * Updates the name of an existing channel to match the recipient's current name. Will have no - * effect if the recipient doesn't have an existing valid channel. - */ - public static synchronized void updateContactChannelName(@NonNull Context context, @NonNull Recipient recipient) { - if (!supported() || recipient.getNotificationChannel() == null) { - return; - } - Log.i(TAG, "Updating contact channel name"); - - NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); - - if (notificationManager.getNotificationChannel(recipient.getNotificationChannel()) == null) { - Log.w(TAG, "Tried to update the name of a channel, but that channel doesn't exist."); - return; - } - - NotificationChannel channel = new NotificationChannel(recipient.getNotificationChannel(), - getChannelDisplayNameFor(context, recipient.getName(), recipient.getProfileName(), recipient.getAddress()), - NotificationManager.IMPORTANCE_HIGH); - channel.setGroup(CATEGORY_MESSAGES); - notificationManager.createNotificationChannel(channel); - } - - @TargetApi(26) @WorkerThread public static synchronized void ensureCustomChannelConsistency(@NonNull Context context) { NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); @@ -421,7 +178,6 @@ public static synchronized void ensureCustomChannelConsistency(@NonNull Context } } - @TargetApi(26) private static void onCreate(@NonNull Context context, @NonNull NotificationManager notificationManager) { NotificationChannelGroup messagesGroup = new NotificationChannelGroup(CATEGORY_MESSAGES, context.getResources().getString(R.string.NotificationChannel_group_messages)); notificationManager.createNotificationChannelGroup(messagesGroup); @@ -454,7 +210,6 @@ private static void onCreate(@NonNull Context context, @NonNull NotificationMana } } - @TargetApi(26) private static void onUpgrade(@NonNull NotificationManager notificationManager, int oldVersion, int newVersion) { Log.i(TAG, "Upgrading channels from " + oldVersion + " to " + newVersion); @@ -469,7 +224,6 @@ private static void onUpgrade(@NonNull NotificationManager notificationManager, } } - @TargetApi(26) private static void setLedPreference(@NonNull NotificationChannel channel, @NonNull Integer ledColor) { if ("none".equals(ledColor)) { channel.enableLights(false); @@ -484,7 +238,6 @@ private static void setLedPreference(@NonNull NotificationChannel channel, @NonN return CONTACT_PREFIX + address.serialize() + "_" + System.currentTimeMillis(); } - @TargetApi(26) private static @NonNull NotificationChannel copyChannel(@NonNull NotificationChannel original, @NonNull String id) { NotificationChannel copy = new NotificationChannel(id, original.getName(), original.getImportance()); @@ -505,27 +258,7 @@ private static String getMessagesChannelId(int version) { return MESSAGES_PREFIX + version; } - @WorkerThread - @TargetApi(26) - private static void updateAllRecipientChannelLedColors(@NonNull Context context, @NonNull NotificationManager notificationManager, @NonNull Integer color) { - RecipientDatabase database = DatabaseComponent.get(context).recipientDatabase(); - - try (RecipientDatabase.RecipientReader recipients = database.getRecipientsWithNotificationChannels()) { - Recipient recipient; - while ((recipient = recipients.getNext()) != null) { - assert recipient.getNotificationChannel() != null; - - String newChannelId = generateChannelIdFor(recipient.getAddress()); - boolean success = updateExistingChannel(notificationManager, recipient.getNotificationChannel(), newChannelId, channel -> setLedPreference(channel, color)); - - database.setNotificationChannel(recipient, success ? newChannelId : null); - } - } - - ensureCustomChannelConsistency(context); - } - @TargetApi(26) private static void updateMessageChannel(@NonNull Context context, @NonNull ChannelUpdater updater) { NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); int existingVersion = TextSecurePreferences.getNotificationMessagesChannelVersion(context); @@ -539,7 +272,6 @@ private static void updateMessageChannel(@NonNull Context context, @NonNull Chan } } - @TargetApi(26) private static boolean updateExistingChannel(@NonNull NotificationManager notificationManager, @NonNull String channelId, @NonNull String newChannelId, @@ -559,20 +291,17 @@ private static boolean updateExistingChannel(@NonNull NotificationManager notifi return true; } - @TargetApi(21) private static AudioAttributes getRingtoneAudioAttributes() { return new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN) .setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT) .build(); } - @TargetApi(26) private static boolean channelExists(@Nullable NotificationChannel channel) { return channel != null && !NotificationChannel.DEFAULT_CHANNEL_ID.equals(channel.getId()); } private interface ChannelUpdater { - @TargetApi(26) void update(@NonNull NotificationChannel channel); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java index 108aa12c51d..7bea5594ede 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java @@ -51,8 +51,7 @@ public void addNotification(NotificationItem item) { Recipient recipient = notifications.getFirst().getRecipient(); if (recipient != null) { - return NotificationChannels.supported() ? NotificationChannels.getMessageRingtone(context, recipient) - : recipient.resolve().getMessageRingtone(); + return NotificationChannels.getMessageRingtone(context, recipient); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java index 935d575c569..ef69abdc261 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java @@ -32,9 +32,5 @@ public PendingMessageNotificationBuilder(Context context, NotificationPrivacyPre setContentIntent(PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)); setAutoCancel(true); setAlarms(null, Recipient.VibrateState.DEFAULT); - - if (!NotificationChannels.supported()) { - setPriority(TextSecurePreferences.getNotificationPriority(context)); - } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java index fb7abb7bd51..0ac16ea6522 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java @@ -13,7 +13,6 @@ import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.os.Build; import android.text.SpannableStringBuilder; import androidx.annotation.NonNull; @@ -24,11 +23,10 @@ import androidx.core.app.RemoteInput; import androidx.core.content.ContextCompat; +import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; -import org.session.libsession.avatars.ContactColors; import org.session.libsession.avatars.ContactPhoto; -import org.session.libsession.avatars.ResourceContactPhoto; import org.session.libsession.messaging.contacts.Contact; import org.session.libsession.utilities.NotificationPrivacyPreference; import org.session.libsession.utilities.TextSecurePreferences; @@ -38,7 +36,6 @@ import org.thoughtcrime.securesms.database.SessionContactDatabase; import org.thoughtcrime.securesms.dependencies.DatabaseComponent; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; -import com.bumptech.glide.Glide; import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.util.AvatarPlaceholderGenerator; @@ -69,10 +66,6 @@ public SingleRecipientNotificationBuilder(@NonNull Context context, @NonNull Not setSmallIcon(R.drawable.ic_notification); setColor(ContextCompat.getColor(context, R.color.accent_green)); setCategory(NotificationCompat.CATEGORY_MESSAGE); - - if (!NotificationChannels.supported()) { - setPriority(TextSecurePreferences.getNotificationPriority(context)); - } } public void setThread(@NonNull Recipient recipient) { @@ -179,13 +172,11 @@ public void addActions(@NonNull PendingIntent markReadIntent, Action replyAction = new Action(R.drawable.ic_reply_white_36dp, actionName, quickReplyIntent); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - replyAction = new Action.Builder(R.drawable.ic_reply_white_36dp, - actionName, - wearableReplyIntent) - .addRemoteInput(new RemoteInput.Builder(DefaultMessageNotifier.EXTRA_REMOTE_REPLY).setLabel(label).build()) - .build(); - } + replyAction = new Action.Builder(R.drawable.ic_reply_white_36dp, + actionName, + wearableReplyIntent) + .addRemoteInput(new RemoteInput.Builder(DefaultMessageNotifier.EXTRA_REMOTE_REPLY).setLabel(label).build()) + .build(); Action wearableReplyAction = new Action.Builder(R.drawable.ic_reply, actionName, diff --git a/app/src/main/java/org/thoughtcrime/securesms/permissions/Permissions.java b/app/src/main/java/org/thoughtcrime/securesms/permissions/Permissions.java index 9b6950bf7ad..f38d4c8613d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/permissions/Permissions.java +++ b/app/src/main/java/org/thoughtcrime/securesms/permissions/Permissions.java @@ -210,15 +210,8 @@ private static String[] filterNotGranted(@NonNull Context context, String... per .toArray(new String[0]); } - public static boolean hasAny(@NonNull Context context, String... permissions) { - return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || - Stream.of(permissions).anyMatch(permission -> ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED); - - } - public static boolean hasAll(@NonNull Context context, String... permissions) { - return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || - Stream.of(permissions).allMatch(permission -> ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED); + return Stream.of(permissions).allMatch(permission -> ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.kt index fa6461acc44..2d262848774 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.kt @@ -56,14 +56,14 @@ class NotificationsPreferenceFragment : ListSummaryPreferenceFragment() { true } - if (NotificationChannels.supported()) { - prefs.setNotificationRingtone( - NotificationChannels.getMessageRingtone(requireContext()).toString() - ) - prefs.setNotificationVibrateEnabled( - NotificationChannels.getMessageVibrate(requireContext()) - ) - } + + prefs.setNotificationRingtone( + NotificationChannels.getMessageRingtone(requireContext()).toString() + ) + prefs.setNotificationVibrateEnabled( + NotificationChannels.getMessageVibrate(requireContext()) + ) + findPreference(TextSecurePreferences.RINGTONE_PREF)!!.onPreferenceChangeListener = RingtoneSummaryListener() findPreference(TextSecurePreferences.NOTIFICATION_PRIVACY_PREF)!!.onPreferenceChangeListener = NotificationPrivacyListener() findPreference(TextSecurePreferences.VIBRATE_PREF)!!.onPreferenceChangeListener = @@ -99,18 +99,18 @@ class NotificationsPreferenceFragment : ListSummaryPreferenceFragment() { true } initializeListSummary(findPreference(TextSecurePreferences.NOTIFICATION_PRIVACY_PREF) as ListPreference?) - if (NotificationChannels.supported()) { - findPreference(TextSecurePreferences.NOTIFICATION_PRIORITY_PREF)!!.onPreferenceClickListener = - Preference.OnPreferenceClickListener { - val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS) - intent.putExtra( - Settings.EXTRA_CHANNEL_ID, NotificationChannels.getMessagesChannel(requireContext()) - ) - intent.putExtra(Settings.EXTRA_APP_PACKAGE, requireContext().packageName) - startActivity(intent) - true - } - } + + findPreference(TextSecurePreferences.NOTIFICATION_PRIORITY_PREF)!!.onPreferenceClickListener = + Preference.OnPreferenceClickListener { + val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS) + intent.putExtra( + Settings.EXTRA_CHANNEL_ID, NotificationChannels.getMessagesChannel(requireContext()) + ) + intent.putExtra(Settings.EXTRA_APP_PACKAGE, requireContext().packageName) + startActivity(intent) + true + } + initializeRingtoneSummary(findPreference(TextSecurePreferences.RINGTONE_PREF)) initializeMessageVibrateSummary(findPreference(TextSecurePreferences.VIBRATE_PREF) as SwitchPreferenceCompat?) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/PrivacySettingsPreferenceFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/PrivacySettingsPreferenceFragment.kt index 21b12496bdc..fb8b0ee3efa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/PrivacySettingsPreferenceFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/PrivacySettingsPreferenceFragment.kt @@ -78,14 +78,9 @@ class PrivacySettingsPreferenceFragment : ListSummaryPreferenceFragment() { title(R.string.CallNotificationBuilder_system_notification_title) text(R.string.CallNotificationBuilder_system_notification_message) button(R.string.activity_notification_settings_title) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS) - .putExtra(Settings.EXTRA_APP_PACKAGE, BuildConfig.APPLICATION_ID) - } else { - Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - .setData(Uri.parse("package:" + BuildConfig.APPLICATION_ID)) - } - .apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } + Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS) + .putExtra(Settings.EXTRA_APP_PACKAGE, BuildConfig.APPLICATION_ID) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) .takeIf { IntentUtils.isResolvable(requireContext(), it) }.let { startActivity(it) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt index d8d8a4172d2..fc52541987e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt @@ -7,7 +7,6 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import android.net.Uri -import android.os.Build import android.os.Bundle import android.os.Parcelable import android.util.SparseArray @@ -210,7 +209,7 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.settings_general, menu) - if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (BuildConfig.DEBUG) { menu.findItem(R.id.action_qr_code)?.contentDescription = resources.getString(R.string.AccessibilityId_view_qr_code) } return true diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/widgets/SignalListPreference.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/widgets/SignalListPreference.java index d8e90db1562..6cafc6035f7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/widgets/SignalListPreference.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/widgets/SignalListPreference.java @@ -2,14 +2,12 @@ import android.content.Context; -import android.os.Build; -import androidx.annotation.RequiresApi; -import androidx.preference.ListPreference; -import androidx.preference.Preference; -import androidx.preference.PreferenceViewHolder; import android.util.AttributeSet; import android.widget.TextView; +import androidx.preference.ListPreference; +import androidx.preference.PreferenceViewHolder; + import network.loki.messenger.R; public class SignalListPreference extends ListPreference { @@ -18,13 +16,11 @@ public class SignalListPreference extends ListPreference { private CharSequence summary; private OnPreferenceClickListener clickListener; - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public SignalListPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); initialize(); } - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public SignalListPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initialize(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/widget/VerticalSlideColorPicker.java b/app/src/main/java/org/thoughtcrime/securesms/scribbles/widget/VerticalSlideColorPicker.java index bd9afcadff6..1cf46baf4c6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/widget/VerticalSlideColorPicker.java +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/widget/VerticalSlideColorPicker.java @@ -23,7 +23,6 @@ package org.thoughtcrime.securesms.scribbles.widget; -import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; @@ -34,7 +33,6 @@ import android.graphics.Path; import android.graphics.RectF; import android.graphics.Shader; -import android.os.Build; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; @@ -98,12 +96,6 @@ public VerticalSlideColorPicker(Context context, AttributeSet attrs, int defStyl init(); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - public VerticalSlideColorPicker(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - init(); - } - private void init() { setWillNotDraw(false); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/DateUtils.java b/app/src/main/java/org/thoughtcrime/securesms/util/DateUtils.java index 66c838cc1db..6fe2193c9b9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/DateUtils.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/DateUtils.java @@ -18,17 +18,15 @@ import android.annotation.SuppressLint; import android.content.Context; +import android.text.format.DateFormat; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import android.os.Build; -import android.text.format.DateFormat; - import org.session.libsignal.utilities.Log; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.concurrent.TimeUnit; @@ -127,11 +125,7 @@ private static String getLocalizedPattern(String template, Locale locale) { @SuppressLint("ObsoleteSdkInt") public static long parseIso8601(@Nullable String date) { SimpleDateFormat format; - if (Build.VERSION.SDK_INT >= 24) { - format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.getDefault()); - } else { - format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault()); - } + format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.getDefault()); if (date.isEmpty()) { return -1; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java b/app/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java index ce8439a20d5..e3447b3cece 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java @@ -1,15 +1,15 @@ package org.thoughtcrime.securesms.util; -import android.annotation.TargetApi; import android.content.ClipData; import android.content.Context; -import androidx.annotation.ColorInt; -import androidx.annotation.NonNull; import android.text.TextPaint; import android.text.style.URLSpan; import android.view.View; import android.widget.Toast; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; + import network.loki.messenger.R; public class LongClickCopySpan extends URLSpan { @@ -39,23 +39,10 @@ public void updateDrawState(@NonNull TextPaint ds) { ds.setUnderlineText(!isHighlighted); } - void setHighlighted(boolean highlighted, @ColorInt int highlightColor) { - this.isHighlighted = highlighted; - this.highlightColor = highlightColor; - } - private void copyUrl(Context context, String url) { - int sdk = android.os.Build.VERSION.SDK_INT; - if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { - @SuppressWarnings("deprecation") android.text.ClipboardManager clipboard = - (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); - clipboard.setText(url); - } else { - copyUriSdk11(context, url); - } + copyUriSdk11(context, url); } - @TargetApi(android.os.Build.VERSION_CODES.HONEYCOMB) private void copyUriSdk11(Context context, String url) { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/StickyHeaderDecoration.java b/app/src/main/java/org/thoughtcrime/securesms/util/StickyHeaderDecoration.java index 04435fde0f9..0afe0192c0c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/StickyHeaderDecoration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/StickyHeaderDecoration.java @@ -131,7 +131,7 @@ protected int getHeaderTop(RecyclerView parent, View child, View header, int ada int layoutPos) { int headerHeight = getHeaderHeightForLayout(header); - int top = getChildY(parent, child) - headerHeight; + int top = (int)child.getY() - headerHeight; if (sticky && layoutPos == 0) { final int count = parent.getChildCount(); final long currentId = adapter.getHeaderId(adapterPos); @@ -142,7 +142,7 @@ protected int getHeaderTop(RecyclerView parent, View child, View header, int ada long nextId = adapter.getHeaderId(adapterPosHere); if (nextId != currentId) { final View next = parent.getChildAt(translatedChildPosition(parent, i)); - final int offset = getChildY(parent, next) - (headerHeight + getHeader(parent, adapter, adapterPosHere).itemView.getHeight()); + final int offset = (int)next.getY() - (headerHeight + getHeader(parent, adapter, adapterPosHere).itemView.getHeight()); if (offset < 0) { return offset; } else { @@ -162,16 +162,6 @@ private int translatedChildPosition(RecyclerView parent, int position) { return isReverseLayout(parent) ? parent.getChildCount() - 1 - position : position; } - private int getChildY(RecyclerView parent, View child) { - if (VERSION.SDK_INT < 11) { - Rect rect = new Rect(); - parent.getChildVisibleRect(child, rect, null); - return rect.top; - } else { - return (int)ViewCompat.getY(child); - } - } - protected int getHeaderHeightForLayout(View header) { return renderInline ? 0 : header.getHeight(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java b/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java index da50cd0846f..315737c51c2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java @@ -8,7 +8,6 @@ import android.media.AudioFocusRequest; import android.media.AudioManager; import android.media.SoundPool; -import android.os.Build; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; @@ -116,14 +115,9 @@ private static float logVolume(int volume, int maxVolume) { abstract public void abandonCallAudioFocus(); public static AudioManagerCompat create(@NonNull Context context) { - if (Build.VERSION.SDK_INT >= 26) { - return new Api26AudioManagerCompat(context); - } else { - return new Api21AudioManagerCompat(context); - } + return new Api26AudioManagerCompat(context); } - @RequiresApi(26) private static class Api26AudioManagerCompat extends AudioManagerCompat { private static AudioAttributes AUDIO_ATTRIBUTES = new AudioAttributes.Builder() diff --git a/build.gradle b/build.gradle index 08efb9ca24e..ef9f081e968 100644 --- a/build.gradle +++ b/build.gradle @@ -69,7 +69,7 @@ allprojects { } project.ext { - androidMinimumSdkVersion = 23 + androidMinimumSdkVersion = 26 androidTargetSdkVersion = 34 androidCompileSdkVersion = 34 } diff --git a/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt b/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt index 099b2541ab3..c3335c5a99b 100644 --- a/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt +++ b/libsession/src/main/java/org/session/libsession/snode/SnodeAPI.kt @@ -73,8 +73,8 @@ object SnodeAPI { private const val maxRetryCount = 6 private const val minimumSnodePoolCount = 12 private const val minimumSwarmSnodeCount = 3 - // Use port 4433 if the API level can handle the network security configuration and enforce pinned certificates - private val seedNodePort = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) 443 else 4443 + // Use port 4433 to enforce pinned certificates + private val seedNodePort = 4443 private const val useTestnet = false diff --git a/libsession/src/main/java/org/session/libsession/utilities/DecodedAudio.kt b/libsession/src/main/java/org/session/libsession/utilities/DecodedAudio.kt index ef21abe4c03..a342ee1ae56 100644 --- a/libsession/src/main/java/org/session/libsession/utilities/DecodedAudio.kt +++ b/libsession/src/main/java/org/session/libsession/utilities/DecodedAudio.kt @@ -5,17 +5,12 @@ import android.media.MediaCodec import android.media.MediaDataSource import android.media.MediaExtractor import android.media.MediaFormat -import android.os.Build - -import androidx.annotation.RequiresApi - import java.io.FileDescriptor import java.io.IOException import java.io.InputStream import java.nio.ByteBuffer import java.nio.ByteOrder import java.nio.ShortBuffer -import kotlin.jvm.Throws import kotlin.math.ceil import kotlin.math.roundToInt import kotlin.math.sqrt @@ -44,7 +39,6 @@ class DecodedAudio { } @JvmStatic - @RequiresApi(api = Build.VERSION_CODES.M) @Throws(IOException::class) fun create(dataSource: MediaDataSource): DecodedAudio { val mediaExtractor = MediaExtractor().apply { setDataSource(dataSource) } @@ -69,15 +63,7 @@ class DecodedAudio { val samples: ShortBuffer get() { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && - Build.VERSION.SDK_INT <= Build.VERSION_CODES.N_MR1 - ) { - // Hack for Nougat where asReadOnlyBuffer fails to respect byte ordering. - // See https://code.google.com/p/android/issues/detail?id=223824 - decodedSamples - } else { - decodedSamples.asReadOnlyBuffer() - } + return decodedSamples.asReadOnlyBuffer() } /** @@ -128,15 +114,13 @@ class DecodedAudio { codec.start() // Check if the track is in PCM 16 bit encoding. - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - try { - val pcmEncoding = codec.outputFormat.getInteger(MediaFormat.KEY_PCM_ENCODING) - if (pcmEncoding != AudioFormat.ENCODING_PCM_16BIT) { - throw IOException("Unsupported PCM encoding code: $pcmEncoding") - } - } catch (e: NullPointerException) { - // If KEY_PCM_ENCODING is not specified, means it's ENCODING_PCM_16BIT. + try { + val pcmEncoding = codec.outputFormat.getInteger(MediaFormat.KEY_PCM_ENCODING) + if (pcmEncoding != AudioFormat.ENCODING_PCM_16BIT) { + throw IOException("Unsupported PCM encoding code: $pcmEncoding") } + } catch (e: NullPointerException) { + // If KEY_PCM_ENCODING is not specified, means it's ENCODING_PCM_16BIT. } var decodedSamplesSize: Int = 0 // size of the output buffer containing decoded samples. diff --git a/libsession/src/main/java/org/session/libsession/utilities/ServiceUtil.java b/libsession/src/main/java/org/session/libsession/utilities/ServiceUtil.java index 394a8a0f31a..a66d5bf8405 100644 --- a/libsession/src/main/java/org/session/libsession/utilities/ServiceUtil.java +++ b/libsession/src/main/java/org/session/libsession/utilities/ServiceUtil.java @@ -6,13 +6,8 @@ import android.content.Context; import android.media.AudioManager; import android.net.ConnectivityManager; -import android.os.Build; import android.os.PowerManager; import android.os.Vibrator; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; -import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; @@ -54,8 +49,4 @@ public static Vibrator getVibrator(Context context) { return (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE); } - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1) - public static @Nullable SubscriptionManager getSubscriptionManager(@NonNull Context context) { - return (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); - } } diff --git a/libsession/src/main/java/org/session/libsession/utilities/ViewUtil.java b/libsession/src/main/java/org/session/libsession/utilities/ViewUtil.java index 34a0212c639..f8ca27cfff4 100644 --- a/libsession/src/main/java/org/session/libsession/utilities/ViewUtil.java +++ b/libsession/src/main/java/org/session/libsession/utilities/ViewUtil.java @@ -19,21 +19,16 @@ import android.app.Activity; import android.content.Context; import android.graphics.drawable.Drawable; -import android.os.Build.VERSION; -import android.os.Build.VERSION_CODES; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.ViewStub; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; -import android.widget.LinearLayout.LayoutParams; import androidx.annotation.IdRes; import androidx.annotation.LayoutRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.view.ViewCompat; import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import org.session.libsignal.utilities.ListenableFuture; @@ -42,58 +37,7 @@ public class ViewUtil { @SuppressWarnings("deprecation") public static void setBackground(final @NonNull View v, final @Nullable Drawable drawable) { - if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) { - v.setBackground(drawable); - } else { - v.setBackgroundDrawable(drawable); - } - } - - public static void setY(final @NonNull View v, final int y) { - if (VERSION.SDK_INT >= 11) { - ViewCompat.setY(v, y); - } else { - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)v.getLayoutParams(); - params.topMargin = y; - v.setLayoutParams(params); - } - } - - public static float getY(final @NonNull View v) { - if (VERSION.SDK_INT >= 11) { - return ViewCompat.getY(v); - } else { - return ((ViewGroup.MarginLayoutParams)v.getLayoutParams()).topMargin; - } - } - - public static void setX(final @NonNull View v, final int x) { - if (VERSION.SDK_INT >= 11) { - ViewCompat.setX(v, x); - } else { - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)v.getLayoutParams(); - params.leftMargin = x; - v.setLayoutParams(params); - } - } - - public static float getX(final @NonNull View v) { - if (VERSION.SDK_INT >= 11) { - return ViewCompat.getX(v); - } else { - return ((LayoutParams)v.getLayoutParams()).leftMargin; - } - } - - public static void swapChildInPlace(ViewGroup parent, View toRemove, View toAdd, int defaultIndex) { - int childIndex = parent.indexOfChild(toRemove); - if (childIndex > -1) parent.removeView(toRemove); - parent.addView(toAdd, childIndex > -1 ? childIndex : defaultIndex); - } - - @SuppressWarnings("unchecked") - public static T inflateStub(@NonNull View parent, @IdRes int stubId) { - return (T)((ViewStub)parent.findViewById(stubId)).inflate(); + v.setBackground(drawable); } @SuppressWarnings("unchecked") @@ -106,10 +50,6 @@ public static T findById(@NonNull Activity parent, @IdRes int r return (T) parent.findViewById(resId); } - public static Stub findStubById(@NonNull Activity parent, @IdRes int resId) { - return new Stub((ViewStub)parent.findViewById(resId)); - } - private static Animation getAlphaAnimation(float from, float to, int duration) { final Animation anim = new AlphaAnimation(from, to); anim.setInterpolator(new FastOutSlowInInterpolator()); @@ -177,58 +117,4 @@ public static int dpToPx(Context context, int dp) { return (int)((dp * context.getResources().getDisplayMetrics().density) + 0.5); } - public static void updateLayoutParams(@NonNull View view, int width, int height) { - view.getLayoutParams().width = width; - view.getLayoutParams().height = height; - view.requestLayout(); - } - - public static int getLeftMargin(@NonNull View view) { - if (ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_LTR) { - return ((ViewGroup.MarginLayoutParams) view.getLayoutParams()).leftMargin; - } - return ((ViewGroup.MarginLayoutParams) view.getLayoutParams()).rightMargin; - } - - public static int getRightMargin(@NonNull View view) { - if (ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_LTR) { - return ((ViewGroup.MarginLayoutParams) view.getLayoutParams()).rightMargin; - } - return ((ViewGroup.MarginLayoutParams) view.getLayoutParams()).leftMargin; - } - - public static void setLeftMargin(@NonNull View view, int margin) { - if (ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_LTR) { - ((ViewGroup.MarginLayoutParams) view.getLayoutParams()).leftMargin = margin; - } else { - ((ViewGroup.MarginLayoutParams) view.getLayoutParams()).rightMargin = margin; - } - view.forceLayout(); - view.requestLayout(); - } - - public static void setTopMargin(@NonNull View view, int margin) { - ((ViewGroup.MarginLayoutParams) view.getLayoutParams()).topMargin = margin; - view.requestLayout(); - } - - public static void setPaddingTop(@NonNull View view, int padding) { - view.setPadding(view.getPaddingLeft(), padding, view.getPaddingRight(), view.getPaddingBottom()); - } - - public static void setPaddingBottom(@NonNull View view, int padding) { - view.setPadding(view.getPaddingLeft(), view.getPaddingTop(), view.getPaddingRight(), padding); - } - - public static boolean isPointInsideView(@NonNull View view, float x, float y) { - int[] location = new int[2]; - - view.getLocationOnScreen(location); - - int viewX = location[0]; - int viewY = location[1]; - - return x > viewX && x < viewX + view.getWidth() && - y > viewY && y < viewY + view.getHeight(); - } } diff --git a/libsession/src/main/java/org/session/libsession/utilities/recipients/Recipient.java b/libsession/src/main/java/org/session/libsession/utilities/recipients/Recipient.java index 0aef1583872..ac0c9067c4f 100644 --- a/libsession/src/main/java/org/session/libsession/utilities/recipients/Recipient.java +++ b/libsession/src/main/java/org/session/libsession/utilities/recipients/Recipient.java @@ -718,7 +718,7 @@ public void setRegistered(@NonNull RegisteredState value) { } public synchronized @Nullable String getNotificationChannel() { - return !(Build.VERSION.SDK_INT >= 26) ? null : notificationChannel; + return notificationChannel; } public void setNotificationChannel(@Nullable String value) { From ddd7338853f7ec27a9d3363b916b9d27a7ac4bfa Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Thu, 15 Aug 2024 10:42:54 +1000 Subject: [PATCH 03/12] More clean ups --- .../securesms/jobmanager/Constraint.java | 5 -- .../jobmanager/impl/NetworkConstraint.java | 11 ---- .../securesms/util/LongClickCopySpan.java | 61 ------------------- .../webrtc/audio/AudioManagerCompat.java | 41 ------------- 4 files changed, 118 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Constraint.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Constraint.java index 854804d746c..dd766bbbb32 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Constraint.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Constraint.java @@ -8,11 +8,6 @@ public interface Constraint { boolean isMet(); - @NonNull String getFactoryKey(); - - @RequiresApi(26) - void applyToJobInfo(@NonNull JobInfo.Builder jobInfoBuilder); - interface Factory { T create(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java index 1546883b856..7b128bf9fe8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java @@ -28,17 +28,6 @@ public boolean isMet() { return activeNetworkInfo != null && activeNetworkInfo.isConnected(); } - @Override - public @NonNull String getFactoryKey() { - return KEY; - } - - @RequiresApi(26) - @Override - public void applyToJobInfo(@NonNull JobInfo.Builder jobInfoBuilder) { - jobInfoBuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); - } - public static final class Factory implements Constraint.Factory { private final Application application; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java b/app/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java deleted file mode 100644 index e3447b3cece..00000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.thoughtcrime.securesms.util; - -import android.content.ClipData; -import android.content.Context; -import android.text.TextPaint; -import android.text.style.URLSpan; -import android.view.View; -import android.widget.Toast; - -import androidx.annotation.ColorInt; -import androidx.annotation.NonNull; - -import network.loki.messenger.R; - -public class LongClickCopySpan extends URLSpan { - private static final String PREFIX_MAILTO = "mailto:"; - private static final String PREFIX_TEL = "tel:"; - - private boolean isHighlighted; - @ColorInt - private int highlightColor; - - public LongClickCopySpan(String url) { - super(url); - } - - void onLongClick(View widget) { - Context context = widget.getContext(); - String preparedUrl = prepareUrl(getURL()); - copyUrl(context, preparedUrl); - Toast.makeText(context, - context.getString(R.string.ConversationItem_copied_text, preparedUrl), Toast.LENGTH_SHORT).show(); - } - - @Override - public void updateDrawState(@NonNull TextPaint ds) { - super.updateDrawState(ds); - ds.bgColor = highlightColor; - ds.setUnderlineText(!isHighlighted); - } - - private void copyUrl(Context context, String url) { - copyUriSdk11(context, url); - } - - private void copyUriSdk11(Context context, String url) { - android.content.ClipboardManager clipboard = - (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText(context.getString(R.string.app_name), url); - clipboard.setPrimaryClip(clip); - } - - private String prepareUrl(String url) { - if (url.startsWith(PREFIX_MAILTO)) { - return url.substring(PREFIX_MAILTO.length()); - } else if (url.startsWith(PREFIX_TEL)) { - return url.substring(PREFIX_TEL.length()); - } - return url; - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java b/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java index 315737c51c2..50af4f36c04 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/AudioManagerCompat.java @@ -10,7 +10,6 @@ import android.media.SoundPool; import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; import org.session.libsession.utilities.ServiceUtil; import org.session.libsignal.utilities.Log; @@ -174,44 +173,4 @@ public void abandonCallAudioFocus() { audioFocusRequest = null; } } - - @RequiresApi(21) - private static class Api21AudioManagerCompat extends AudioManagerCompat { - - private static AudioAttributes AUDIO_ATTRIBUTES = new AudioAttributes.Builder() - .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH) - .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION) - .setLegacyStreamType(AudioManager.STREAM_VOICE_CALL) - .build(); - - private Api21AudioManagerCompat(@NonNull Context context) { - super(context); - } - - @Override - public SoundPool createSoundPool() { - return new SoundPool.Builder() - .setAudioAttributes(AUDIO_ATTRIBUTES) - .setMaxStreams(1) - .build(); - } - - @Override - public void requestCallAudioFocus() { - int result = audioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_VOICE_CALL, AUDIOFOCUS_GAIN); - - if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { - Log.w(TAG, "Audio focus not granted. Result code: " + result); - } - } - - @Override - public void abandonCallAudioFocus() { - int result = audioManager.abandonAudioFocus(onAudioFocusChangeListener); - - if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { - Log.w(TAG, "Audio focus abandon failed. Result code: " + result); - } - } - } } From b24660dcb6b8856fc2f4d0fb2e2016da2bdf4c8e Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Thu, 15 Aug 2024 14:39:58 +1000 Subject: [PATCH 04/12] Removed unused class --- app/src/main/AndroidManifest.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0306252e16d..b6bcdf62939 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -291,10 +291,6 @@ android:name="org.thoughtcrime.securesms.scribbles.StickerSelectActivity" android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize" android:theme="@style/Theme.Session.ForceDark" /> - Date: Thu, 15 Aug 2024 15:27:45 +1000 Subject: [PATCH 05/12] Clean up --- .../main/res/anim/camera_slide_from_bottom.xml | 8 -------- app/src/main/res/anim/fade_in.xml | 6 ------ app/src/main/res/anim/fade_out.xml | 6 ------ app/src/main/res/anim/fade_scale_in.xml | 17 ----------------- app/src/main/res/anim/slide_from_top.xml | 11 ----------- app/src/main/res/anim/slide_to_top.xml | 7 ------- .../bottom_pause_to_play_animation.xml | 8 -------- .../bottom_play_to_pause_animation.xml | 8 -------- .../main/res/animator/rotate_90_animation.xml | 9 --------- .../res/animator/rotate_minus_90_animation.xml | 9 --------- .../animator/upper_pause_to_play_animation.xml | 8 -------- .../animator/upper_play_to_pause_animation.xml | 8 -------- .../res/drawable/pause_to_play_animation.xml | 18 ------------------ .../res/drawable/play_to_pause_animation.xml | 18 ------------------ 14 files changed, 141 deletions(-) delete mode 100644 app/src/main/res/anim/camera_slide_from_bottom.xml delete mode 100644 app/src/main/res/anim/fade_in.xml delete mode 100644 app/src/main/res/anim/fade_out.xml delete mode 100644 app/src/main/res/anim/fade_scale_in.xml delete mode 100644 app/src/main/res/anim/slide_from_top.xml delete mode 100644 app/src/main/res/anim/slide_to_top.xml delete mode 100644 app/src/main/res/animator/bottom_pause_to_play_animation.xml delete mode 100644 app/src/main/res/animator/bottom_play_to_pause_animation.xml delete mode 100644 app/src/main/res/animator/rotate_90_animation.xml delete mode 100644 app/src/main/res/animator/rotate_minus_90_animation.xml delete mode 100644 app/src/main/res/animator/upper_pause_to_play_animation.xml delete mode 100644 app/src/main/res/animator/upper_play_to_pause_animation.xml delete mode 100644 app/src/main/res/drawable/pause_to_play_animation.xml delete mode 100644 app/src/main/res/drawable/play_to_pause_animation.xml diff --git a/app/src/main/res/anim/camera_slide_from_bottom.xml b/app/src/main/res/anim/camera_slide_from_bottom.xml deleted file mode 100644 index 5d7343cf25d..00000000000 --- a/app/src/main/res/anim/camera_slide_from_bottom.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml deleted file mode 100644 index 508f8be39d9..00000000000 --- a/app/src/main/res/anim/fade_in.xml +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/app/src/main/res/anim/fade_out.xml b/app/src/main/res/anim/fade_out.xml deleted file mode 100644 index e8f16d01aab..00000000000 --- a/app/src/main/res/anim/fade_out.xml +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/app/src/main/res/anim/fade_scale_in.xml b/app/src/main/res/anim/fade_scale_in.xml deleted file mode 100644 index 0f2def07d36..00000000000 --- a/app/src/main/res/anim/fade_scale_in.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/anim/slide_from_top.xml b/app/src/main/res/anim/slide_from_top.xml deleted file mode 100644 index 761b9151dc9..00000000000 --- a/app/src/main/res/anim/slide_from_top.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/anim/slide_to_top.xml b/app/src/main/res/anim/slide_to_top.xml deleted file mode 100644 index cc204acb23e..00000000000 --- a/app/src/main/res/anim/slide_to_top.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/animator/bottom_pause_to_play_animation.xml b/app/src/main/res/animator/bottom_pause_to_play_animation.xml deleted file mode 100644 index f5b474bb709..00000000000 --- a/app/src/main/res/animator/bottom_pause_to_play_animation.xml +++ /dev/null @@ -1,8 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/animator/bottom_play_to_pause_animation.xml b/app/src/main/res/animator/bottom_play_to_pause_animation.xml deleted file mode 100644 index 4f2778d6853..00000000000 --- a/app/src/main/res/animator/bottom_play_to_pause_animation.xml +++ /dev/null @@ -1,8 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/animator/rotate_90_animation.xml b/app/src/main/res/animator/rotate_90_animation.xml deleted file mode 100644 index 7d44ce6900a..00000000000 --- a/app/src/main/res/animator/rotate_90_animation.xml +++ /dev/null @@ -1,9 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/animator/rotate_minus_90_animation.xml b/app/src/main/res/animator/rotate_minus_90_animation.xml deleted file mode 100644 index ef9e1b6f1f7..00000000000 --- a/app/src/main/res/animator/rotate_minus_90_animation.xml +++ /dev/null @@ -1,9 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/animator/upper_pause_to_play_animation.xml b/app/src/main/res/animator/upper_pause_to_play_animation.xml deleted file mode 100644 index 880c7b0b83f..00000000000 --- a/app/src/main/res/animator/upper_pause_to_play_animation.xml +++ /dev/null @@ -1,8 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/animator/upper_play_to_pause_animation.xml b/app/src/main/res/animator/upper_play_to_pause_animation.xml deleted file mode 100644 index ffa933231cb..00000000000 --- a/app/src/main/res/animator/upper_play_to_pause_animation.xml +++ /dev/null @@ -1,8 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/drawable/pause_to_play_animation.xml b/app/src/main/res/drawable/pause_to_play_animation.xml deleted file mode 100644 index 4d19dc4f9f6..00000000000 --- a/app/src/main/res/drawable/pause_to_play_animation.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/play_to_pause_animation.xml b/app/src/main/res/drawable/play_to_pause_animation.xml deleted file mode 100644 index b8bc7934fe7..00000000000 --- a/app/src/main/res/drawable/play_to_pause_animation.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - \ No newline at end of file From 807180200cd5610799573961a67d8e93448fbafe Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Thu, 15 Aug 2024 15:35:08 +1000 Subject: [PATCH 06/12] Clean up --- app/src/main/res/color/icon_tab_selector.xml | 5 ----- .../res/drawable-hdpi/divet_lower_right_dark.png | Bin 117 -> 0 bytes .../res/drawable-hdpi/ic_account_box_dark.png | Bin 321 -> 0 bytes .../res/drawable-hdpi/ic_account_box_light.png | Bin 304 -> 0 bytes .../res/drawable-hdpi/ic_attach_grey600_24dp.png | Bin 3740 -> 0 bytes .../main/res/drawable-hdpi/ic_audio_light.png | Bin 1748 -> 0 bytes .../res/drawable-mdpi/divet_lower_right_dark.png | Bin 114 -> 0 bytes .../res/drawable-mdpi/ic_account_box_dark.png | Bin 253 -> 0 bytes .../res/drawable-mdpi/ic_account_box_light.png | Bin 236 -> 0 bytes .../res/drawable-mdpi/ic_attach_grey600_24dp.png | Bin 1943 -> 0 bytes .../main/res/drawable-mdpi/ic_audio_light.png | Bin 888 -> 0 bytes .../drawable-xhdpi/divet_lower_right_dark.png | Bin 143 -> 0 bytes .../res/drawable-xhdpi/ic_account_box_dark.png | Bin 410 -> 0 bytes .../res/drawable-xhdpi/ic_account_box_light.png | Bin 379 -> 0 bytes .../drawable-xhdpi/ic_attach_grey600_24dp.png | Bin 5950 -> 0 bytes .../main/res/drawable-xhdpi/ic_audio_light.png | Bin 2431 -> 0 bytes .../drawable-xxhdpi/divet_lower_right_dark.png | Bin 165 -> 0 bytes .../res/drawable-xxhdpi/ic_account_box_dark.png | Bin 585 -> 0 bytes .../res/drawable-xxhdpi/ic_account_box_light.png | Bin 540 -> 0 bytes .../drawable-xxhdpi/ic_attach_grey600_24dp.png | Bin 3319 -> 0 bytes .../main/res/drawable-xxhdpi/ic_audio_light.png | Bin 3740 -> 0 bytes app/src/main/res/values/attrs.xml | 2 -- app/src/main/res/values/themes.xml | 2 -- libsession/src/main/res/values/attrs.xml | 2 -- 24 files changed, 11 deletions(-) delete mode 100644 app/src/main/res/color/icon_tab_selector.xml delete mode 100644 app/src/main/res/drawable-hdpi/divet_lower_right_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_account_box_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_account_box_light.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_attach_grey600_24dp.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_audio_light.png delete mode 100644 app/src/main/res/drawable-mdpi/divet_lower_right_dark.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_account_box_dark.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_account_box_light.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_attach_grey600_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_audio_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/divet_lower_right_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_account_box_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_account_box_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_attach_grey600_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_audio_light.png delete mode 100644 app/src/main/res/drawable-xxhdpi/divet_lower_right_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_account_box_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_account_box_light.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_attach_grey600_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_audio_light.png diff --git a/app/src/main/res/color/icon_tab_selector.xml b/app/src/main/res/color/icon_tab_selector.xml deleted file mode 100644 index 30cd1bdc27e..00000000000 --- a/app/src/main/res/color/icon_tab_selector.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/divet_lower_right_dark.png b/app/src/main/res/drawable-hdpi/divet_lower_right_dark.png deleted file mode 100644 index d37eece35cec67c894448b5fe6fc253c1689ab8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mY&=~YLn;`1PdRcj7z!LX5MlkI zljqIiAnios_lg$PKWFTXStjDW5d#U7cgknYLs&CRKC|&gx1Sjzsv?6(*(xEyPi`F5=K)$YuIqO}2 zfr9s)|KtOg+>tXObs_ecu)wzk_w4`v_$8aRB)0<-6y4f^l>~UP1ERJRsJNz2M#eEW ze5ip(dfz6Gcv1o-hd*X}yz79=*6Ax9&~KeS(E&TH)5(?t`X$o8Wc_EV-)Q=yA|{p{ z748L~Va}8(a~dsBQZQyf@?{SX7*kMg4$K&mTIW-S%>03xb0V`QA}*+XfQnP|$2g;M z2S&yrM(#l71nfEk#<9+U|8i8kq3G2PJaqm0ejvDjJd>}xLaqE4hdXj3E)@C%Ad(Ff T@}@sV00000NkvXXu0mjfp!ABu diff --git a/app/src/main/res/drawable-hdpi/ic_account_box_light.png b/app/src/main/res/drawable-hdpi/ic_account_box_light.png deleted file mode 100644 index 042b0b8559805e0777f4389d5bbb388955ea4781..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 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 diff --git a/app/src/main/res/drawable-mdpi/divet_lower_right_dark.png b/app/src/main/res/drawable-mdpi/divet_lower_right_dark.png deleted file mode 100644 index 8d2bc439ec484423501fa4b2d46dd8783dffe408..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$0wn*`OvwRKmYyz-Ar*|dXEyRO81fu;&=aq4 zdpMcl<`?bKl1h;t`Nw;9oa=x4M=-wq$1X>UPfHxH@g5V*ljtj`Q<5NHU4 Mr>mdKI;Vst01F!>EC2ui diff --git a/app/src/main/res/drawable-mdpi/ic_account_box_dark.png b/app/src/main/res/drawable-mdpi/ic_account_box_dark.png deleted file mode 100644 index 285689f3c398db87122d892cd9fd7d3d82f28f99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmVkdg0002QNklDswa~ef@2X#B4con7h)Yb>xL0v>m5e;SS4n={}lS{?nfcgs3;`1Mc-{1>J zH7UhsE(;RMlrYCJfi;p=Ch$Pg-2{Y{0b+ax**s2FfSBI*Tc4X8@KO90$N@_Ox^keS z0k#|%Yk(&Q4%$yVRz0JIO~6%nMzcQwXEw~TZMjH+9U(*Q3L_%+<$#naEfnV3M5M*Q z1eLR}7_f7JZZV+pSJxTkPg)I+s>_lWWqPu}QBB|8$lqLU!K!^#00000NkvXXu0mjf DLStv9 diff --git a/app/src/main/res/drawable-mdpi/ic_account_box_light.png b/app/src/main/res/drawable-mdpi/ic_account_box_light.png deleted file mode 100644 index 2d9417bd099d2463d4c7b61be7d3cf9f4e9fe235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmVkdg00029NklK8O-|XePSJRP^dLdjvi3p|+Db|UPo0}$V8WTFL>qtqwco;lhhefLqoVa# z#hwVukyfw+mZvE2z|zX*6DZL{-88o$fs#3I3-0oO#uUo~Atogc%*F;bn6x}_!TgEW zq0bnih$)57Xzx#ff)l%LX9{T`Ct-zYO-k+;Xh;b7CLpD82e$M{+yO-&7Sb>V7ASQx<2(cQf=lF;%P3(;2=8xrYn&#;5^M_}~%k1~g z{O;WyhCHK6+r5wgYw3#eifgs|T`9`2P*oB2LdLuUK0y1Cfcr zRX|lEjb}H2tjY1b))UAvbpVhB!uk0;5b0A7ZoflvG1xSqUBdC^cfh$V)fqNz*M&jz z8deLB{kN`#`i*QlZ0r#y@*&U|O*N2%j-N}PR`C7SB1U!=Fw42m!F(c_fFepZ7XIF* z+6-Y0-7#<@mHZXX=h2TLxNDRgX1aCVg@Sqden`2(MgTRMc;FZAJ_F?HPYyn;RbBu_ z?Ac@mC=RBE!@2$2ynyG~Rxm`U{{=41!uU6%fi6gOg~F)pt6&+gh6T69&-pbl-~8m@ z!&)T;n772>v7p?U8U^RQ-zx&1*WLyFPRHx9o4~0+yfJs-xxb`kLvNOC0!7oZcp$E9 zAxQQKo5YW9p<%5u4ww|~9+(ZuW*But_9mSCjdC2!KiBOJT$w%tbgyd?VO2Hb0p6LU z0d_}PmMJV7T?KUIqfWR#nk<6yEqn*W$J1VrEa_hlrgQ&u8yyyWGceg=@CPvJq$~$Y zU6pTvCAbH0kHz3qVR^ayI(!spS$!6X4~QQq!nrIk`#!9JU%9KsgL^sQ;arfu7)URf zWaU}76v*QdpTMx-OMo$OXTY42yb(ryEAxU=ta2;_AMSnx+-LeU(D`fPAjVZz1Aprq zYKDgQO*s%b$Q8gnojMoZSS6ngr8l3nLR|oV4MOgdM(DrI7g?Rq2LgF<#Nc9&P6DP# zI8K&>+o{w~;nMT(y#SUTPlDXZ!Z^)3h*e~G0ncy!80s&k902c9VVrtDL^2uof#=gI zpmDGEC_H~ly%xwUHVo)Hj(No=AS{YQ6i7cC0L(?fz$Wor@<2306EcO@NE!(L;eF; zf_Fe|USBjs`H8{rLu{wwDp-R1K|^9U4|0>xYIDxoWX-%7fn8g-i zCj-;YeFbJO?M-0g+^$1jNp~J>Ptae6^rN=@IphQ9Y^ZQCO@q1_eGL#*Xz+xNeHu@Q zJF19M~S?GDes>xAzl>_(OgmoRw-H12yZFz>B*lWnTw6 zV<;W?E@=t4CD9c4W+}1ya&=w{1UIvxKm*9Da9Sp5g3j<1b*wK)jNI2?lH0$~m~0Bf%#ce! z%kt*|xo7#EXEFP@>vR}BlfMB4ewqV7#&hR^ue0sXojXW0$Oq*q;M<}-4r?-%jc_FJ zi3(~xAN>p#)HvmU+X~elxZutx!ME9X3&IYG!RLVVH6gfg$L+y+;aEz7fQIP42BPAv zCHs!|v69el;fI?vz)Heei*%DGkUN$B3Bs#oPVo77$3_Ut-vp~Z%h9ngV27K{28dp)C~T8 z`d5HINF*RV!WrNTkKVN~D`KD?eiz)A4(oMo$6)?MsVlg@s9Xe9p>z*SC^c3>m}h)9{89P523PwO2H?{*5iva@>#f;$-WKJ=eWHv)aBUYj@KQr?7!n% z#p4~Y^tbQUgXNoaBK-53dKq{nj&vQ{cK6y#X&2!3o%FY%zh_Gj1TGV=zY3%ig<~Q3 zj}B}vDm<#OYk??SmjW|}BVfK|`$>>=NxlXOf(E8rb@CjXx@g;{TVrjD`sG7C%+nM4za62>d6(uP>1mOpID2S{@)1#Eeh4Kq zbWQM3Z)>H&_EZUczfxBL2LI$380RhC@dS{F@5WF4C4Hnv$a(|gKkWQ^a4EKZp}Fm4 z6T#Ve*tiwIBs{a=jwMXQ{;zXV8IUooA29D`J^*IZNPnNY0VHE=Z))^_aNd3$m#3Zg dzX1RM|NmlBoGMLo{7e7<002ovPDHLkV1n`rr3wH5 diff --git a/app/src/main/res/drawable-mdpi/ic_audio_light.png b/app/src/main/res/drawable-mdpi/ic_audio_light.png deleted file mode 100644 index fd2d3d06da454708cc6b83fc16194151b50b40e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmV-;1Bd*HP);Hbhn*cLZwQsuxp*anj{(j^IC8C&HV^%SX;gJtbIqtp_ka$wo}!eCldWw68_ zrc$EvV_BQ0GZm`xSfa(b1gIQXzO|W1fXad8-Ag)SrxI2@O!EWb-!h$XQ;ASDhMA*{ zocl;KW-5_i#-#gy>@6MfQVCxjO!FH#wm>~rD&en>7s#>a)Z(NPhwCCM4z5{hF;a=c zR_B3(>rsqUqDW(oH{|8`s6?^Ovw?!!q$@TmQM6u`QE>CIQHkO;SwO*!#ziH{)WHW7 z*fytPq7voG_=*C16BCsvTQBP}PMETCJjm+)Q9SfB>iY~B^%-xHHN?0|(U+`4F z&51augw-^U$?(>sh0NWEfGYP|d5i0K8%E~Vs7FBMxPyPiNqjv;=0+o+a$t#XoW@he zCNj1X0hJ3&>@tL>tH|8Q|4rq`5<3i%Un6ipeaDe^miLF;5;_Jf@rwcSyN!(fJ^I7x zFgn)xvBWAFd3DjYf8mLdGUj z!`i36@Pqg|H7qelxSDyA-=UrwR-24)_GkW~RIvQ-#BuwwCOxdrgzL9&P1C~?J%syd z{N0ljv91tq$$B5Ah;^S}=C|rkDPk=ayftm5h_zPmYtL?qSbK!Kg^V@R!xD{x7tDPr zVs#Vh5;8VeVO3bwV_5yb|7-7#i2wv*AONPILIFC^@Cs0bbV>|lU~;po0zS!|PX`~R zes}yx`;qoUrr+Wjv_1I|$#I_00x-F+u? z*~giyuG({tGkec|xAe1L2j!v)gkXF`yo%r+kx(-T8xvzEAW`(@3_@MS1q-4UaXx_X ze6yRgJ84Tb(;+tvU(-00000i1Gl|v>@rRb~`ix O0000V+{s7i-Bx{ny*kha22WQ%mvv4FO#qu!G$8;0 diff --git a/app/src/main/res/drawable-xhdpi/ic_account_box_dark.png b/app/src/main/res/drawable-xhdpi/ic_account_box_dark.png deleted file mode 100644 index 2559c4dbf1f2f83d309e8ee9bea986f3a230b99b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 zcmV;L0cHM)P)NUXbk342X~{G6RJBLx4L%Y6Jw-3F%}D&@{<^Tje>VpA|r}K6JT(&IZtk-R@-p zxFr|6&C`(w>?f{|~xX|qWXyA9aliVqn;mnJ1OLX0fhdEP)DtP#%c_U9fZ1|i;jLwBGRZaUI3elHz6HGBz}14xoR05Xp5Y_eWRY={{|jH zXvvG`dEP=h+%dsmE1F@#Eip?v!C(buI9~448?4Yii77S23htg#FQNg@l*&W{GD=z5 z{h@%Agf`9jViMAN0}MR^z6IyLIv&aFao`5cS&guvl(I8JiDj(3JNMAmnMUhxO zV4Wfx>H*qcL0di`p~!{)&rttCr2i<^dl_lGj@RaElaT(aKO{cD2V^`l;FJy#oAX6< z=rUkLCLQq3kVBf}X>!B^A2I=BdW0+^p0|vCAs<7*`SS$~LQN z@#Y?IiHj@ufGu1^?g0&4G~5GR{k{PIGEzTMsh{c850%=dT7_eE&bfYyt#H%4bG_$z Z-WN6f#@a)vY+3*S002ovPDHLkV1hWnqP_qC diff --git a/app/src/main/res/drawable-xhdpi/ic_attach_grey600_24dp.png b/app/src/main/res/drawable-xhdpi/ic_attach_grey600_24dp.png deleted file mode 100644 index 28aef9e9b1c20bf3dbd0046e1fa59dea46b5bc55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5950 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 diff --git a/app/src/main/res/drawable-xhdpi/ic_audio_light.png b/app/src/main/res/drawable-xhdpi/ic_audio_light.png deleted file mode 100644 index 3fe1d58cb008636e22f083905b457d9966d15963..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2431 zcmeH|`!^GeAIIk!n_=1ZH#>WDZxzhKCB$) zdO#-AOE>w%Z;>bkhOb8OK4Zy5OKC@16k=z#v+PB)K&5mOV2VdPJVP%RP2PPlAV*(5 z$j~a*bgu>UBwfzV<=DZJ0idr+>eGU8tj4Kj6!_y4pbz@-%Xu# z$`(sG4pSqB5$r>4x~KOj0{}ZrogL7GM2Xn}3)gl4ROXoy%|C_|Ss1m2Md-MZe`Yhw z_uw{E|KZnPGf4-om)v;syU$J!0X#TUYB5njE=3LKL5gUMOBAX7=_{3v!{u z)y;^Z8L0x4O05n29dqCho)De9w*S62WZw<;!LuFScf29NZ>%4S1f6@E5fNs|`h5QW zhp>Q<&9LHxvQG~X5#Yjh{@~6x%*N*Tw+qH$8JXEu zX4aw12uEE{waQWMv0N_W zxSB8h(LP87_k$7mbF~2BZf(hWCw|aKbV&MkXr{oWo9Y-izfh4>%pp3!mkv^4&5itlty2#x?qfSrxtQ%1g7Ef>Kwmr(!Da#D{XpBwVW`KRqh+s{-C}Tj4Uj^HDCXnu z?yZ4MJZtx+R=}(I2%p4ZR%h82Vy4Pm-Aha8AQK<%wf0ME3C^J^#h8*I z`X4(F%wA;FEg!c-9y3_@>_l335S(+i-v+HEsK4HD<=8_8F`E=v1;#$D8S{j2^LZoF zS*(7-`tHh7OL(4lW7Dm>gOR%Y`wU0nwY1Xr?sdzqc1Sh}#cn&^f@NVPxU-b+9C`I* z!VHwQNi5^7vZO&Qn*N6POJtCG-mTciC})=Hkrka2)Xc5Rq>A#iQ!VzTDe4W5as4g^ z4RHVEWPO_zJ$R~o)3S-DFbReff}0`2knh@Tq)IQJpx66j2 z2u)ce;nClQ@GWWj8Va^K>&v02%AT$rnDaH*l#%_Du*N>mGx~9R#iE}7B(EcE3RYM< z-}jW1n)BSYHtO?f&VOwoSeO z*uo|}6bEpc2a>T_eoAKy?eC$p+?3A5SFV%-!?iklS6C>;8;d6JuLD2!!(>zP<0ZML z@d0nUNG*DEWt+%$Ag|T7ZGOkmlsGx<6K%tqmAuy9rsq{$R=*qnQ4$tD-xM#&w#Gusd9BCp&Sx5-UMTd_+UPOcT$^Dcy(iyG zo}S!_IWWp=ZRDAB8Yy5Dsw~>@UTYsR)VGX3WTa-Ghqe+9Gsv5a#l@?mP8I8>s8o)a zmM9z&D0nQ2hfOiQt8RvmPOs|3mEtyS#a=xaUw1RhZ#3uPp(U>`K`USHWf~FxOtp%8 zN^+U%6?VqgA=fL6=}!`k6IH9|9Q~*q!=39WuiQ z=n0C()n{<9-8FDib!HtzTZ%%}`R^)8#ZYys7G&c0eN`raMxT()go!W$sGM(6`x>D8 z+WvnlsZ$R(O}yaRBB$&LnilleS{#-*B`6x}(OXJr{#A*hugb=zHIgx5-x#u>G(H&< zVsnyC*Jyujug21M$-WAR78JE^A_~Z9PskYY8l=DvAQ`SxHz?P4PSc)ZsB1Px``eu+_gyBf& zG9fffsmL4j>&Wq;m!vYnp9jX8*KiX-MLr<1g~%e*cuQK@7erl3KmNP?ke1Z_aCA_R zpwodFo;FX$2iRY}1Sl80?NU>h4iv>`v#--}#fzlxrtM6Pu6k6afAK3)9#+{fW>1hO4MgP?|Q{Z zG-Q?nWiiYx=ietx(E*ja7?LA&+H%e8^!vR#k4WTZ^6|Y%sY1Qt*SGFn>Hfpk9q~1$ zh2=oBz3HJ7o_eIlUKIQ|T(3w#Y7kA_3b=*~StOXKHADaL{{XhrZD7Pel;68wqO+r` KLxa74#(w~r?5*qo diff --git a/app/src/main/res/drawable-xxhdpi/divet_lower_right_dark.png b/app/src/main/res/drawable-xxhdpi/divet_lower_right_dark.png deleted file mode 100644 index f07336f56b25a4bc598d07ec1609f85f983f0f8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K8j;D)bNCo5COB;Kc9T}VgSM56S zu6X{I>#MnEECm6ug!qSf`wx4z0cWv45H!Kx4Xgyb$!zs6%4L)9s=6S;OXk;vd$@?2>^Y=K3D(% diff --git a/app/src/main/res/drawable-xxhdpi/ic_account_box_dark.png b/app/src/main/res/drawable-xxhdpi/ic_account_box_dark.png deleted file mode 100644 index a95c8006c548d89c1fde98cf6fa78ee3422be346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E5$P)DsUQ%w}7)Plr)!H-z&+K)|F8r)|oxN_kQ*&73by7De zMMUBvLLmw*bmTGXfa#oc&g32PKL0EDK|*qdIbvCsWm%Rr%W>B3vQCFSY1gMsjpg$J z@-&E;W)WLloD`7f6B=rgpA7H@E$vJKxW`|#6miELP)Ac6?trgos_hQ=jiv_f0A(4# z02u@H*yb@Mt_@e>2|N7E4xmeg02x_8g>DuAAGm`2XCWW818U@uF$>tx40uZpIb%8A zX$AaX9*MC9dO88mkeGX}5%7(<*nl~{>jSJK4%^ZPC_4e3>I2+x0^HIE2%P})i31F9 z(+O}pae#e^8%}`T!~yn01}|a*UfQ2IF92x9_!wQ_vmI#cNIAYfRW2bTyG)f|S$nLq zL}9ok-H%l~WB>ygzyJn_IG{z7_ro=5aX^#>z$tsIQDKDwGO_|IR9It=Q;mQgo0MZ7 z>_f_I($fMMu*)g|;<$iSUNe|3;D{VArV=r42abK9b-baF`~b zMG;AOMZTm3XtRiT*dm=Y04J0XPg~~1KcInl+_rzfL$82G{s9YK0ayJ4#P5^<3}65| zQX0Sjf6&w*>#rVn+yON-^=bxRzgK?&Vg|0DsJ#T_ehq7%W76)J{qfhZEX%Si%d)J0 X1c@!_aauiu00000NkvXXu0mjfbBXsO diff --git a/app/src/main/res/drawable-xxhdpi/ic_account_box_light.png b/app/src/main/res/drawable-xxhdpi/ic_account_box_light.png deleted file mode 100644 index 67716eff3b274702a606558ca83b864207d3b3db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540 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 W^FGr_{kIbU diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 389a1906229..4325748b8f1 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -22,7 +22,6 @@ - @@ -51,7 +50,6 @@ - diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 2a63533952e..23b7b5f5dba 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -169,7 +169,6 @@ @color/device_link_item_background_dark ?colorAccent - @drawable/divet_lower_right_light @color/loki_darkest_gray #22ffffff @@ -182,7 +181,6 @@ @drawable/ic_image_dark @drawable/ic_movie_creation_dark @drawable/ic_volume_up_dark - @drawable/ic_account_box_dark @drawable/ic_attach_white_24dp @color/gray13 @color/white diff --git a/libsession/src/main/res/values/attrs.xml b/libsession/src/main/res/values/attrs.xml index 5588e25ece3..1bfeb023606 100644 --- a/libsession/src/main/res/values/attrs.xml +++ b/libsession/src/main/res/values/attrs.xml @@ -22,7 +22,6 @@ - @@ -43,7 +42,6 @@ - From 35ab959a17b0f49ce08c59b33c7b53b2c3a2e004 Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Thu, 15 Aug 2024 15:41:03 +1000 Subject: [PATCH 07/12] Clean up --- .../drawable-hdpi/ic_circle_fill_white_48dp.png | Bin 1723 -> 0 bytes .../res/drawable-hdpi/ic_contact_picture.png | Bin 1128 -> 0 bytes .../drawable-hdpi/ic_document_small_light.png | Bin 988 -> 0 bytes .../main/res/drawable-hdpi/ic_image_light.png | Bin 287 -> 0 bytes .../drawable-hdpi/ic_movie_creation_light.png | Bin 204 -> 0 bytes .../main/res/drawable-hdpi/ic_note_to_self.png | Bin 274 -> 0 bytes .../res/drawable-hdpi/ic_photo_camera_light.png | Bin 407 -> 0 bytes .../drawable-hdpi/ic_unlocked_white_18dp.png | Bin 814 -> 0 bytes .../main/res/drawable-hdpi/ic_video_light.png | Bin 862 -> 0 bytes .../res/drawable-hdpi/ic_volume_up_light.png | Bin 367 -> 0 bytes .../main/res/drawable-hdpi/ic_warning_light.png | Bin 347 -> 0 bytes .../drawable-mdpi/ic_circle_fill_white_48dp.png | Bin 1055 -> 0 bytes .../res/drawable-mdpi/ic_contact_picture.png | Bin 781 -> 0 bytes .../drawable-mdpi/ic_document_small_light.png | Bin 557 -> 0 bytes .../main/res/drawable-mdpi/ic_image_light.png | Bin 219 -> 0 bytes .../drawable-mdpi/ic_movie_creation_light.png | Bin 255 -> 0 bytes .../main/res/drawable-mdpi/ic_note_to_self.png | Bin 191 -> 0 bytes .../res/drawable-mdpi/ic_photo_camera_light.png | Bin 319 -> 0 bytes .../drawable-mdpi/ic_unlocked_white_18dp.png | Bin 543 -> 0 bytes .../main/res/drawable-mdpi/ic_video_light.png | Bin 542 -> 0 bytes .../res/drawable-mdpi/ic_volume_up_light.png | Bin 295 -> 0 bytes .../main/res/drawable-mdpi/ic_warning_light.png | Bin 290 -> 0 bytes .../ic_add_white_original_24dp.png | Bin 198 -> 0 bytes .../ic_circle_fill_white_48dp.png | Bin 2365 -> 0 bytes .../res/drawable-xhdpi/ic_contact_picture.png | Bin 1566 -> 0 bytes .../drawable-xhdpi/ic_document_small_light.png | Bin 1299 -> 0 bytes .../main/res/drawable-xhdpi/ic_image_light.png | Bin 363 -> 0 bytes .../drawable-xhdpi/ic_movie_creation_light.png | Bin 387 -> 0 bytes .../main/res/drawable-xhdpi/ic_note_to_self.png | Bin 282 -> 0 bytes .../drawable-xhdpi/ic_photo_camera_light.png | Bin 584 -> 0 bytes .../drawable-xhdpi/ic_unlocked_white_18dp.png | Bin 1112 -> 0 bytes .../main/res/drawable-xhdpi/ic_video_light.png | Bin 1075 -> 0 bytes .../res/drawable-xhdpi/ic_volume_up_light.png | Bin 538 -> 0 bytes .../res/drawable-xhdpi/ic_warning_light.png | Bin 504 -> 0 bytes .../ic_circle_fill_white_48dp.png | Bin 1682 -> 0 bytes .../res/drawable-xxhdpi/ic_contact_picture.png | Bin 2111 -> 0 bytes .../drawable-xxhdpi/ic_document_small_light.png | Bin 2107 -> 0 bytes .../main/res/drawable-xxhdpi/ic_image_light.png | Bin 494 -> 0 bytes .../drawable-xxhdpi/ic_movie_creation_light.png | Bin 346 -> 0 bytes .../res/drawable-xxhdpi/ic_note_to_self.png | Bin 452 -> 0 bytes .../drawable-xxhdpi/ic_photo_camera_light.png | Bin 785 -> 0 bytes .../drawable-xxhdpi/ic_unlocked_white_18dp.png | Bin 1679 -> 0 bytes .../main/res/drawable-xxhdpi/ic_video_light.png | Bin 1751 -> 0 bytes .../res/drawable-xxhdpi/ic_volume_up_light.png | Bin 720 -> 0 bytes .../res/drawable-xxhdpi/ic_warning_light.png | Bin 563 -> 0 bytes .../ic_circle_fill_white_48dp.png | Bin 2339 -> 0 bytes .../ic_document_small_light.png | Bin 3020 -> 0 bytes .../res/drawable-xxxhdpi/ic_note_to_self.png | Bin 545 -> 0 bytes .../drawable-xxxhdpi/ic_photo_camera_light.png | Bin 1851 -> 0 bytes .../drawable-xxxhdpi/ic_unlocked_white_18dp.png | Bin 650 -> 0 bytes .../res/drawable-xxxhdpi/oxen_dark_mode.png | Bin 14333 -> 0 bytes .../res/drawable/circle_tintable_4dp_inset.xml | 4 ---- 52 files changed, 4 deletions(-) delete mode 100644 app/src/main/res/drawable-hdpi/ic_circle_fill_white_48dp.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_contact_picture.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_document_small_light.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_image_light.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_movie_creation_light.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_note_to_self.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_photo_camera_light.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_unlocked_white_18dp.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_video_light.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_volume_up_light.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_warning_light.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_circle_fill_white_48dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_contact_picture.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_document_small_light.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_image_light.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_movie_creation_light.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_note_to_self.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_photo_camera_light.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_unlocked_white_18dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_video_light.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_volume_up_light.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_warning_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_add_white_original_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_circle_fill_white_48dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_contact_picture.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_document_small_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_image_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_movie_creation_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_note_to_self.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_photo_camera_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_unlocked_white_18dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_video_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_volume_up_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_warning_light.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_circle_fill_white_48dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_contact_picture.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_document_small_light.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_image_light.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_movie_creation_light.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_note_to_self.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_photo_camera_light.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_unlocked_white_18dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_video_light.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_volume_up_light.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_warning_light.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_circle_fill_white_48dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_document_small_light.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_note_to_self.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_photo_camera_light.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_unlocked_white_18dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/oxen_dark_mode.png delete mode 100644 app/src/main/res/drawable/circle_tintable_4dp_inset.xml diff --git a/app/src/main/res/drawable-hdpi/ic_circle_fill_white_48dp.png b/app/src/main/res/drawable-hdpi/ic_circle_fill_white_48dp.png deleted file mode 100644 index a417946f2acf524ad1da066795fa619d57e8baf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1723 zcmV;s21NOZP)OnzqLk|ursDlRu z$8}sl1zQ~4PHxZ&?lU;3pmtZM{~7Toe?~=QMlMyAnNtrQT|{R^{CN2zGUCV2nop91 zrU+wp(gw60Q-KOF6{rA{5(w?iF=ryKow3(W#MYTHP15KjIyeaYe}konu+Chy^kL3k zGjiicEf6}q?vx$JJd1f6^Caf+%+1VA%tP!oe>3+pe`c;Qzhr*STxR|d(MDq!l|Zi1 zr!cQ%E-}w!9$K;9KbapfUtzvTMz~O$ji70PFqCwKS1@lRBg{rsj%xz+6{M)L$R;HNrJpm&QBHrGPE9*pvs! zUBjGmH}fjdpN!l4o6c%8C*~ z;67wT<{iu(9ve%ejzH2d=9UMUH{0?xO6QBFg>m5ug?Vk>mOaY6oy=TSS){50 zNrOi-pJiT1>7*;eDWTB`<3hJ3-iw>Gn|U?!H>xO76@jFoW63-{PN(sDO$Z@x+QYn@ z`4d$Tsj3HIo_U@8;*47u7YX@Ax`es6Y-MHlH)wc)`8>5#96;Lw+hF4v%;(6=m!)hh zBhajE7!&dZ)J|~(K9MeBK0xWyHLjw_Atnu8$9$67Esln7xLwP9iX!Ku7=ffBY$`t? zv#HdJzqX1akPeE?*aR;!zoQ6|$_%mlnMY7|_1boE0I^dxv*^Qp(O)j`AW;}kfY->l zsa_p-K_Ea6HHd`i;bP{SRNzIiL+k_Q*^~+-aMk`bqCL(7Fb z)XpR0MMOC|SZT7P_o}D+uuv`C%On|*h zkMvkbpKuUxBAFAEA^1E<%5XFTab!a4!|)PFf6%wX$n+H$(j)IFwn+Zdhdx01gTA4U zi>f>WpFlDePj)Kn8+5;CKHiBb#2DJ=3<(*M}ceVm{L(l?~rcvsRP zfv}0&KMIRl3iQ>RtQ8UnL3vqv_iYs|(EUPR*L)Y{%|R=wl0Ht9n?Gb51(0-$;un(vmv#X_D%#D< zYV)o@c~{`u4M?AIZ*-ABQZce1kfg2OvgwisxtSe1nQu|VjV_Zwg}5zNoLx_#`kl-v z#`iH_jtQ8Fw;&_yHX2U#ZSzpmo-UtnB_mGMjg5^cO5!7O`yL|`;2uymF{y3v