mirror of https://github.com/M66B/FairEmail.git
Allow browsing links
This commit is contained in:
parent
cdb1695faa
commit
15f89a8dcf
|
@ -64,7 +64,6 @@ import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
@ -906,11 +905,6 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
||||||
String url = link[0].getURL();
|
String url = link[0].getURL();
|
||||||
Uri uri = Uri.parse(url);
|
Uri uri = Uri.parse(url);
|
||||||
|
|
||||||
if (!"http".equals(uri.getScheme()) && !"https".equals(uri.getScheme())) {
|
|
||||||
Toast.makeText(context, context.getString(R.string.title_no_viewer, uri.toString()), Toast.LENGTH_LONG).show();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BuildConfig.APPLICATION_ID.equals(uri.getHost()) && "/activate/".equals(uri.getPath())) {
|
if (BuildConfig.APPLICATION_ID.equals(uri.getHost()) && "/activate/".equals(uri.getPath())) {
|
||||||
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
|
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
|
||||||
lbm.sendBroadcast(
|
lbm.sendBroadcast(
|
||||||
|
@ -927,13 +921,14 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
Uri uri = Uri.parse(etLink.getText().toString());
|
Uri uri = Uri.parse(etLink.getText().toString());
|
||||||
|
Helper.view(context, owner, uri, false);
|
||||||
if (!"http".equals(uri.getScheme()) && !"https".equals(uri.getScheme())) {
|
|
||||||
Toast.makeText(context, context.getString(R.string.title_no_viewer, uri.toString()), Toast.LENGTH_LONG).show();
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
})
|
||||||
Helper.view(context, owner, uri);
|
.setNeutralButton(R.string.title_browse, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
Uri uri = Uri.parse(etLink.getText().toString());
|
||||||
|
Helper.view(context, owner, uri, true);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.title_no, null)
|
.setNegativeButton(R.string.title_no, null)
|
||||||
|
|
|
@ -87,7 +87,7 @@ public class FragmentWebView extends FragmentEx {
|
||||||
setSubtitle(url);
|
setSubtitle(url);
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
Helper.view(getContext(), getViewLifecycleOwner(), Uri.parse(url));
|
Helper.view(getContext(), getViewLifecycleOwner(), Uri.parse(url), true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.pm.ResolveInfo;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.Network;
|
import android.net.Network;
|
||||||
|
@ -79,6 +80,7 @@ import androidx.lifecycle.Lifecycle;
|
||||||
import androidx.lifecycle.LifecycleOwner;
|
import androidx.lifecycle.LifecycleOwner;
|
||||||
|
|
||||||
import static android.os.Process.THREAD_PRIORITY_BACKGROUND;
|
import static android.os.Process.THREAD_PRIORITY_BACKGROUND;
|
||||||
|
import static androidx.browser.customtabs.CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION;
|
||||||
|
|
||||||
public class Helper {
|
public class Helper {
|
||||||
static final String TAG = "fairemail";
|
static final String TAG = "fairemail";
|
||||||
|
@ -100,14 +102,25 @@ public class Helper {
|
||||||
static void view(Context context, LifecycleOwner owner, Intent intent) {
|
static void view(Context context, LifecycleOwner owner, Intent intent) {
|
||||||
Uri uri = intent.getData();
|
Uri uri = intent.getData();
|
||||||
if ("http".equals(uri.getScheme()) || "https".equals(uri.getScheme()))
|
if ("http".equals(uri.getScheme()) || "https".equals(uri.getScheme()))
|
||||||
view(context, owner, intent.getData());
|
view(context, owner, intent.getData(), false);
|
||||||
else
|
else
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void view(Context context, LifecycleOwner owner, Uri uri) {
|
static void view(Context context, LifecycleOwner owner, Uri uri, boolean browse) {
|
||||||
Log.i(Helper.TAG, "Custom tab=" + uri);
|
Log.i(Helper.TAG, "View=" + uri);
|
||||||
|
|
||||||
|
if (!hasCustomTabs(context, uri))
|
||||||
|
browse = true;
|
||||||
|
|
||||||
|
if (browse) {
|
||||||
|
Intent view = new Intent(Intent.ACTION_VIEW, uri);
|
||||||
|
PackageManager pm = context.getPackageManager();
|
||||||
|
if (view.resolveActivity(pm) == null)
|
||||||
|
Toast.makeText(context, context.getString(R.string.title_no_viewer, uri.toString()), Toast.LENGTH_LONG).show();
|
||||||
|
else
|
||||||
|
context.startActivity(view);
|
||||||
|
} else {
|
||||||
// https://developer.chrome.com/multidevice/android/customtabs
|
// https://developer.chrome.com/multidevice/android/customtabs
|
||||||
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
|
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
|
||||||
builder.setToolbarColor(Helper.resolveColor(context, R.attr.colorPrimary));
|
builder.setToolbarColor(Helper.resolveColor(context, R.attr.colorPrimary));
|
||||||
|
@ -121,6 +134,22 @@ public class Helper {
|
||||||
Helper.unexpectedError(context, owner, ex);
|
Helper.unexpectedError(context, owner, ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static boolean hasCustomTabs(Context context, Uri uri) {
|
||||||
|
PackageManager pm = context.getPackageManager();
|
||||||
|
Intent view = new Intent(Intent.ACTION_VIEW, uri);
|
||||||
|
|
||||||
|
for (ResolveInfo info : pm.queryIntentActivities(view, 0)) {
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.setAction(ACTION_CUSTOM_TABS_CONNECTION);
|
||||||
|
intent.setPackage(info.activityInfo.packageName);
|
||||||
|
if (pm.resolveService(intent, 0) != null)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static Intent getChooser(Context context, Intent intent) {
|
static Intent getChooser(Context context, Intent intent) {
|
||||||
PackageManager pm = context.getPackageManager();
|
PackageManager pm = context.getPackageManager();
|
||||||
|
|
|
@ -390,6 +390,7 @@
|
||||||
<string name="title_no">No</string>
|
<string name="title_no">No</string>
|
||||||
<string name="title_undo">Undo</string>
|
<string name="title_undo">Undo</string>
|
||||||
<string name="title_add">Add</string>
|
<string name="title_add">Add</string>
|
||||||
|
<string name="title_browse">Browse</string>
|
||||||
<string name="title_report">Report</string>
|
<string name="title_report">Report</string>
|
||||||
|
|
||||||
<string name="title_try">Try FairEmail, an open source, privacy friendly email app for Android</string>
|
<string name="title_try">Try FairEmail, an open source, privacy friendly email app for Android</string>
|
||||||
|
|
Loading…
Reference in New Issue