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

View File

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

View File

@@ -25,6 +25,7 @@ import javax.inject.Inject;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProvider; 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.bramble.util.LogUtils.logException;
import static org.briarproject.briar.android.AppModule.getAndroidComponent; import static org.briarproject.briar.android.AppModule.getAndroidComponent;
@RequiresApi(19)
@MethodsNotNullByDefault @MethodsNotNullByDefault
@ParametersNotNullByDefault @ParametersNotNullByDefault
public class SendFragment extends Fragment { public class SendFragment extends Fragment {

View File

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

View File

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

View File

@@ -607,21 +607,24 @@ public class UiUtils {
} }
public static void launchActivityToOpenFile(Context ctx, public static void launchActivityToOpenFile(Context ctx,
ActivityResultLauncher<String[]> docLauncher, @Nullable ActivityResultLauncher<String[]> docLauncher,
ActivityResultLauncher<String> contentLauncher, ActivityResultLauncher<String> contentLauncher,
String contentType) { 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 { try {
docLauncher.launch(new String[] {contentType}); contentLauncher.launch(contentType);
} catch (ActivityNotFoundException e) { } catch (ActivityNotFoundException e) {
logException(LOG, WARNING, e); logException(LOG, WARNING, e);
try { Toast.makeText(ctx, R.string.error_start_activity,
contentLauncher.launch(contentType); LENGTH_LONG).show();
} catch (ActivityNotFoundException e1) {
logException(LOG, WARNING, e);
Toast.makeText(ctx, R.string.error_start_activity,
LENGTH_LONG).show();
}
} }
} }
} }