package org.softeg.slartus.forpdaplus.fragments;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.softeg.slartus.forpdaplus.App;
import org.softeg.slartus.forpdaplus.Client;
import org.softeg.slartus.forpdaplus.IntentActivity;
import org.softeg.slartus.forpdaplus.MainActivity;
import org.softeg.slartus.forpdaplus.R;
import org.softeg.slartus.forpdaplus.classes.AdvWebView;
import org.softeg.slartus.forpdaplus.classes.HtmlBuilder;
import org.softeg.slartus.forpdaplus.classes.common.StringUtils;
import org.softeg.slartus.forpdaplus.common.AppLog;
import org.softeg.slartus.forpdaplus.prefs.Preferences;
/**
* Created by radiationx on 06.12.15.
*/
public class ForumRulesFragment extends WebViewFragment{
private AdvWebView m_WebView;
private AsyncTask asyncTask;
public String m_Title = App.getContext().getString(R.string.forum_rules);
private String url = "http://4pda.ru/forum/index.php?act=boardrules";
@Override
public boolean closeTab() {
return false;
}
@Override
public AdvWebView getWebView() {
return m_WebView;
}
@Override
public WebViewClient getWebViewClient() {
return new MyWebViewClient();
}
@Override
public String getTitle() {
return m_Title;
}
@Override
public String getUrl() {
return url;
}
@Override
public String Prefix() {
return "forum_rules";
}
@Override
public void reload() {
LoadRulesTask task = new LoadRulesTask();
task.execute("".replace("|", ""));
asyncTask = task;
}
@Override
public AsyncTask getAsyncTask() {
return asyncTask;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setArrow();
}
@Override
public void onPause() {
super.onPause();
}
public static ForumRulesFragment newInstance(String url){
ForumRulesFragment fragment = new ForumRulesFragment();
Bundle args = new Bundle();
args.putString("URL", url);
fragment.setArguments(args);
return fragment;
}
public static void showRules() {
MainActivity.addTab(App.getContext().getString(R.string.forum_rules), "RULES", new ForumRulesFragment());
}
public static void showRules(String url){
MainActivity.addTab(App.getContext().getString(R.string.forum_rules), url, newInstance(url));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.webview_fragment, container, false);
m_WebView = (AdvWebView) findViewById(R.id.wvBody);
initSwipeRefreshLayout();
assert view != null;
registerForContextMenu(m_WebView);
m_WebView.getSettings();
m_WebView.getSettings().setDomStorageEnabled(true);
m_WebView.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);
m_WebView.getSettings().setAppCachePath(getMainActivity().getApplicationContext().getCacheDir().getAbsolutePath());
m_WebView.getSettings().setAppCacheEnabled(true);
m_WebView.getSettings().setAllowFileAccess(true);
m_WebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
m_WebView.addJavascriptInterface(this, "HTMLOUT");
m_WebView.getSettings().setDefaultFontSize(Preferences.Topic.getFontSize());
m_WebView.setWebViewClient(new MyWebViewClient());
if(getArguments()!=null)
url = getArguments().getString("URL");
asyncTask = new LoadRulesTask().execute();
return view;
}
private class LoadRulesTask extends AsyncTask<String, String, Boolean> {
private String m_ThemeBody;
@Override
protected Boolean doInBackground(String... forums) {
try {
if (isCancelled()) return false;
Client client = Client.getInstance();
m_ThemeBody = transformBody(client.performGet(url));
return true;
} catch (Throwable e) {
return false;
}
}
private String transformBody(String body) {
HtmlBuilder builder = new HtmlBuilder();
builder.beginHtml(m_Title);
builder.beginBody("rules");
builder.append("<div class=\"posts_list\"><div class=\"post_container\"><div class=\"post_body \">");
Document doc = Jsoup.parse(body);
Element element = doc.select(".tablepad").first();
if(element==null)
element = doc.select(".postcolor").first();
builder.append(element.html());
m_Title = doc.select(".maintitle").first().text().trim();
builder.append("</div></div></div>");
builder.endBody();
builder.endHtml();
return builder.getHtml().toString();
}
protected void onPreExecute() {
setLoading(true);
}
private Throwable ex;
protected void onPostExecute(final Boolean success) {
setLoading(false);
if (isCancelled()) return;
if (success) {
showThemeBody(m_ThemeBody);
setTitle(m_Title);
showBody();
} else {
getSupportActionBar().setTitle(ex.getMessage());
m_WebView.loadDataWithBaseURL("http://4pda.ru/forum/", m_ThemeBody, "text/html", "UTF-8", null);
AppLog.e(getMainActivity(), ex);
}
}
}
private void showThemeBody(String body) {
try {
setTitle(m_Title);
m_WebView.loadDataWithBaseURL("http://4pda.ru/forum/", body, "text/html", "UTF-8", null);
} catch (Exception ex) {
AppLog.e(getMainActivity(), ex);
}
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, final String url) {
IntentActivity.tryShowUrl(getMainActivity(), new Handler(), url, true, false);
return true;
}
}
Menu menu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.add(R.string.copy_link)
.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
StringUtils.copyToClipboard(getContext(), url);
Toast.makeText(getActivity(), R.string.link_copied_to_buffer, Toast.LENGTH_SHORT).show();
return true;
}
});
}
}