diff options
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"> |