package com.cellasoft.univrapp.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.ViewGroup; import android.view.Window; import android.widget.ProgressBar; import android.widget.Toast; import com.cellasoft.univrapp.BuildConfig; import com.cellasoft.univrapp.ConnectivityReceiver; import com.cellasoft.univrapp.R; import com.cellasoft.univrapp.exception.UnivrReaderException; import com.cellasoft.univrapp.manager.ContentManager; import com.cellasoft.univrapp.model.Item; import com.cellasoft.univrapp.utils.*; import com.cellasoft.univrapp.widget.NonLeakingWebView; import com.github.droidfu.concurrent.BetterAsyncTask; import com.github.droidfu.concurrent.BetterAsyncTaskCallable; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.List; import static com.cellasoft.univrapp.utils.LogUtils.LOGD; import static com.cellasoft.univrapp.utils.LogUtils.makeLogTag; public class DisPlayWebPageActivity extends Activity { public static final String ITEM_ID_PARAM = "ItemId"; public static final String CHANNEL_ID_PARAM = "ChannelId"; private static final String TAG = makeLogTag(DisPlayWebPageActivity.class.getName()); protected volatile boolean running; private NonLeakingWebView webView; private Item currentItem; private String page_url; @Override public void onCreate(Bundle savedInstanceState) { if (BuildConfig.DEBUG) { LOGD(TAG, "onCreate()"); // UIUtils.enableStrictMode(); } super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.item_webview); Intent in = getIntent(); page_url = in.getStringExtra("page_url"); int id = in.getIntExtra(ITEM_ID_PARAM, 0); currentItem = new Item(id); running = true; init(); } private void init() { webView = (NonLeakingWebView) findViewById(R.id.itemWebView); webView.setProgressBar((ProgressBar) findViewById(R.id.progressBar)); UIUtils.setHardwareAccelerated(this, webView, true); UIUtils.keepScreenOn(this, true); } @Override protected void onPostCreate(Bundle savedInstanceState) { FontUtils.setRobotoFont(this, (ViewGroup) getWindow().getDecorView()); super.onPostCreate(savedInstanceState); } @Override protected void onStart() { if (BuildConfig.DEBUG) { LOGD(TAG, "onStart()"); } super.onStart(); loadPage(); } @Override protected void onStop() { if (BuildConfig.DEBUG) { LOGD(TAG, "onStop()"); } webView.stopLoading(); webView.clearCache(false); webView.freeMemory(); super.onStop(); } @Override protected void onDestroy() { if (BuildConfig.DEBUG) { LOGD(TAG, "onDestroy()"); } running = false; UIUtils.unbindWebView(webView); currentItem = null; super.onDestroy(); } private void loadPage() { BetterAsyncTask<Void, Void, String> task = new BetterAsyncTask<Void, Void, String>( this) { @Override protected void after(final Context context, final String html) { if (running) { runOnUiThread(new Runnable() { public void run() { try { webView.showArticle(html); } catch (Exception e) { handleError( context, new Exception( "Errore durante la visualizzazione! Segnala il bug!")); } } }); } } @Override protected void handleError(Context context, Exception e) { Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT) .show(); finish(); } }; task.setCallable(new BetterAsyncTaskCallable<Void, Void, String>() { @Override public String call(BetterAsyncTask<Void, Void, String> task) throws Exception { if (ConnectivityReceiver.hasGoodEnoughNetworkConnection()) { currentItem = Item.findItemById(currentItem.id, ContentManager.FULL_ITEM_LOADER); String html = StreamUtils.readFromUrl(page_url); return modifyHtml(html); } else throw new UnivrReaderException(getResources().getString( R.string.univrapp_connection_exception)); } }); task.disableDialog(); UIUtils.execute(task, (Void[]) null); } @Override public void onBackPressed() { finish(); } private String modifyHtml(String html) { DateFormat dateFormat = new SimpleDateFormat( "dd MMMM yyyy 'alle' HH:mm", java.util.Locale.getDefault()); String article = FileUtils.getFileFromAssets(getApplicationContext(), "article.html"); article = article.replace("{content}", Html.parserPage(html)) .replace("{title_url}", currentItem.link) .replace("{title}", currentItem.title) .replace("{date}", dateFormat.format(currentItem.pubDate)); List<String> files = Html.getAttachment(html); if (!files.isEmpty()) { Document doc = Jsoup.parse(article); doc.select("div#attachment").removeAttr("style"); article = doc.html(); StringBuilder attach = new StringBuilder(); for (String file : files) { attach.append("<tr>") .append("<td><img style=\"width: 100%;\" src=\"attachment.png\" /></td>") .append("<td>" + file + "</td>").append("</tr>"); } files.clear(); article = article.replace("{files}", attach.toString()); } return article; } }