mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-16 12:49:55 +01:00
[android] check if browser intent resolves before starting
This prevents a crash on systems without a browser
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package org.briarproject.briar.android.widget;
|
package org.briarproject.briar.android.widget;
|
||||||
|
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
@@ -10,6 +11,7 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
@@ -22,6 +24,7 @@ import androidx.fragment.app.DialogFragment;
|
|||||||
|
|
||||||
import static android.content.Intent.ACTION_VIEW;
|
import static android.content.Intent.ACTION_VIEW;
|
||||||
import static android.content.pm.PackageManager.MATCH_DEFAULT_ONLY;
|
import static android.content.pm.PackageManager.MATCH_DEFAULT_ONLY;
|
||||||
|
import static android.widget.Toast.LENGTH_SHORT;
|
||||||
import static java.util.Objects.requireNonNull;
|
import static java.util.Objects.requireNonNull;
|
||||||
|
|
||||||
@MethodsNotNullByDefault
|
@MethodsNotNullByDefault
|
||||||
@@ -64,18 +67,23 @@ public class LinkDialogFragment extends DialogFragment {
|
|||||||
urlView.setText(url);
|
urlView.setText(url);
|
||||||
|
|
||||||
// prepare normal intent or intent chooser
|
// prepare normal intent or intent chooser
|
||||||
|
Context ctx = requireContext();
|
||||||
Intent i = new Intent(ACTION_VIEW, Uri.parse(url));
|
Intent i = new Intent(ACTION_VIEW, Uri.parse(url));
|
||||||
PackageManager packageManager =
|
PackageManager packageManager = ctx.getPackageManager();
|
||||||
requireNonNull(getContext()).getPackageManager();
|
List activities =
|
||||||
List activities = packageManager.queryIntentActivities(i,
|
packageManager.queryIntentActivities(i, MATCH_DEFAULT_ONLY);
|
||||||
MATCH_DEFAULT_ONLY);
|
|
||||||
boolean choice = activities.size() > 1;
|
boolean choice = activities.size() > 1;
|
||||||
Intent intent = choice ? Intent.createChooser(i,
|
Intent intent = choice ? Intent.createChooser(i,
|
||||||
getString(R.string.link_warning_open_link)) : i;
|
getString(R.string.link_warning_open_link)) : i;
|
||||||
|
|
||||||
Button openButton = v.findViewById(R.id.openButton);
|
Button openButton = v.findViewById(R.id.openButton);
|
||||||
openButton.setOnClickListener(v1 -> {
|
openButton.setOnClickListener(v1 -> {
|
||||||
startActivity(intent);
|
if (intent.resolveActivity(packageManager) != null) {
|
||||||
|
startActivity(intent);
|
||||||
|
} else {
|
||||||
|
Toast.makeText(ctx, R.string.error_start_activity, LENGTH_SHORT)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
getDialog().dismiss();
|
getDialog().dismiss();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user