Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
/app/build/
/local.properties
/app/schemas/
/.project
/.settings/org.eclipse.buildship.core.prefs
244 changes: 125 additions & 119 deletions app/src/main/java/codes/nh/streambrowser/screens/browser/Browser.java
Original file line number Diff line number Diff line change
@@ -1,125 +1,131 @@
package codes.nh.streambrowser.screens.browser;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.Map;

import codes.nh.streambrowser.screens.stream.Stream;
import codes.nh.streambrowser.utils.AppUtils;

public class Browser extends WebView {

public Browser(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);

initializeBrowser();
}

private void initializeBrowser() {
WebSettings settings = getSettings();

settings.setBuiltInZoomControls(true);
settings.setDisplayZoomControls(false);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);

package codes.nh.streambrowser.screens.browser;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.util.Map;
import codes.nh.streambrowser.screens.stream.Stream;
import codes.nh.streambrowser.utils.AppUtils;
public class Browser extends WebView {
public Browser(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initializeBrowser();
}
private void initializeBrowser() {
WebSettings settings = getSettings();
settings.setBuiltInZoomControls(true);
settings.setDisplayZoomControls(false);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
settings.setJavaScriptEnabled(true);
settings.setSupportMultipleWindows(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setMediaPlaybackRequiresUserGesture(false);
settings.setDomStorageEnabled(true);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);

BrowserClient browserClient = new BrowserClient();
setWebViewClient(browserClient);

BrowserChromeClient browserChromeClient = new BrowserChromeClient();
setWebChromeClient(browserChromeClient);

//CookieManager.getInstance().setAcceptThirdPartyCookies(this, true);
}

private boolean desktopMode = false;

public boolean getDesktopMode() {
return desktopMode;
}

public void setDesktopMode(boolean enabled) {
desktopMode = enabled;

String userAgent = getSettings().getUserAgentString();
if (enabled) {
userAgent = userAgent
.replace(" Mobile ", " Dummy1 ")
.replace(" Android ", " Dummy2 ");
} else {
userAgent = userAgent
.replace(" Dummy1 ", " Mobile ")
.replace(" Dummy2 ", " Android ");
}
getSettings().setUserAgentString(userAgent);
AppUtils.log("new user agent = " + userAgent);

//getSettings().setUseWideViewPort(enabled);
}

@Override
public void loadUrl(@NonNull String url) {
super.loadUrl(url);
getListener().onRequestPage(url);
}

@Override
public void loadUrl(@NonNull String url, @NonNull Map<String, String> additionalHttpHeaders) {
super.loadUrl(url, additionalHttpHeaders);
getListener().onRequestPage(url);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
getListener().onTouch();
return super.onTouchEvent(event);
}

//listener

private Listener listener;

public Listener getListener() {
return listener;
}

public void setListener(Listener listener) {
this.listener = listener;
}

interface Listener {

void onRequestPage(String url);

void onStartLoadPage(String url);

void onFinishLoadPage(String url);

void onUpdateUrl(String url);

void onUpdateTitle(String title);

void onUpdateFavicon(Bitmap favicon);

void onUpdateProgress(int progress);

boolean onRedirect(String oldUrl, String newUrl);
settings.setDomStorageEnabled(true);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);

BrowserClient browserClient = new BrowserClient();
setWebViewClient(browserClient);

BrowserChromeClient browserChromeClient = new BrowserChromeClient();
setWebChromeClient(browserChromeClient);

//CookieManager.getInstance().setAcceptThirdPartyCookies(this, true);
}

private boolean desktopMode = false;

public boolean getDesktopMode() {
return desktopMode;
}

public void setDesktopMode(boolean enabled) {
desktopMode = enabled;

String userAgent = getSettings().getUserAgentString();
if (enabled) {
userAgent = userAgent
.replace(" Mobile ", " Dummy1 ")
.replace(" Android ", " Dummy2 ");
} else {
userAgent = userAgent
.replace(" Dummy1 ", " Mobile ")
.replace(" Dummy2 ", " Android ");
}
getSettings().setUserAgentString(userAgent);
AppUtils.log("new user agent = " + userAgent);

//getSettings().setUseWideViewPort(enabled);
}

@Override
public void loadUrl(@NonNull String url) {
super.loadUrl(url);
getListener().onRequestPage(url);
}

@Override
public void loadUrl(@NonNull String url, @NonNull Map<String, String> additionalHttpHeaders) {
super.loadUrl(url, additionalHttpHeaders);
getListener().onRequestPage(url);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
getListener().onTouch();
return super.onTouchEvent(event);
}

//listener

private Listener listener;

public Listener getListener() {
return listener;
}

public void setListener(Listener listener) {
this.listener = listener;
}

interface Listener {

void onRequestPage(String url);

void onStartLoadPage(String url);

void onFinishLoadPage(String url);

void onUpdateUrl(String url);

void onUpdateTitle(String title);

void onUpdateFavicon(Bitmap favicon);

void onUpdateProgress(int progress);

boolean onRedirect(String oldUrl, String newUrl);

void onFindStream(Stream stream);

void onTouch();

void onFindStream(Stream stream);
Browser onCreateWindow(Browser parentBrowser);

void onTouch();
void onCloseWindow(Browser browser);
}
}
Original file line number Diff line number Diff line change
@@ -1,33 +1,57 @@
package codes.nh.streambrowser.screens.browser;

package codes.nh.streambrowser.screens.browser;
import android.graphics.Bitmap;
import android.os.Message;
import android.webkit.WebChromeClient;
import android.webkit.WebView;

public class BrowserChromeClient extends WebChromeClient {

@Override
public void onReceivedTitle(WebView webView, String title) {
super.onReceivedTitle(webView, title);


public class BrowserChromeClient extends WebChromeClient {

@Override
public void onReceivedTitle(WebView webView, String title) {
super.onReceivedTitle(webView, title);

Browser browser = (Browser) webView;
browser.getListener().onUpdateTitle(title);
}

@Override
public void onReceivedIcon(WebView webView, Bitmap favicon) {
super.onReceivedIcon(webView, favicon);

Browser browser = (Browser) webView;
browser.getListener().onUpdateFavicon(favicon);
}

@Override
public void onProgressChanged(WebView webView, int progress) {
super.onProgressChanged(webView, progress);

Browser browser = (Browser) webView;
browser.getListener().onUpdateTitle(title);
browser.getListener().onUpdateProgress(progress);
}

@Override
public void onReceivedIcon(WebView webView, Bitmap favicon) {
super.onReceivedIcon(webView, favicon);

public boolean onCreateWindow(WebView webView, boolean isDialog, boolean isUserGesture, Message resultMsg) {
Browser browser = (Browser) webView;
browser.getListener().onUpdateFavicon(favicon);
Browser childBrowser = browser.getListener().onCreateWindow(browser);
if (childBrowser == null) {
return false;
}

WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(childBrowser);
resultMsg.sendToTarget();
return true;
}

@Override
public void onProgressChanged(WebView webView, int progress) {
super.onProgressChanged(webView, progress);

Browser browser = (Browser) webView;
browser.getListener().onUpdateProgress(progress);
public void onCloseWindow(WebView window) {
super.onCloseWindow(window);
if (window instanceof Browser) {
Browser browser = (Browser) window;
browser.getListener().onCloseWindow(browser);
}
}

}
}
Loading