package de.podfetcher.activity; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.DateFormat; import org.apache.commons.lang3.StringEscapeUtils; import android.content.Intent; import android.graphics.drawable.BitmapDrawable; import android.os.AsyncTask; import android.os.Bundle; import android.text.format.DateUtils; import android.util.Log; import android.view.View; import android.webkit.WebView; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.actionbarsherlock.app.SherlockActivity; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.actionbarsherlock.view.Window; import de.podfetcher.R; import de.podfetcher.asynctask.DownloadObserver; import de.podfetcher.asynctask.DownloadStatus; import de.podfetcher.feed.Feed; import de.podfetcher.feed.FeedItem; import de.podfetcher.feed.FeedManager; import de.podfetcher.feed.FeedMedia; import de.podfetcher.fragment.ItemlistFragment; import de.podfetcher.fragment.FeedlistFragment; import de.podfetcher.service.PlaybackService; import de.podfetcher.storage.DownloadRequester; import de.podfetcher.util.FeedItemMenuHandler; /** Displays a single FeedItem and provides various actions */ public class ItemviewActivity extends SherlockActivity { private static final String TAG = "ItemviewActivity"; private FeedManager manager; private FeedItem item; // Widgets private TextView txtvTitle; private TextView txtvPublished; private WebView webvDescription; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); manager = FeedManager.getInstance(); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); extractFeeditem(); populateUI(); } @Override public void onStop() { super.onStop(); Log.d(TAG, "Stopping Activity"); } /** Extracts FeedItem object the activity is supposed to display */ private void extractFeeditem() { long itemId = getIntent().getLongExtra( ItemlistFragment.EXTRA_SELECTED_FEEDITEM, -1); long feedId = getIntent().getLongExtra( FeedlistFragment.EXTRA_SELECTED_FEED, -1); if (itemId == -1 || feedId == -1) { Log.e(TAG, "Received invalid selection of either feeditem or feed."); } Feed feed = manager.getFeed(feedId); item = manager.getFeedItem(itemId, feed); Log.d(TAG, "Title of item is " + item.getTitle()); Log.d(TAG, "Title of feed is " + item.getFeed().getTitle()); } private void populateUI() { getSupportActionBar().setDisplayHomeAsUpEnabled(true); setContentView(R.layout.feeditemview); getSupportActionBar().setLogo(new BitmapDrawable(item.getFeed().getImage().getImageBitmap())); txtvTitle = (TextView) findViewById(R.id.txtvItemname); txtvPublished = (TextView) findViewById(R.id.txtvPublished); webvDescription = (WebView) findViewById(R.id.webvDescription); setTitle(item.getFeed().getTitle()); txtvPublished.setText(DateUtils.formatSameDayTime(item.getPubDate() .getTime(), System.currentTimeMillis(), DateFormat.MEDIUM, DateFormat.SHORT)); txtvTitle.setText(item.getTitle()); webViewLoader.execute(); } /* * TODO implement final DownloadObserver downloadObserver = new * DownloadObserver(this) { * * @Override protected void onProgressUpdate( DownloadStatus... values) { * * } * * @Override protected void onPostExecute(Boolean result) { boolean r = * getStatusList()[0].isSuccessful(); if (r) { //setDownloadedState(); } * else { //setNotDownloadedState(); } } }; */ @Override public boolean onCreateOptionsMenu(Menu menu) { return FeedItemMenuHandler.onCreateMenu(new MenuInflater(this), menu); } @Override public boolean onOptionsItemSelected(MenuItem menuItem) { if (!FeedItemMenuHandler.onMenuItemClicked(this, menuItem, item)) { switch(menuItem.getItemId()) { case android.R.id.home: finish(); break; } } invalidateOptionsMenu(); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { return FeedItemMenuHandler.onPrepareMenu(menu, item); } private AsyncTask webViewLoader = new AsyncTask() { String url; @Override protected void onPostExecute(Void result) { super.onPostExecute(result); webvDescription.loadData(url, "text/html", "utf-8"); setSupportProgressBarIndeterminateVisibility(false); Log.d(TAG, "Webview loaded"); } @Override protected void onPreExecute() { super.onPreExecute(); setSupportProgressBarIndeterminateVisibility(true); } @Override protected Void doInBackground(Void... params) { Log.d(TAG, "Loading Webview"); url = ""; try { if (item.getContentEncoded() == null) { url = URLEncoder.encode(item.getDescription(), "utf-8") .replaceAll("\\+", " "); } else { url = URLEncoder.encode( StringEscapeUtils.unescapeHtml4(item .getContentEncoded()), "utf-8").replaceAll( "\\+", " "); } } catch (UnsupportedEncodingException e) { url = "Page could not be loaded"; e.printStackTrace(); } return null; } }; }