package com.iven.lfflfeedreader.mainact;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.ContextThemeWrapper;
import android.support.v7.widget.AppCompatCheckBox;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.iven.lfflfeedreader.R;
import com.iven.lfflfeedreader.utils.Preferences;
public class ArticlePage extends AppCompatActivity {
//initialize feed infos
String feedurl;
//webview
WebView wv;
WebSettings ws;
//ContextThemeWrapper
ContextThemeWrapper themewrapper;
//view
AppCompatCheckBox js_button;
Toolbar toolbar;
Toast toast;
ProgressBar progressBar;
View v;
//create the toolbar's menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.wb_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@SuppressLint("SetJavaScriptEnabled")
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem actionViewItem = menu.findItem(R.id.checkbox);
//retrieve the ActionView from menu
v = MenuItemCompat.getActionView(actionViewItem);
//find the button within actionview
js_button = (AppCompatCheckBox) v.findViewById(R.id.js);
js_button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
//enable JavaScript
ws.setJavaScriptEnabled(true);
//set Toolbar title to 'JavaScript On'
toolbar.setTitle("JavaScript On");
wv.reload();
} else {
//disable JavaScript
ws.setJavaScriptEnabled(false);
//set Toolbar title to 'JavaScript Off'
toolbar.setTitle("JavaScript Off");
wv.reload();
}
}
});
// Handle button click here
return super.onPrepareOptionsMenu(menu);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//get the feed's link from the intent
if (savedInstanceState == null) {
Bundle extras = getIntent().getExtras();
if (extras != null) {
feedurl = extras.getString("feedselected");
}
}
//apply preferences
//apply activity's theme if dark theme is enabled
themewrapper = new ContextThemeWrapper(getBaseContext(), this.getTheme());
Preferences.applyTheme(themewrapper, getBaseContext());
//set the navbar tint if the preference is enabled
Preferences.applyNavTint(this, getBaseContext(), R.color.accent_color);
//set LightStatusBar
Preferences.applyLightIcons(this);
//set the immersive mode (only for >= KitKat) if the preference is enabled
Preferences.applyImmersiveMode(this);
//set the view
setContentView(R.layout.article_page_layout);
//set the toolbar
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//provide back navigation
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
overridePendingTransition(0, 0);
}
});
//set toolbar title
getSupportActionBar().setTitle("JavaScript Off");
//initialize the webview & its settings
wv = (WebView) findViewById(R.id.web_view);
ws = wv.getSettings();
//initialize the progress bar
progressBar = (ProgressBar) findViewById(R.id.progress);
//set default encoding
ws.setDefaultTextEncodingName("utf-8");
//enum for controlling the layout of html. NORMAL means no rendering changes.
//for more info http://developer.android.com/reference/android/webkit/WebSettings.LayoutAlgorithm.html
ws.setLayoutAlgorithm(LayoutAlgorithm.NORMAL);
//other WebView Settings
//fit screen size
ws.setLoadWithOverviewMode(true);
ws.setUseWideViewPort(true);
//enable pinch to zoom
ws.setBuiltInZoomControls(true);
if (Build.VERSION.SDK_INT >= 11) {
ws.setDisplayZoomControls(false);
}
//for more info about the next method:
//http://stackoverflow.com/questions/3149216/how-to-listen-for-a-webview-finishing-loading-a-url-in-android
wv.setWebViewClient(new WebViewClient() {
private int running = 0; // Could be public if you want a timer to check.
//on page started loading show circle progress
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
running = Math.max(running, 1); // First request move it to 1.
//hide WebView
wv.setVisibility(View.INVISIBLE);
//show loading toast
toast = Toast.makeText(getBaseContext(), getResources().getString(R.string.loading), Toast.LENGTH_LONG);
toast.show();
//show progress bar
progressBar.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 6));
progressBar.setVisibility(View.VISIBLE);
}
//stop progress bar when the page is finished loading
//and show the webview
@Override
public void onPageFinished(WebView view, String url) {
if (--running == 0) { // just "running--;" if you add a timer.
//show WebView
wv.setVisibility(View.VISIBLE);
//cancel the toast if WebView has finished loading
toast.cancel();
//hide progress bar
progressBar.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0));
progressBar.setVisibility(View.INVISIBLE);
}
}
});
this.runOnUiThread(new Runnable() {
@Override
public void run() {
wv.loadUrl(feedurl);
}
});
}
//(only for >= KitKat)
//fix Immersive mode navigation becomes sticky after minimise-restore
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
Preferences.applyImmersiveMode(this);
}
}
}