Fix bug where media would not send after being selected in gallery.

This commit is contained in:
Alex Hart
2022-01-25 09:58:52 -04:00
parent 926f5b3cdf
commit 96844f046f
4 changed files with 34 additions and 32 deletions

View File

@@ -1150,20 +1150,20 @@ public class ConversationParentFragment extends Fragment
public void onAttachmentSelectorClicked(@NonNull AttachmentKeyboardButton button) {
switch (button) {
case GALLERY:
AttachmentManager.selectGallery(requireActivity(), MEDIA_SENDER, recipient.get(), composeText.getTextTrimmed(), sendButton.getSelectedTransport(), inputPanel.getQuote().isPresent());
AttachmentManager.selectGallery(this, MEDIA_SENDER, recipient.get(), composeText.getTextTrimmed(), sendButton.getSelectedTransport(), inputPanel.getQuote().isPresent());
break;
case FILE:
AttachmentManager.selectDocument(requireActivity(), PICK_DOCUMENT);
AttachmentManager.selectDocument(this, PICK_DOCUMENT);
break;
case CONTACT:
AttachmentManager.selectContactInfo(requireActivity(), PICK_CONTACT);
AttachmentManager.selectContactInfo(this, PICK_CONTACT);
break;
case LOCATION:
AttachmentManager.selectLocation(requireActivity(), PICK_LOCATION);
AttachmentManager.selectLocation(this, PICK_LOCATION);
break;
case PAYMENT:
if (recipient.get().hasProfileKeyCredential()) {
AttachmentManager.selectPayment(requireActivity(), recipient.getId());
AttachmentManager.selectPayment(this, recipient.getId());
} else {
CanNotSendPaymentDialog.show(requireActivity());
}

View File

@@ -107,7 +107,7 @@ class GifKeyboardPageFragment : LoggingFragment(R.layout.gif_keyboard_page_fragm
}
private fun openGifSearch() {
AttachmentManager.selectGif(requireActivity(), ConversationParentFragment.PICK_GIF, host.isMms())
AttachmentManager.selectGif(requireParentFragment(), ConversationParentFragment.PICK_GIF, host.isMms())
}
interface Host {

View File

@@ -17,6 +17,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
@@ -54,8 +55,8 @@ public final class PlacePickerActivity extends AppCompatActivity {
private AddressLookup addressLookup;
private GoogleMap googleMap;
public static void startActivityForResultAtCurrentLocation(@NonNull Activity activity, int requestCode) {
activity.startActivityForResult(new Intent(activity, PlacePickerActivity.class), requestCode);
public static void startActivityForResultAtCurrentLocation(@NonNull Fragment fragment, int requestCode) {
fragment.startActivityForResult(new Intent(fragment.requireActivity(), PlacePickerActivity.class), requestCode);
}
public static AddressData addressFromData(@NonNull Intent data) {

View File

@@ -36,6 +36,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import org.signal.core.util.ThreadUtil;
import org.signal.core.util.logging.Log;
@@ -369,51 +370,51 @@ public class AttachmentManager {
return deck;
}
public static void selectDocument(Activity activity, int requestCode) {
selectMediaType(activity, "*/*", null, requestCode);
public static void selectDocument(Fragment fragment, int requestCode) {
selectMediaType(fragment, "*/*", null, requestCode);
}
public static void selectGallery(Activity activity, int requestCode, @NonNull Recipient recipient, @NonNull CharSequence body, @NonNull TransportOption transport, boolean hasQuote) {
Permissions.with(activity)
public static void selectGallery(Fragment fragment, int requestCode, @NonNull Recipient recipient, @NonNull CharSequence body, @NonNull TransportOption transport, boolean hasQuote) {
Permissions.with(fragment)
.request(Manifest.permission.READ_EXTERNAL_STORAGE)
.ifNecessary()
.withPermanentDenialDialog(activity.getString(R.string.AttachmentManager_signal_requires_the_external_storage_permission_in_order_to_attach_photos_videos_or_audio))
.onAllGranted(() -> activity.startActivityForResult(MediaSelectionActivity.gallery(activity, transport, Collections.emptyList(), recipient.getId(), body, hasQuote), requestCode))
.withPermanentDenialDialog(fragment.getString(R.string.AttachmentManager_signal_requires_the_external_storage_permission_in_order_to_attach_photos_videos_or_audio))
.onAllGranted(() -> fragment.startActivityForResult(MediaSelectionActivity.gallery(fragment.requireContext(), transport, Collections.emptyList(), recipient.getId(), body, hasQuote), requestCode))
.execute();
}
public static void selectContactInfo(Activity activity, int requestCode) {
Permissions.with(activity)
public static void selectContactInfo(Fragment fragment, int requestCode) {
Permissions.with(fragment)
.request(Manifest.permission.READ_CONTACTS)
.ifNecessary()
.withPermanentDenialDialog(activity.getString(R.string.AttachmentManager_signal_requires_contacts_permission_in_order_to_attach_contact_information))
.withPermanentDenialDialog(fragment.getString(R.string.AttachmentManager_signal_requires_contacts_permission_in_order_to_attach_contact_information))
.onAllGranted(() -> {
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
activity.startActivityForResult(intent, requestCode);
fragment.startActivityForResult(intent, requestCode);
})
.execute();
}
public static void selectLocation(Activity activity, int requestCode) {
Permissions.with(activity)
public static void selectLocation(Fragment fragment, int requestCode) {
Permissions.with(fragment)
.request(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)
.ifNecessary()
.withPermanentDenialDialog(activity.getString(R.string.AttachmentManager_signal_requires_location_information_in_order_to_attach_a_location))
.onAllGranted(() -> PlacePickerActivity.startActivityForResultAtCurrentLocation(activity, requestCode))
.withPermanentDenialDialog(fragment.getString(R.string.AttachmentManager_signal_requires_location_information_in_order_to_attach_a_location))
.onAllGranted(() -> PlacePickerActivity.startActivityForResultAtCurrentLocation(fragment, requestCode))
.execute();
}
public static void selectGif(Activity activity, int requestCode, boolean isForMms) {
Intent intent = new Intent(activity, GiphyActivity.class);
public static void selectGif(Fragment fragment, int requestCode, boolean isForMms) {
Intent intent = new Intent(fragment.requireContext(), GiphyActivity.class);
intent.putExtra(GiphyActivity.EXTRA_IS_MMS, isForMms);
activity.startActivityForResult(intent, requestCode);
fragment.startActivityForResult(intent, requestCode);
}
public static void selectPayment(@NonNull Activity activity, @NonNull RecipientId recipientId) {
Intent intent = new Intent(activity, PaymentsActivity.class);
public static void selectPayment(@NonNull Fragment fragment, @NonNull RecipientId recipientId) {
Intent intent = new Intent(fragment.requireContext(), PaymentsActivity.class);
intent.putExtra(PaymentsActivity.EXTRA_PAYMENTS_STARTING_ACTION, R.id.action_directly_to_createPayment);
intent.putExtra(PaymentsActivity.EXTRA_STARTING_ARGUMENTS, new CreatePaymentFragmentArgs.Builder(new PayeeParcelable(recipientId)).build().toBundle());
activity.startActivity(intent);
fragment.startActivity(intent);
}
private @Nullable Uri getSlideUri() {
@@ -424,7 +425,7 @@ public class AttachmentManager {
return captureUri;
}
private static void selectMediaType(Activity activity, @NonNull String type, @Nullable String[] extraMimeType, int requestCode) {
private static void selectMediaType(Fragment fragment, @NonNull String type, @Nullable String[] extraMimeType, int requestCode) {
final Intent intent = new Intent();
intent.setType(type);
@@ -434,7 +435,7 @@ public class AttachmentManager {
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
try {
activity.startActivityForResult(intent, requestCode);
fragment.startActivityForResult(intent, requestCode);
return;
} catch (ActivityNotFoundException anfe) {
Log.w(TAG, "couldn't complete ACTION_OPEN_DOCUMENT, no activity found. falling back.");
@@ -443,10 +444,10 @@ public class AttachmentManager {
intent.setAction(Intent.ACTION_GET_CONTENT);
try {
activity.startActivityForResult(intent, requestCode);
fragment.startActivityForResult(intent, requestCode);
} catch (ActivityNotFoundException anfe) {
Log.w(TAG, "couldn't complete ACTION_GET_CONTENT intent, no activity found. falling back.");
Toast.makeText(activity, R.string.AttachmentManager_cant_open_media_selection, Toast.LENGTH_LONG).show();
Toast.makeText(fragment.requireContext(), R.string.AttachmentManager_cant_open_media_selection, Toast.LENGTH_LONG).show();
}
}