Don't use OPEN_DOCUMENT launchers on API < 19.

This commit is contained in:
akwizgran
2022-04-18 15:42:24 +01:00
parent b36066514b
commit 23316f5e9c
6 changed files with 31 additions and 20 deletions

View File

@@ -58,7 +58,6 @@ import org.briarproject.briar.android.privategroup.conversation.GroupActivity;
import org.briarproject.briar.android.removabledrive.RemovableDriveActivity;
import org.briarproject.briar.android.util.ActivityLaunchers.GetImageAdvanced;
import org.briarproject.briar.android.util.ActivityLaunchers.GetMultipleImagesAdvanced;
import org.briarproject.briar.android.util.ActivityLaunchers.OpenImageDocumentAdvanced;
import org.briarproject.briar.android.util.ActivityLaunchers.OpenMultipleImageDocumentsAdvanced;
import org.briarproject.briar.android.util.BriarSnackbarBuilder;
import org.briarproject.briar.android.view.BriarRecyclerView;
@@ -199,12 +198,11 @@ public class ConversationActivity extends BriarActivity
requireNonNull(name);
loadMessages();
};
private final ActivityResultLauncher<String[]> docLauncher = SDK_INT >= 18 ?
@Nullable
private final ActivityResultLauncher<String[]> docLauncher = SDK_INT >= 19 ?
registerForActivityResult(new OpenMultipleImageDocumentsAdvanced(),
this::onImagesChosen) :
registerForActivityResult(new OpenImageDocumentAdvanced(), uri -> {
if (uri != null) onImagesChosen(singletonList(uri));
});
null;
private final ActivityResultLauncher<String> contentLauncher =
SDK_INT >= 18 ?
registerForActivityResult(new GetMultipleImagesAdvanced(),

View File

@@ -21,6 +21,7 @@ import javax.inject.Inject;
import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProvider;
@@ -31,6 +32,7 @@ import static android.widget.Toast.LENGTH_LONG;
import static org.briarproject.briar.android.AppModule.getAndroidComponent;
import static org.briarproject.briar.android.util.UiUtils.launchActivityToOpenFile;
@RequiresApi(19)
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class ReceiveFragment extends Fragment {

View File

@@ -25,6 +25,7 @@ import javax.inject.Inject;
import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProvider;
@@ -38,6 +39,7 @@ import static java.util.logging.Logger.getLogger;
import static org.briarproject.bramble.util.LogUtils.logException;
import static org.briarproject.briar.android.AppModule.getAndroidComponent;
@RequiresApi(19)
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class SendFragment extends Fragment {

View File

@@ -24,6 +24,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceGroup;
import static android.os.Build.VERSION.SDK_INT;
import static java.util.Objects.requireNonNull;
import static org.briarproject.briar.android.AppModule.getAndroidComponent;
import static org.briarproject.briar.android.TestingConstants.IS_DEBUG_BUILD;
@@ -48,9 +49,11 @@ public class SettingsFragment extends PreferenceFragmentCompat {
private SettingsViewModel viewModel;
private AvatarPreference prefAvatar;
private final ActivityResultLauncher<String[]> docLauncher =
@Nullable
private final ActivityResultLauncher<String[]> docLauncher = SDK_INT >= 19 ?
registerForActivityResult(new OpenImageDocumentAdvanced(),
this::onImageSelected);
this::onImageSelected) :
null;
private final ActivityResultLauncher<String> contentLauncher =
registerForActivityResult(new GetImageAdvanced(),
this::onImageSelected);

View File

@@ -1,6 +1,5 @@
package org.briarproject.briar.android.util;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
@@ -14,6 +13,7 @@ import androidx.activity.result.contract.ActivityResultContracts.OpenDocument;
import androidx.activity.result.contract.ActivityResultContracts.OpenMultipleDocuments;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import static android.app.Activity.RESULT_CANCELED;
import static android.bluetooth.BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE;
@@ -26,6 +26,7 @@ import static org.briarproject.bramble.util.AndroidUtils.getSupportedImageConten
@NotNullByDefault
public class ActivityLaunchers {
@RequiresApi(19)
public static class CreateDocumentAdvanced extends CreateDocument {
@NonNull
@Override
@@ -47,6 +48,7 @@ public class ActivityLaunchers {
}
}
@RequiresApi(19)
public static class OpenDocumentAdvanced extends OpenDocument {
@NonNull
@Override
@@ -73,7 +75,7 @@ public class ActivityLaunchers {
}
}
@TargetApi(18)
@RequiresApi(18)
public static class GetMultipleImagesAdvanced extends GetMultipleContents {
@NonNull
@Override
@@ -88,6 +90,7 @@ public class ActivityLaunchers {
}
}
@RequiresApi(19)
public static class OpenImageDocumentAdvanced extends OpenDocument {
@NonNull
@Override
@@ -102,7 +105,7 @@ public class ActivityLaunchers {
}
}
@TargetApi(18)
@RequiresApi(19)
public static class OpenMultipleImageDocumentsAdvanced
extends OpenMultipleDocuments {
@NonNull

View File

@@ -607,21 +607,24 @@ public class UiUtils {
}
public static void launchActivityToOpenFile(Context ctx,
ActivityResultLauncher<String[]> docLauncher,
@Nullable ActivityResultLauncher<String[]> docLauncher,
ActivityResultLauncher<String> contentLauncher,
String contentType) {
// Try OPEN_DOCUMENT, fall back to GET_CONTENT
// Try OPEN_DOCUMENT if available, fall back to GET_CONTENT
if (docLauncher != null) {
try {
docLauncher.launch(new String[] {contentType});
return;
} catch (ActivityNotFoundException e) {
logException(LOG, WARNING, e);
}
}
try {
docLauncher.launch(new String[] {contentType});
contentLauncher.launch(contentType);
} catch (ActivityNotFoundException e) {
logException(LOG, WARNING, e);
try {
contentLauncher.launch(contentType);
} catch (ActivityNotFoundException e1) {
logException(LOG, WARNING, e);
Toast.makeText(ctx, R.string.error_start_activity,
LENGTH_LONG).show();
}
Toast.makeText(ctx, R.string.error_start_activity,
LENGTH_LONG).show();
}
}
}