package com.rubika.aotalk; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.FragmentManager; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import com.actionbarsherlock.app.SherlockFragment; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.google.analytics.tracking.android.EasyTracker; import com.rubika.aotalk.util.Logging; import com.rubika.aotalk.util.Statics; public class Gridstream extends SherlockFragmentActivity { private static final String APP_TAG = "--> The Leet :: Gridstream"; private static Activity activity; private static Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); activity = this; context = this; EasyTracker.getInstance().setContext(this); FragmentManager fm = getSupportFragmentManager(); if (fm.findFragmentById(android.R.id.content) == null) { GridstreamFragment list = new GridstreamFragment(); fm.beginTransaction().add(android.R.id.content, list).commit(); } } @Override protected void onStart() { super.onStart(); try { EasyTracker.getInstance().activityStart(this); } catch (IllegalStateException e) { Logging.log(APP_TAG, e.getMessage()); } } @Override protected void onStop() { super.onStop(); try { EasyTracker.getInstance().activityStop(this); } catch (IllegalStateException e) { Logging.log(APP_TAG, e.getMessage()); } } public static class GridstreamFragment extends SherlockFragment { private static WebView webView; public GridstreamFragment() { } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @SuppressLint("NewApi") @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View fragmentLayout = inflater.inflate(R.layout.alert_gsp, container, false); webView = (WebView) fragmentLayout.findViewById(R.id.gspcalendar); webView.setBackgroundColor(0); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { fragmentLayout.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } WebViewClient webClient = new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Logging.log(APP_TAG, url); if(url.startsWith("http://www.gridstream.org/")) { try { new GridstreamPage().execute(new URL(url)); } catch (MalformedURLException e) { Logging.log(APP_TAG, e.getMessage()); } return true; } else { return false; } } }; webView.setWebViewClient(webClient); showGridstreamData(""); try { new GridstreamCalendar().execute(new URL("http://gridstream.org/gsp-nextgen/subpages/news.aspx")); } catch (MalformedURLException e) { Logging.log(APP_TAG, e.getMessage()); } Button close = (Button)fragmentLayout.findViewById(R.id.close); close.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { activity.finish(); } }); return fragmentLayout; } private static Handler gspHandler = new Handler() { @Override public void handleMessage(Message msg) { String gspData = (String) msg.obj; showGridstreamData(gspData); } }; public class GridstreamCalendar extends AsyncTask<URL, Integer, Long> { private ProgressDialog loader; @Override protected void onPreExecute() { loader = new ProgressDialog(context); loader.setProgressStyle(ProgressDialog.STYLE_SPINNER); loader.setMessage(getString(R.string.loading_data) + getString(R.string.dots)); loader.show(); } @Override protected void onPostExecute(Long result) { if (loader != null) { loader.dismiss(); } } @Override protected void onProgressUpdate(Integer... progress) { } @Override protected Long doInBackground(URL... urls) { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpGet httpGet = new HttpGet(urls[0].toString()); HttpResponse response = null; BufferedReader reader = null; try { response = httpClient.execute(httpGet, localContext); } catch (ClientProtocolException e) { Logging.log(APP_TAG, e.getMessage()); } catch (IOException e) { Logging.log(APP_TAG, e.getMessage()); } String html = ""; if (response != null) { try { reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); } catch (IllegalStateException e) { Logging.log(APP_TAG, e.getMessage()); } catch (IOException e) { Logging.log(APP_TAG, e.getMessage()); } } if (reader != null) { String line = null; try { while ((line = reader.readLine()) != null){ html += line + "\n"; } } catch (IOException e) { Logging.log(APP_TAG, e.getMessage()); } } if (!html.equals("")) { Pattern pattern = Pattern.compile("<b class=\"leftbarheadlines\">Events today:</b><br>(.*?)</td>", Pattern.DOTALL); Matcher matcher = pattern.matcher(html); String resultHtml = ""; while(matcher.find()) { resultHtml = "<b class=\"leftbarheadlines\">Events today:</b><br>" + matcher.group(1); } resultHtml = resultHtml.replace("src=\"/", "src=\"http://www.gridstream.org/"); resultHtml = resultHtml.replace("href=\"/", "href=\"http://www.gridstream.org/"); Message msg = Message.obtain(); msg.obj = resultHtml; gspHandler.sendMessage(msg); Logging.log(APP_TAG, resultHtml); } return 0L; } } public class GridstreamPage extends AsyncTask<URL, Integer, Long> { private ProgressDialog loader; @Override protected void onPreExecute() { loader = new ProgressDialog(context); loader.setProgressStyle(ProgressDialog.STYLE_SPINNER); loader.setMessage(getString(R.string.loading_data) + getString(R.string.dots)); loader.show(); } @Override protected void onPostExecute(Long result) { if (loader != null) { loader.dismiss(); } } @Override protected void onProgressUpdate(Integer... progress) { } @Override protected Long doInBackground(URL... urls) { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpGet httpGet = new HttpGet(urls[0].toString()); HttpResponse response = null; BufferedReader reader = null; try { response = httpClient.execute(httpGet, localContext); } catch (ClientProtocolException e) { Logging.log(APP_TAG, e.getMessage()); } catch (IOException e) { Logging.log(APP_TAG, e.getMessage()); } String html = ""; if (response != null) { try { reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); } catch (IllegalStateException e) { Logging.log(APP_TAG, e.getMessage()); } catch (IOException e) { Logging.log(APP_TAG, e.getMessage()); } } if (reader != null) { String line = null; try { while ((line = reader.readLine()) != null){ html += line + "\n"; } } catch (IOException e) { Logging.log(APP_TAG, e.getMessage()); } } if (!html.equals("")) { Pattern pattern = Pattern.compile("<td width=\"100%\">(.*?)</td>", Pattern.DOTALL); Matcher matcher = pattern.matcher(html); String resultHtml = ""; while(matcher.find()) { resultHtml = matcher.group(1); } resultHtml = resultHtml.replace("src=\"/", "src=\"http://www.gridstream.org/"); resultHtml = resultHtml.replace("href=\"/", "href=\"http://www.gridstream.org/"); Message msg = Message.obtain(); msg.obj = resultHtml; gspHandler.sendMessage(msg); Logging.log(APP_TAG, resultHtml); } return 0L; } } private static void showGridstreamData(String resultHtml) { Logging.log(APP_TAG, resultHtml); webView.loadData(Uri.encode(Statics.GSP_HTML_START + resultHtml + Statics.HTML_END), "text/html", "UTF-8"); } } }