mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
#1319 In app and external browser options
This commit is contained in:
parent
c9ccdeca57
commit
93f4c965bb
9 changed files with 204 additions and 14 deletions
|
@ -125,6 +125,9 @@
|
|||
|
||||
<activity
|
||||
android:name=".activity.FolderReading"/>
|
||||
|
||||
<activity
|
||||
android:name=".activity.InAppBrowser" />
|
||||
|
||||
<activity
|
||||
android:name=".activity.SearchForFeeds" android:launchMode="singleTop" >
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<WebView
|
||||
android:id="@+id/web_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progress_bar"
|
||||
style="?android:attr/progressBarStyleHorizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="-6dp"
|
||||
android:max="100"
|
||||
android:visibility="gone"/>
|
||||
|
||||
</FrameLayout>
|
|
@ -494,6 +494,7 @@
|
|||
</string-array>
|
||||
<string name="rtl_gesture_action_value">GEST_ACTION_MARKUNREAD</string>
|
||||
|
||||
<string name="default_browser">Default browser</string>
|
||||
<string name="font">Font</string>
|
||||
<string name="default_font">Default</string>
|
||||
<string name="whitney_font">Whitney</string>
|
||||
|
@ -511,6 +512,25 @@
|
|||
<string name="noto_sans_font_prefvalue">NOTO_SANS</string>
|
||||
<string name="noto_serif_font_prefvalue">NOTO_SERIF</string>
|
||||
<string name="open_sans_condensed_font_prefvalue">OPEN_SANS_CONDENSED</string>
|
||||
<string name="system_default_prefvalue">SYSTEM_DEFAULT</string>
|
||||
<string name="in_app_browser_prefvalue">IN_APP_BROWSER</string>
|
||||
<string name="chrome_prefvalue">CHROME</string>
|
||||
<string name="firefox_prefvalue">FIREFOX</string>
|
||||
<string name="opera_mini_prefvalue">OPERA_MINI</string>
|
||||
<string-array name="default_browser_entries">
|
||||
<item>System default</item>
|
||||
<item>In-app browser</item>
|
||||
<item>Chrome</item>
|
||||
<item>Firefox</item>
|
||||
<item>Opera Mini</item>
|
||||
</string-array>
|
||||
<string-array name="default_browser_values">
|
||||
<item>@string/system_default_prefvalue</item>
|
||||
<item>@string/in_app_browser_prefvalue</item>
|
||||
<item>@string/chrome_prefvalue</item>
|
||||
<item>@string/firefox_prefvalue</item>
|
||||
<item>@string/opera_mini_prefvalue</item>
|
||||
</string-array>
|
||||
<string-array name="default_font_entries">
|
||||
<item>@string/anonymous_pro_font</item>
|
||||
<item>@string/chronicle_font</item>
|
||||
|
@ -532,6 +552,7 @@
|
|||
<item>@string/whitney_font_prefvalue</item>
|
||||
</string-array>
|
||||
<string name="default_font_value">DEFAULT</string>
|
||||
<string name="default_default_browser">@string/system_default_prefvalue</string>
|
||||
|
||||
<string name="story_notification_channel_id">story_notification_channel</string>
|
||||
<string name="story_notification_channel_name">New Stories</string>
|
||||
|
|
|
@ -105,6 +105,13 @@
|
|||
<PreferenceCategory
|
||||
android:title="@string/settings_reading"
|
||||
android:key="reading">
|
||||
<ListPreference
|
||||
android:key="default_browser"
|
||||
android:title="@string/default_browser"
|
||||
android:dialogTitle="@string/default_browser"
|
||||
android:entries="@array/default_browser_entries"
|
||||
android:entryValues="@array/default_browser_values"
|
||||
android:defaultValue="@string/default_default_browser" />
|
||||
<ListPreference
|
||||
android:key="reading_font"
|
||||
android:title="@string/font"
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
package com.newsblur.activity;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.view.View;
|
||||
import android.webkit.WebChromeClient;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
|
||||
import com.newsblur.databinding.ActivityInAppBrowserBinding;
|
||||
import com.newsblur.util.PrefsUtils;
|
||||
|
||||
public class InAppBrowser extends FragmentActivity {
|
||||
|
||||
public static final String URI = "uri";
|
||||
|
||||
private ActivityInAppBrowserBinding binding;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
PrefsUtils.applyThemePreference(this);
|
||||
binding = ActivityInAppBrowserBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
|
||||
String url = getIntent().getParcelableExtra(URI).toString();
|
||||
|
||||
binding.webView.getSettings().setJavaScriptEnabled(true);
|
||||
binding.webView.getSettings().setLoadWithOverviewMode(true);
|
||||
binding.webView.getSettings().setSupportZoom(true);
|
||||
|
||||
binding.webView.setWebViewClient(new WebViewClient() {
|
||||
@Override
|
||||
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
||||
super.onPageStarted(view, url, favicon);
|
||||
binding.progressBar.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageFinished(WebView view, String url) {
|
||||
super.onPageFinished(view, url);
|
||||
binding.progressBar.setVisibility(View.GONE);
|
||||
}
|
||||
});
|
||||
binding.webView.setWebChromeClient(new WebChromeClient() {
|
||||
@Override
|
||||
public void onProgressChanged(WebView view, int newProgress) {
|
||||
super.onProgressChanged(view, newProgress);
|
||||
binding.progressBar.setProgress(newProgress);
|
||||
}
|
||||
});
|
||||
|
||||
binding.webView.loadUrl(url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (binding.webView.canGoBack()) {
|
||||
binding.webView.goBack();
|
||||
} else {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.newsblur.util;
|
||||
|
||||
public enum DefaultBrowser {
|
||||
SYSTEM_DEFAULT,
|
||||
IN_APP_BROWSER,
|
||||
CHROME,
|
||||
FIREFOX,
|
||||
OPERA_MINI;
|
||||
|
||||
public static DefaultBrowser getDefaultBrowser(String preferenceValue) {
|
||||
switch (preferenceValue) {
|
||||
case "IN_APP_BROWSER":
|
||||
return IN_APP_BROWSER;
|
||||
case "CHROME":
|
||||
return CHROME;
|
||||
case "FIREFOX":
|
||||
return FIREFOX;
|
||||
case "OPERA_MINI":
|
||||
return OPERA_MINI;
|
||||
case "SYSTEM_DEFAULT":
|
||||
default:
|
||||
return SYSTEM_DEFAULT;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -51,6 +51,8 @@ public class PrefConstants {
|
|||
|
||||
public static final String FEED_DEFAULT_FEED_VIEW_PREFIX = "feed_default_feed_view_";
|
||||
|
||||
public static final String DEFAULT_BROWSER = "default_browser";
|
||||
|
||||
public static final String READ_STORIES_FOLDER_NAME = "read_stories";
|
||||
public static final String SAVED_STORIES_FOLDER_NAME = "saved_stories";
|
||||
public static final String READING_ENTER_IMMERSIVE_SINGLE_TAP = "immersive_enter_single_tap";
|
||||
|
|
|
@ -958,4 +958,13 @@ public class PrefsUtils {
|
|||
editor.putString(PrefConstants.WIDGET_BACKGROUND, widgetBackground.toString());
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
public static DefaultBrowser getDefaultBrowser(Context context) {
|
||||
return DefaultBrowser.getDefaultBrowser(getDefaultBrowserString(context));
|
||||
}
|
||||
|
||||
public static String getDefaultBrowserString(Context context) {
|
||||
SharedPreferences preferences = context.getSharedPreferences(PrefConstants.PREFERENCES, 0);
|
||||
return preferences.getString(PrefConstants.DEFAULT_BROWSER, DefaultBrowser.SYSTEM_DEFAULT.toString());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.newsblur.view;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
|
@ -16,8 +17,11 @@ import android.webkit.WebView;
|
|||
import android.webkit.WebViewClient;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.newsblur.activity.InAppBrowser;
|
||||
import com.newsblur.activity.Reading;
|
||||
import com.newsblur.fragment.ReadingItemFragment;
|
||||
import com.newsblur.util.DefaultBrowser;
|
||||
import com.newsblur.util.PrefsUtils;
|
||||
|
||||
public class NewsblurWebview extends WebView {
|
||||
|
||||
|
@ -88,21 +92,15 @@ public class NewsblurWebview extends WebView {
|
|||
|
||||
class NewsblurWebViewClient extends WebViewClient {
|
||||
@Override
|
||||
// this was deprecated in API 24 but the replacement only added in the same release.
|
||||
// the suppression can be removed when we move past 24
|
||||
@SuppressWarnings("deprecation")
|
||||
// as of v43.0.2357.121 of the system WebView, links no longer open in the user's chosen
|
||||
// browser, but open in-app. Override the default behaviour so it works as expected on
|
||||
// all devices.
|
||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||||
Uri uri = Uri.parse(url);
|
||||
try {
|
||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
||||
i.setData(uri);
|
||||
context.startActivity(i);
|
||||
} catch (Exception e) {
|
||||
com.newsblur.util.Log.e(this.getClass().getName(), "device cannot open URLs");
|
||||
}
|
||||
handleUri(Uri.parse(url));
|
||||
return true;
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.N)
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
|
||||
handleUri(request.getUrl());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -115,6 +113,46 @@ public class NewsblurWebview extends WebView {
|
|||
}
|
||||
}
|
||||
|
||||
private void handleUri(Uri uri) {
|
||||
DefaultBrowser defaultBrowser = PrefsUtils.getDefaultBrowser(context);
|
||||
if (defaultBrowser == DefaultBrowser.SYSTEM_DEFAULT) {
|
||||
openSystemDefaultBrowser(uri);
|
||||
} else if (defaultBrowser == DefaultBrowser.IN_APP_BROWSER) {
|
||||
Intent intent = new Intent(context, InAppBrowser.class);
|
||||
intent.putExtra(InAppBrowser.URI, uri);
|
||||
context.startActivity(intent);
|
||||
} else if (defaultBrowser == DefaultBrowser.CHROME) {
|
||||
openExternalBrowserApp(uri, "com.android.chrome");
|
||||
} else if (defaultBrowser == DefaultBrowser.FIREFOX) {
|
||||
openExternalBrowserApp(uri, "org.mozilla.firefox");
|
||||
} else if (defaultBrowser == DefaultBrowser.OPERA_MINI) {
|
||||
openExternalBrowserApp(uri, "com.opera.mini.native");
|
||||
}
|
||||
}
|
||||
|
||||
private void openSystemDefaultBrowser(Uri uri) {
|
||||
try {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(uri);
|
||||
context.startActivity(intent);
|
||||
} catch (Exception e) {
|
||||
com.newsblur.util.Log.e(this.getClass().getName(), "device cannot open URLs");
|
||||
}
|
||||
}
|
||||
|
||||
private void openExternalBrowserApp(Uri uri, String packageName) {
|
||||
try {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(uri);
|
||||
intent.setPackage(packageName);
|
||||
context.startActivity(intent);
|
||||
} catch (Exception e) {
|
||||
com.newsblur.util.Log.e(this.getClass().getName(), "apps not available to open URLs");
|
||||
// fallback to system default if apps cannot be opened
|
||||
openSystemDefaultBrowser(uri);
|
||||
}
|
||||
}
|
||||
|
||||
// this WCC implements the bare minimum callbacks to get HTML5 fullscreen video working
|
||||
class NewsblurWebChromeClient extends WebChromeClient {
|
||||
public View customView;
|
||||
|
|
Loading…
Add table
Reference in a new issue