From fec13ba72ebbd2fdf69e7044b8e357ea6e13e489 Mon Sep 17 00:00:00 2001 From: Ryan ZHAO Date: Tue, 23 Feb 2021 15:56:42 +1100 Subject: [PATCH] clean up unused code --- app/src/main/AndroidManifest.xml | 5 - .../conversation/ConversationActivity.java | 23 --- .../conversation/ConversationFragment.java | 3 - .../securesms/mms/AttachmentManager.java | 8 +- .../securesms/mms/PartAuthority.java | 14 -- .../preferences/ChatsPreferenceFragment.java | 25 --- .../NotificationsPreferenceFragment.java | 6 +- .../profiles/GroupShareProfileView.java | 69 ------- .../securesms/profiles/UnknownSenderView.java | 84 -------- .../DeprecatedPersistentBlobProvider.java | 193 ------------------ .../securesms/providers/MmsBodyProvider.java | 142 ------------- .../org/thoughtcrime/securesms/qr/QrCode.java | 47 ----- .../main/res/layout/conversation_activity.xml | 7 - ...tion_activity_group_share_profile_stub.xml | 6 - 14 files changed, 3 insertions(+), 629 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/profiles/GroupShareProfileView.java delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/profiles/UnknownSenderView.java delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/providers/DeprecatedPersistentBlobProvider.java delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/providers/MmsBodyProvider.java delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/qr/QrCode.java delete mode 100644 app/src/main/res/layout/conversation_activity_group_share_profile_stub.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5d22209a7a..f353d4a2a9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -414,11 +414,6 @@ android:authorities="network.loki.provider.securesms" android:exported="false" android:grantUriPermissions="true" /> - groupShareProfileView; private TypingStatusTextWatcher typingTextWatcher; private MentionTextWatcher mentionTextWatcher; private ConversationSearchBottomBar searchNav; @@ -458,7 +456,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity updateProfilePicture(); updateSubtitleTextView(); updateInputUI(recipient); - setGroupShareProfileReminder(recipient); ApplicationContext.getInstance(this).messageNotifier.setVisibleThread(threadId); markThreadAsRead(); @@ -1294,7 +1291,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity unblockButton = ViewUtil.findById(this, R.id.unblock_button); makeDefaultSmsButton = ViewUtil.findById(this, R.id.make_default_sms_button); container = ViewUtil.findById(this, R.id.layout_container); - groupShareProfileView = ViewUtil.findStubById(this, R.id.group_share_profile_view_stub); quickAttachmentToggle = ViewUtil.findById(this, R.id.quick_attachment_toggle); inlineAttachmentToggle = ViewUtil.findById(this, R.id.inline_attachment_container); inputPanel = ViewUtil.findById(this, R.id.bottom_panel); @@ -1432,9 +1428,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity updateTitleTextView(recipient); updateProfilePicture(); updateSubtitleTextView(); -// titleView.setVerified(identityRecords.isVerified()); updateInputUI(recipient); - setGroupShareProfileReminder(recipient); initializeSecurity(true, isDefaultSms); if (searchViewItem == null || !searchViewItem.isActionViewExpanded()) { @@ -1619,14 +1613,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity unblockButton.setVisibility(View.VISIBLE); inputPanel.setVisibility(View.GONE); makeDefaultSmsButton.setVisibility(View.GONE); -// } else if (!isSecureText && isPushGroupConversation()) { -// unblockButton.setVisibility(View.GONE); -// inputPanel.setVisibility(View.GONE); -// makeDefaultSmsButton.setVisibility(View.GONE); -// } else if (!isSecureText && !isDefaultSms) { -// unblockButton.setVisibility(View.GONE); -// inputPanel.setVisibility(View.GONE); -// makeDefaultSmsButton.setVisibility(View.GONE); } else { inputPanel.setVisibility(View.VISIBLE); unblockButton.setVisibility(View.GONE); @@ -1634,15 +1620,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } } - private void setGroupShareProfileReminder(@NonNull Recipient recipient) { - if (recipient.isPushGroupRecipient() && !recipient.isProfileSharing() && !recipient.getAddress().isOpenGroup()) { - groupShareProfileView.get().setRecipient(recipient); - groupShareProfileView.get().setVisibility(View.GONE); // Loki - Always hide for now - } else if (groupShareProfileView.resolved()) { - groupShareProfileView.get().setVisibility(View.GONE); - } - } - private void initializeMediaKeyboardProviders(@NonNull MediaKeyboard mediaKeyboard) { boolean isSystemEmojiPreferred = TextSecurePreferences.isSystemEmojiPreferred(this); if (!isSystemEmojiPreferred) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index fe559e7443..773ea2d97e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -81,7 +81,6 @@ import org.thoughtcrime.securesms.mms.OutgoingMediaMessage; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.permissions.Permissions; -import org.thoughtcrime.securesms.profiles.UnknownSenderView; import org.session.libsession.messaging.threads.recipients.Recipient; import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.sms.OutgoingTextMessage; @@ -144,7 +143,6 @@ public class ConversationFragment extends Fragment private ViewSwitcher topLoadMoreView; private ViewSwitcher bottomLoadMoreView; private ConversationTypingView typingView; - private UnknownSenderView unknownSenderView; private View composeDivider; private View scrollToBottomButton; private TextView scrollDateHeader; @@ -253,7 +251,6 @@ public class ConversationFragment extends Fragment this.lastSeen = this.getActivity().getIntent().getLongExtra(ConversationActivity.LAST_SEEN_EXTRA, -1); this.startingPosition = this.getActivity().getIntent().getIntExtra(ConversationActivity.STARTING_POSITION_EXTRA, -1); this.firstLoad = true; - this.unknownSenderView = new UnknownSenderView(getActivity(), recipient, threadId); OnScrollListener scrollListener = new ConversationScrollListener(getActivity()); list.addOnScrollListener(scrollListener); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java index 27d3a172dd..123f3bc5e1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -48,7 +48,6 @@ import org.session.libsignal.utilities.logging.Log; import org.thoughtcrime.securesms.mediasend.MediaSendActivity; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.providers.BlobProvider; -import org.thoughtcrime.securesms.providers.DeprecatedPersistentBlobProvider; import org.session.libsignal.utilities.externalstorage.ExternalStorageUtil; import org.thoughtcrime.securesms.util.FileProviderUtil; import org.thoughtcrime.securesms.util.MediaUtil; @@ -158,16 +157,13 @@ public class AttachmentManager { } private void cleanup(final @Nullable Uri uri) { - if (uri != null && DeprecatedPersistentBlobProvider.isAuthority(context, uri)) { - Log.d(TAG, "cleaning up " + uri); - DeprecatedPersistentBlobProvider.getInstance(context).delete(context, uri); - } else if (uri != null && BlobProvider.isAuthority(uri)) { + if (uri != null && BlobProvider.isAuthority(uri)) { BlobProvider.getInstance().delete(context, uri); } } private void markGarbage(@Nullable Uri uri) { - if (uri != null && (DeprecatedPersistentBlobProvider.isAuthority(context, uri) || BlobProvider.isAuthority(uri))) { + if (uri != null && BlobProvider.isAuthority(uri)) { Log.d(TAG, "Marking garbage that needs cleaning: " + uri); garbage.add(uri); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java b/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java index 0169e57c0a..78397b47c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java @@ -11,7 +11,6 @@ import org.session.libsession.messaging.sending_receiving.attachments.Attachment import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.providers.BlobProvider; -import org.thoughtcrime.securesms.providers.DeprecatedPersistentBlobProvider; import org.thoughtcrime.securesms.providers.PartProvider; import java.io.IOException; @@ -39,8 +38,6 @@ public class PartAuthority { uriMatcher.addURI("network.loki.provider.securesms", "part/*/#", PART_ROW); uriMatcher.addURI("network.loki.provider.securesms", "thumb/*/#", THUMB_ROW); uriMatcher.addURI("network.loki.provider.securesms", "sticker/#", STICKER_ROW); - uriMatcher.addURI(DeprecatedPersistentBlobProvider.AUTHORITY, DeprecatedPersistentBlobProvider.EXPECTED_PATH_OLD, PERSISTENT_ROW); - uriMatcher.addURI(DeprecatedPersistentBlobProvider.AUTHORITY, DeprecatedPersistentBlobProvider.EXPECTED_PATH_NEW, PERSISTENT_ROW); uriMatcher.addURI(BlobProvider.AUTHORITY, BlobProvider.PATH, BLOB_ROW); } @@ -52,7 +49,6 @@ public class PartAuthority { switch (match) { case PART_ROW: return DatabaseFactory.getAttachmentDatabase(context).getAttachmentStream(new PartUriParser(uri).getPartId(), 0); case THUMB_ROW: return DatabaseFactory.getAttachmentDatabase(context).getThumbnailStream(new PartUriParser(uri).getPartId()); - case PERSISTENT_ROW: return DeprecatedPersistentBlobProvider.getInstance(context).getStream(context, ContentUris.parseId(uri)); case BLOB_ROW: return BlobProvider.getInstance().getStream(context, uri); default: return context.getContentResolver().openInputStream(uri); } @@ -71,8 +67,6 @@ public class PartAuthority { if (attachment != null) return attachment.getFileName(); else return null; - case PERSISTENT_ROW: - return DeprecatedPersistentBlobProvider.getFileName(context, uri); case BLOB_ROW: return BlobProvider.getFileName(uri); default: @@ -90,8 +84,6 @@ public class PartAuthority { if (attachment != null) return attachment.getSize(); else return null; - case PERSISTENT_ROW: - return DeprecatedPersistentBlobProvider.getFileSize(context, uri); case BLOB_ROW: return BlobProvider.getFileSize(uri); default: @@ -109,8 +101,6 @@ public class PartAuthority { if (attachment != null) return attachment.getContentType(); else return null; - case PERSISTENT_ROW: - return DeprecatedPersistentBlobProvider.getMimeType(context, uri); case BLOB_ROW: return BlobProvider.getMimeType(uri); default: @@ -133,10 +123,6 @@ public class PartAuthority { return ContentUris.withAppendedId(uri, attachmentId.getRowId()); } - public static Uri getStickerUri(long id) { - return ContentUris.withAppendedId(STICKER_CONTENT_URI, id); - } - public static boolean isLocalUri(final @NonNull Uri uri) { int match = uriMatcher.match(uri); switch (match) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java index 250341e791..97587ac922 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java @@ -46,17 +46,6 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { public void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); - /* - findPreference(TextSecurePreferences.MEDIA_DOWNLOAD_MOBILE_PREF) - .setOnPreferenceChangeListener(new MediaDownloadChangeListener()); - findPreference(TextSecurePreferences.MEDIA_DOWNLOAD_WIFI_PREF) - .setOnPreferenceChangeListener(new MediaDownloadChangeListener()); - findPreference(TextSecurePreferences.MEDIA_DOWNLOAD_ROAMING_PREF) - .setOnPreferenceChangeListener(new MediaDownloadChangeListener()); - findPreference(TextSecurePreferences.MESSAGE_BODY_TEXT_SIZE_PREF) - .setOnPreferenceChangeListener(new ListSummaryListener()); - */ - findPreference(TextSecurePreferences.THREAD_TRIM_NOW) .setOnPreferenceClickListener(new TrimNowClickListener()); findPreference(TextSecurePreferences.THREAD_TRIM_LENGTH) @@ -67,8 +56,6 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { findPreference(TextSecurePreferences.BACKUP_NOW) .setOnPreferenceClickListener(new BackupCreateListener()); -// initializeListSummary((ListPreference) findPreference(TextSecurePreferences.MESSAGE_BODY_TEXT_SIZE_PREF)); - backupDirSelector = new BackupDirSelector(this); EventBus.getDefault().register(this); @@ -82,7 +69,6 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { @Override public void onResume() { super.onResume(); - setMediaDownloadSummaries(); setBackupSummary(); } @@ -132,17 +118,6 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { BackupUtil.getLastBackupTimeString(getContext(), Locale.getDefault()))); } - private void setMediaDownloadSummaries() { - /* - findPreference(TextSecurePreferences.MEDIA_DOWNLOAD_MOBILE_PREF) - .setSummary(getSummaryForMediaPreference(TextSecurePreferences.getMobileMediaDownloadAllowed(getActivity()))); - findPreference(TextSecurePreferences.MEDIA_DOWNLOAD_WIFI_PREF) - .setSummary(getSummaryForMediaPreference(TextSecurePreferences.getWifiMediaDownloadAllowed(getActivity()))); - findPreference(TextSecurePreferences.MEDIA_DOWNLOAD_ROAMING_PREF) - .setSummary(getSummaryForMediaPreference(TextSecurePreferences.getRoamingMediaDownloadAllowed(getActivity()))); - */ - } - private CharSequence getSummaryForMediaPreference(Set allowedNetworks) { String[] keys = getResources().getStringArray(R.array.pref_media_download_entries); String[] values = getResources().getStringArray(R.array.pref_media_download_values); diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.java index c8ab0292b4..6ceb050693 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.java @@ -122,15 +122,11 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme TextSecurePreferences.removeNotificationRingtone(getContext()); } else { uri = uri == null ? Uri.EMPTY : uri; - NotificationChannels.updateMessageRingtone(getContext(), uri ); + NotificationChannels.updateMessageRingtone(getContext(), uri); TextSecurePreferences.setNotificationRingtone(getContext(), uri.toString()); } initializeRingtoneSummary(findPreference(TextSecurePreferences.RINGTONE_PREF)); - } else if (requestCode == 2 && resultCode == RESULT_OK && data != null) { - Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); - -// initializeCallRingtoneSummary(findPreference(TextSecurePreferences.CALL_RINGTONE_PREF)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/GroupShareProfileView.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/GroupShareProfileView.java deleted file mode 100644 index d535fb3f96..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/GroupShareProfileView.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.thoughtcrime.securesms.profiles; - - -import android.content.Context; -import android.os.Build; -import androidx.annotation.AttrRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; -import androidx.annotation.StyleRes; -import androidx.appcompat.app.AlertDialog; -import android.util.AttributeSet; -import android.view.View; -import android.widget.FrameLayout; - -import network.loki.messenger.R; -import org.thoughtcrime.securesms.database.DatabaseFactory; -import org.session.libsession.messaging.threads.recipients.Recipient; -import org.session.libsession.utilities.ViewUtil; - -public class GroupShareProfileView extends FrameLayout { - - private View container; - private @Nullable Recipient recipient; - - public GroupShareProfileView(@NonNull Context context) { - super(context); - initialize(); - } - - public GroupShareProfileView(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - initialize(); - } - - public GroupShareProfileView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { - super(context, attrs, defStyleAttr); - initialize(); - } - - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - public GroupShareProfileView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - initialize(); - } - - private void initialize() { - inflate(getContext(), R.layout.profile_group_share_view, this); - - this.container = ViewUtil.findById(this, R.id.container); - this.container.setOnClickListener(view -> { - if (this.recipient != null) { - new AlertDialog.Builder(getContext()) - .setIconAttribute(R.attr.dialog_info_icon) - .setTitle(R.string.GroupShareProfileView_share_your_profile_name_and_photo_with_this_group) - .setMessage(R.string.GroupShareProfileView_do_you_want_to_make_your_profile_name_and_photo_visible_to_all_current_and_future_members_of_this_group) - .setPositiveButton(R.string.GroupShareProfileView_make_visible, (dialog, which) -> { - DatabaseFactory.getRecipientDatabase(getContext()).setProfileSharing(recipient, true); - }) - .setNegativeButton(android.R.string.cancel, null) - .show(); - } - }); - } - - public void setRecipient(@NonNull Recipient recipient) { - this.recipient = recipient; - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/UnknownSenderView.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/UnknownSenderView.java deleted file mode 100644 index e69fbd819e..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/UnknownSenderView.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.thoughtcrime.securesms.profiles; - -import android.content.Context; -import android.os.AsyncTask; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; -import android.view.View; -import android.widget.FrameLayout; - -import network.loki.messenger.R; -import org.thoughtcrime.securesms.database.DatabaseFactory; -import org.session.libsession.messaging.threads.recipients.Recipient; -import org.session.libsession.messaging.threads.recipients.RecipientExporter; -import org.session.libsession.utilities.ViewUtil; - -public class UnknownSenderView extends FrameLayout { - - private final @NonNull Recipient recipient; - private final long threadId; - - public UnknownSenderView(@NonNull Context context, @NonNull Recipient recipient, long threadId) { - super(context); - this.recipient = recipient; - this.threadId = threadId; - - inflate(context, R.layout.unknown_sender_view, this); - setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); - - View block = ViewUtil.findById(this, R.id.block); - View add = ViewUtil.findById(this, R.id.add_to_contacts); - View profileAccess = ViewUtil.findById(this, R.id.share_profile); - - block.setOnClickListener(v -> handleBlock()); - add.setOnClickListener(v -> handleAdd()); - profileAccess.setOnClickListener(v -> handleProfileAccess()); - } - - private void handleBlock() { - final Context context = getContext(); - - new AlertDialog.Builder(getContext()) - .setIconAttribute(R.attr.dialog_alert_icon) - .setTitle(getContext().getString(R.string.UnknownSenderView_block_s, recipient.toShortString())) - .setMessage(R.string.UnknownSenderView_blocked_contacts_will_no_longer_be_able_to_send_you_messages_or_call_you) - .setPositiveButton(R.string.UnknownSenderView_block, (dialog, which) -> { - new AsyncTask() { - @Override - protected Void doInBackground(Void... params) { - DatabaseFactory.getRecipientDatabase(context).setBlocked(recipient, true); - if (threadId != -1) DatabaseFactory.getThreadDatabase(context).setHasSent(threadId, true); - return null; - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - }) - .setNegativeButton(android.R.string.cancel, null) - .show(); - } - - private void handleAdd() { - getContext().startActivity(RecipientExporter.export(recipient).asAddContactIntent()); - if (threadId != -1) DatabaseFactory.getThreadDatabase(getContext()).setHasSent(threadId, true); - } - - private void handleProfileAccess() { - final Context context = getContext(); - - new AlertDialog.Builder(context) - .setIconAttribute(R.attr.dialog_info_icon) - .setTitle(context.getString(R.string.UnknownSenderView_share_profile_with_s, recipient.toShortString())) - .setMessage(R.string.UnknownSenderView_the_easiest_way_to_share_your_profile_information_is_to_add_the_sender_to_your_contacts) - .setPositiveButton(R.string.UnknownSenderView_share_profile, (dialog, which) -> { - new AsyncTask() { - @Override - protected Void doInBackground(Void... params) { - DatabaseFactory.getRecipientDatabase(context).setProfileSharing(recipient, true); - if (threadId != -1) DatabaseFactory.getThreadDatabase(context).setHasSent(threadId, true); - return null; - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - }) - .setNegativeButton(android.R.string.cancel, null) - .show(); - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/providers/DeprecatedPersistentBlobProvider.java b/app/src/main/java/org/thoughtcrime/securesms/providers/DeprecatedPersistentBlobProvider.java deleted file mode 100644 index 3ce75bcf00..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/providers/DeprecatedPersistentBlobProvider.java +++ /dev/null @@ -1,193 +0,0 @@ -package org.thoughtcrime.securesms.providers; - -import android.content.ContentUris; -import android.content.Context; -import android.content.UriMatcher; -import android.net.Uri; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import android.webkit.MimeTypeMap; - -import org.thoughtcrime.securesms.crypto.AttachmentSecret; -import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider; -import org.thoughtcrime.securesms.crypto.ClassicDecryptingPartInputStream; -import org.thoughtcrime.securesms.crypto.ModernDecryptingPartInputStream; -import org.session.libsignal.utilities.logging.Log; -import org.thoughtcrime.securesms.util.FileProviderUtil; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; - -/** - * @deprecated Use {@link BlobProvider} instead. Keeping in read-only mode due to the number of - * legacy URIs it handles. Given that this was largely used for drafts, and that files were stored - * in the cache directory, it's possible that we could remove this class after a reasonable amount - * of time has passed. - */ -@Deprecated -public class DeprecatedPersistentBlobProvider { - - private static final String TAG = DeprecatedPersistentBlobProvider.class.getSimpleName(); - - private static final String URI_STRING = "content://network.loki.provider.securesms/capture-new"; - public static final Uri CONTENT_URI = Uri.parse(URI_STRING); - public static final String AUTHORITY = "org.thoughtcrime.securesms"; - public static final String EXPECTED_PATH_OLD = "capture/*/*/#"; - public static final String EXPECTED_PATH_NEW = "capture-new/*/*/*/*/#"; - - private static final int MIMETYPE_PATH_SEGMENT = 1; - private static final int FILENAME_PATH_SEGMENT = 2; - private static final int FILESIZE_PATH_SEGMENT = 3; - - private static final String BLOB_EXTENSION = "blob"; - private static final int MATCH_OLD = 1; - private static final int MATCH_NEW = 2; - - private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH) {{ - addURI(AUTHORITY, EXPECTED_PATH_OLD, MATCH_OLD); - addURI(AUTHORITY, EXPECTED_PATH_NEW, MATCH_NEW); - }}; - - private static volatile DeprecatedPersistentBlobProvider instance; - - /** - * @deprecated Use {@link BlobProvider} instead. - */ - @Deprecated - public static DeprecatedPersistentBlobProvider getInstance(Context context) { - if (instance == null) { - synchronized (DeprecatedPersistentBlobProvider.class) { - if (instance == null) { - instance = new DeprecatedPersistentBlobProvider(context); - } - } - } - return instance; - } - - private final AttachmentSecret attachmentSecret; - - private DeprecatedPersistentBlobProvider(@NonNull Context context) { - this.attachmentSecret = AttachmentSecretProvider.getInstance(context).getOrCreateAttachmentSecret(); - } - - public Uri createForExternal(@NonNull Context context, @NonNull String mimeType) throws IOException { - File target = new File(getExternalDir(context), String.valueOf(System.currentTimeMillis()) + "." + getExtensionFromMimeType(mimeType)); - return FileProviderUtil.getUriFor(context, target); - } - - public boolean delete(@NonNull Context context, @NonNull Uri uri) { - switch (MATCHER.match(uri)) { - case MATCH_OLD: - case MATCH_NEW: - long id = ContentUris.parseId(uri); - return getFile(context, ContentUris.parseId(uri)).file.delete(); - } - - //noinspection SimplifiableIfStatement - if (isExternalBlobUri(context, uri)) { - return FileProviderUtil.delete(context, uri); - } - - return false; - } - - public @NonNull InputStream getStream(@NonNull Context context, long id) throws IOException { - FileData fileData = getFile(context, id); - - if (fileData.modern) return ModernDecryptingPartInputStream.createFor(attachmentSecret, fileData.file, 0); - else return ClassicDecryptingPartInputStream.createFor(attachmentSecret, fileData.file); - } - - private FileData getFile(@NonNull Context context, long id) { - File legacy = getLegacyFile(context, id); - File cache = getCacheFile(context, id); - File modernCache = getModernCacheFile(context, id); - - if (legacy.exists()) return new FileData(legacy, false); - else if (cache.exists()) return new FileData(cache, false); - else return new FileData(modernCache, true); - } - - private File getLegacyFile(@NonNull Context context, long id) { - return new File(context.getDir("captures", Context.MODE_PRIVATE), id + "." + BLOB_EXTENSION); - } - - private File getCacheFile(@NonNull Context context, long id) { - return new File(context.getCacheDir(), "capture-" + id + "." + BLOB_EXTENSION); - } - - private File getModernCacheFile(@NonNull Context context, long id) { - return new File(context.getCacheDir(), "capture-m-" + id + "." + BLOB_EXTENSION); - } - - public static @Nullable String getMimeType(@NonNull Context context, @NonNull Uri persistentBlobUri) { - if (!isAuthority(context, persistentBlobUri)) return null; - return isExternalBlobUri(context, persistentBlobUri) - ? getMimeTypeFromExtension(persistentBlobUri) - : persistentBlobUri.getPathSegments().get(MIMETYPE_PATH_SEGMENT); - } - - public static @Nullable String getFileName(@NonNull Context context, @NonNull Uri persistentBlobUri) { - if (!isAuthority(context, persistentBlobUri)) return null; - if (isExternalBlobUri(context, persistentBlobUri)) return null; - if (MATCHER.match(persistentBlobUri) == MATCH_OLD) return null; - - return persistentBlobUri.getPathSegments().get(FILENAME_PATH_SEGMENT); - } - - public static @Nullable Long getFileSize(@NonNull Context context, Uri persistentBlobUri) { - if (!isAuthority(context, persistentBlobUri)) return null; - if (isExternalBlobUri(context, persistentBlobUri)) return null; - if (MATCHER.match(persistentBlobUri) == MATCH_OLD) return null; - - try { - return Long.valueOf(persistentBlobUri.getPathSegments().get(FILESIZE_PATH_SEGMENT)); - } catch (NumberFormatException e) { - Log.w(TAG, e); - return null; - } - } - - private static @NonNull String getExtensionFromMimeType(String mimeType) { - final String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType); - return extension != null ? extension : BLOB_EXTENSION; - } - - private static @NonNull String getMimeTypeFromExtension(@NonNull Uri uri) { - final String mimeType = MimeTypeMap.getSingleton() - .getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(uri.toString())); - return mimeType != null ? mimeType : "application/octet-stream"; - } - - private static @NonNull File getExternalDir(Context context) throws IOException { - final File externalDir = context.getExternalCacheDir(); - if (externalDir == null) throw new IOException("no external files directory"); - return externalDir; - } - - public static boolean isAuthority(@NonNull Context context, @NonNull Uri uri) { - int matchResult = MATCHER.match(uri); - return matchResult == MATCH_NEW || matchResult == MATCH_OLD || isExternalBlobUri(context, uri); - } - - private static boolean isExternalBlobUri(@NonNull Context context, @NonNull Uri uri) { - try { - return uri.getPath().startsWith(getExternalDir(context).getAbsolutePath()) || FileProviderUtil.isAuthority(uri); - } catch (IOException ioe) { - Log.w(TAG, "Failed to determine if it's an external blob URI.", ioe); - return false; - } - } - - private static class FileData { - private final File file; - private final boolean modern; - - private FileData(File file, boolean modern) { - this.file = file; - this.modern = modern; - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/providers/MmsBodyProvider.java b/app/src/main/java/org/thoughtcrime/securesms/providers/MmsBodyProvider.java deleted file mode 100644 index 373648e2b6..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/providers/MmsBodyProvider.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * Copyright (C) 2015 Open Whisper Systems - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.thoughtcrime.securesms.providers; - -import android.content.ContentProvider; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.Context; -import android.content.UriMatcher; -import android.database.Cursor; -import android.net.Uri; -import android.os.ParcelFileDescriptor; -import androidx.annotation.NonNull; - -import org.session.libsignal.utilities.logging.Log; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.InputStream; -import java.io.OutputStream; - -public class MmsBodyProvider extends ContentProvider { - private static final String TAG = MmsBodyProvider.class.getSimpleName(); - private static final String CONTENT_URI_STRING = "content://network.loki.provider.securesms.mms/mms"; - public static final Uri CONTENT_URI = Uri.parse(CONTENT_URI_STRING); - private static final int SINGLE_ROW = 1; - - private static final UriMatcher uriMatcher; - - static { - uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); - uriMatcher.addURI("network.loki.provider.securesms.mms", "mms/#", SINGLE_ROW); - } - - @Override - public boolean onCreate() { - return true; - } - - - private File getFile(Uri uri) { - long id = Long.parseLong(uri.getPathSegments().get(1)); - return new File(getContext().getCacheDir(), id + ".mmsbody"); - } - - @Override - public ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode) throws FileNotFoundException { - Log.i(TAG, "openFile(" + uri + ", " + mode + ")"); - - switch (uriMatcher.match(uri)) { - case SINGLE_ROW: - Log.i(TAG, "Fetching message body for a single row..."); - File tmpFile = getFile(uri); - - final int fileMode; - switch (mode) { - case "w": fileMode = ParcelFileDescriptor.MODE_TRUNCATE | - ParcelFileDescriptor.MODE_CREATE | - ParcelFileDescriptor.MODE_WRITE_ONLY; break; - case "r": fileMode = ParcelFileDescriptor.MODE_READ_ONLY; break; - default: throw new IllegalArgumentException("requested file mode unsupported"); - } - - Log.i(TAG, "returning file " + tmpFile.getAbsolutePath()); - return ParcelFileDescriptor.open(tmpFile, fileMode); - } - - throw new FileNotFoundException("Request for bad message."); - } - - @Override - public int delete(@NonNull Uri uri, String arg1, String[] arg2) { - switch (uriMatcher.match(uri)) { - case SINGLE_ROW: - return getFile(uri).delete() ? 1 : 0; - } - return 0; - } - - @Override - public String getType(@NonNull Uri arg0) { - return null; - } - - @Override - public Uri insert(@NonNull Uri arg0, ContentValues arg1) { - return null; - } - - @Override - public Cursor query(@NonNull Uri arg0, String[] arg1, String arg2, String[] arg3, String arg4) { - return null; - } - - @Override - public int update(@NonNull Uri arg0, ContentValues arg1, String arg2, String[] arg3) { - return 0; - } - public static Pointer makeTemporaryPointer(Context context) { - return new Pointer(context, ContentUris.withAppendedId(MmsBodyProvider.CONTENT_URI, System.currentTimeMillis())); - } - - public static class Pointer { - private final Context context; - private final Uri uri; - - public Pointer(Context context, Uri uri) { - this.context = context; - this.uri = uri; - } - - public Uri getUri() { - return uri; - } - - public OutputStream getOutputStream() throws FileNotFoundException { - return context.getContentResolver().openOutputStream(uri, "w"); - } - - public InputStream getInputStream() throws FileNotFoundException { - return context.getContentResolver().openInputStream(uri); - } - - public void close() { - context.getContentResolver().delete(uri, null, null); - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/qr/QrCode.java b/app/src/main/java/org/thoughtcrime/securesms/qr/QrCode.java deleted file mode 100644 index c295b5fca4..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/qr/QrCode.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.thoughtcrime.securesms.qr; - -import android.graphics.Bitmap; -import android.graphics.Color; -import androidx.annotation.NonNull; - -import com.google.zxing.BarcodeFormat; -import com.google.zxing.EncodeHintType; -import com.google.zxing.WriterException; -import com.google.zxing.common.BitMatrix; -import com.google.zxing.qrcode.QRCodeWriter; - -import org.session.libsignal.utilities.logging.Log; - -import java.util.HashMap; - -public class QrCode { - - public static final String TAG = QrCode.class.getSimpleName(); - - public static @NonNull Bitmap create(String data) { - return create(data, 1024); - } - public static @NonNull Bitmap create(String data, int size) { return create(data, size, 2); } - public static @NonNull Bitmap create(String data, int size, int margin) { - try { - HashMap hintMap = new HashMap<>(); - hintMap.put(EncodeHintType.MARGIN, margin); - BitMatrix result = new QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, size, size, hintMap); - Bitmap bitmap = Bitmap.createBitmap(result.getWidth(), result.getHeight(), Bitmap.Config.ARGB_8888); - - for (int y = 0; y < result.getHeight(); y++) { - for (int x = 0; x < result.getWidth(); x++) { - if (result.get(x, y)) { - bitmap.setPixel(x, y, Color.BLACK); - } - } - } - - return bitmap; - } catch (WriterException e) { - Log.w(TAG, e); - return Bitmap.createBitmap(512, 512, Bitmap.Config.ARGB_8888); - } - } - -} diff --git a/app/src/main/res/layout/conversation_activity.xml b/app/src/main/res/layout/conversation_activity.xml index edf2b4b091..0b9ff3d077 100644 --- a/app/src/main/res/layout/conversation_activity.xml +++ b/app/src/main/res/layout/conversation_activity.xml @@ -134,13 +134,6 @@ android:background="?android:dividerHorizontal" android:elevation="1dp" /> - - -