summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/org/lineageos/jelly/MainActivity.java64
-rw-r--r--app/src/main/java/org/lineageos/jelly/webview/ChromeClient.java11
-rw-r--r--app/src/main/java/org/lineageos/jelly/webview/WebViewExtActivity.java6
-rw-r--r--app/src/main/res/layout/activity_main.xml1
4 files changed, 81 insertions, 1 deletions
diff --git a/app/src/main/java/org/lineageos/jelly/MainActivity.java b/app/src/main/java/org/lineageos/jelly/MainActivity.java
index 0c31271..33ddb91 100644
--- a/app/src/main/java/org/lineageos/jelly/MainActivity.java
+++ b/app/src/main/java/org/lineageos/jelly/MainActivity.java
@@ -60,10 +60,12 @@ import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.webkit.CookieManager;
import android.webkit.URLUtil;
+import android.webkit.WebChromeClient;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.ImageButton;
@@ -134,6 +136,9 @@ public class MainActivity extends WebViewExtActivity implements View.OnTouchList
private boolean mGestureOngoing = false;
private boolean mIncognito;
+ private View mCustomView;
+ private WebChromeClient.CustomViewCallback mFullScreenCallback;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -283,7 +288,9 @@ public class MainActivity extends WebViewExtActivity implements View.OnTouchList
@Override
public void onBackPressed() {
mSearchController.onCancel();
- if (mWebView.canGoBack()) {
+ if (mCustomView != null) {
+ onHideCustomView();
+ } else if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
super.onBackPressed();
@@ -626,6 +633,39 @@ public class MainActivity extends WebViewExtActivity implements View.OnTouchList
mWebView.isIncognito() ? R.color.colorIncognito : R.color.colorPrimary);
}
+ @Override
+ public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
+ if (mCustomView != null) {
+ callback.onCustomViewHidden();
+ return;
+ }
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ mCustomView = view;
+ mFullScreenCallback = callback;
+ setImmersiveMode(true);
+ mCustomView.setBackgroundColor(ContextCompat.getColor(this, android.R.color.black));
+ addContentView(mCustomView, new ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
+ findViewById(R.id.app_bar_layout).setVisibility(View.GONE);
+ mSwipeRefreshLayout.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onHideCustomView() {
+ if (mCustomView == null) {
+ return;
+ }
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ setImmersiveMode(false);
+ findViewById(R.id.app_bar_layout).setVisibility(View.VISIBLE);
+ mSwipeRefreshLayout.setVisibility(View.VISIBLE);
+ ViewGroup viewGroup = (ViewGroup) mCustomView.getParent();
+ viewGroup.removeView(mCustomView);
+ mFullScreenCallback.onCustomViewHidden();
+ mFullScreenCallback = null;
+ mCustomView = null;
+ }
+
private void addShortcut() {
Intent intent = new Intent(this, MainActivity.class);
intent.setData(Uri.parse(mWebView.getUrl()));
@@ -679,4 +719,26 @@ public class MainActivity extends WebViewExtActivity implements View.OnTouchList
mSwipeRefreshLayout.setEnabled(true);
}
}
+
+ private void setImmersiveMode(boolean enable) {
+ int flags = getWindow().getDecorView().getSystemUiVisibility();
+ int immersiveModeFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+ if (enable) {
+ flags |= immersiveModeFlags;
+ } else {
+ flags &= ~immersiveModeFlags;
+ }
+ getWindow().getDecorView().setSystemUiVisibility(flags);
+ }
+
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+ setImmersiveMode(hasFocus && mCustomView != null);
+ }
}
diff --git a/app/src/main/java/org/lineageos/jelly/webview/ChromeClient.java b/app/src/main/java/org/lineageos/jelly/webview/ChromeClient.java
index a928748..79f83f7 100644
--- a/app/src/main/java/org/lineageos/jelly/webview/ChromeClient.java
+++ b/app/src/main/java/org/lineageos/jelly/webview/ChromeClient.java
@@ -22,6 +22,7 @@ import android.net.Uri;
import android.view.View;
import android.webkit.GeolocationPermissions;
import android.webkit.ValueCallback;
+import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.EditText;
import android.widget.ProgressBar;
@@ -93,6 +94,16 @@ class ChromeClient extends WebChromeClientCompat {
}
}
+ @Override
+ public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
+ mActivity.onShowCustomView(view, callback);
+ }
+
+ @Override
+ public void onHideCustomView() {
+ mActivity.onHideCustomView();
+ }
+
void bindEditText(EditText editText) {
mEditText = editText;
}
diff --git a/app/src/main/java/org/lineageos/jelly/webview/WebViewExtActivity.java b/app/src/main/java/org/lineageos/jelly/webview/WebViewExtActivity.java
index f458862..dcf02d4 100644
--- a/app/src/main/java/org/lineageos/jelly/webview/WebViewExtActivity.java
+++ b/app/src/main/java/org/lineageos/jelly/webview/WebViewExtActivity.java
@@ -17,6 +17,8 @@ package org.lineageos.jelly.webview;
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.webkit.WebChromeClient;
public abstract class WebViewExtActivity extends AppCompatActivity {
@@ -31,4 +33,8 @@ public abstract class WebViewExtActivity extends AppCompatActivity {
public abstract void onThemeColorSet(int color);
public abstract void onFaviconLoaded(Bitmap favicon);
+
+ public abstract void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback);
+
+ public abstract void onHideCustomView();
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index d2cd5c3..a022d96 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -20,6 +20,7 @@
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
+ android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">