package com.themagpi.fragments;
import java.io.File;
import android.app.DownloadManager;
import android.app.DownloadManager.Query;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.TextView;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.themagpi.android.Config;
import com.themagpi.android.R;
import com.themagpi.api.Issue;
import com.themagpi.interfaces.Refreshable;
import com.themagpi.interfaces.RefreshableContainer;
public class IssueDetailsFragment extends SherlockFragment implements Refreshable {
public final static String ARG_ISSUE = "IssueObject";
private Issue issue;
private DownloadManager dm;
BroadcastReceiver downloadReceiver;
private Menu menu;
public void onCreate(Bundle si) {
super.onCreate(si);
dm = (DownloadManager) getActivity().getSystemService(Context.DOWNLOAD_SERVICE);
}
public void downloadIssue() {
if(!this.canDisplayPdf(getActivity())) {
Toast.makeText(getActivity(), getActivity().getString(R.string.pdf_reader_required), Toast.LENGTH_LONG).show();
return;
}
String file = issue.getId() + ".pdf";
File magPiFolder = new File (Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + Config.ISSUE_FOLDER);
magPiFolder.mkdirs();
File pdf = new File (Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + Config.ISSUE_FOLDER, file);
if(pdf.exists() && !isDownloading(issue.getPdfUrl())) {
Intent intentPdf = new Intent(Intent.ACTION_VIEW);
intentPdf.setDataAndType(Uri.fromFile(pdf), "application/pdf");
startActivity(intentPdf);
} else if (!isDownloading(issue.getPdfUrl())) {
menu.findItem(R.id.menu_view).setVisible(false);
menu.findItem(R.id.menu_cancel_download).setVisible(true);
Request request = new Request(Uri.parse(issue.getPdfUrl()));
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setTitle(getActivity().getString(R.string.app_name) + " n�" + issue.getId());
request.setDescription(getActivity().getString(R.string.download_text) + " n�" + issue.getId());
request.setDestinationInExternalPublicDir(Config.ISSUE_FOLDER, file);
dm.enqueue(request);
}
}
public void onResume() {
super.onResume();
downloadReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
Query query = new Query();
query.setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL);
Cursor c = dm.query(query);
if (c.moveToFirst()) {
int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_URI);
String urlDownloaded = c.getString(columnIndex);
if ((issue.getPdfUrl() + "/").equals(urlDownloaded)) {
menu.findItem(R.id.menu_view).setVisible(true);
menu.findItem(R.id.menu_cancel_download).setVisible(false);
}
}
c.close();
}
}
};
getActivity().registerReceiver(downloadReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
if (savedInstanceState != null) {
// mCurrentPosition = savedInstanceState.getInt(ARG_ISSUE);
}
return inflater.inflate(R.layout.fragment_issue_details, container, false);
}
@Override
public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
if(issue == null)
return true;
switch (item.getItemId()) {
case R.id.menu_view:
if(!PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean("pref_open_issuu", false))
downloadIssue();
else
viewOnISSUU();
return true;
case R.id.menu_cancel_download:
cancelDownload();
return true;
case R.id.menu_share:
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
String shareText = String.format(getActivity().getString(R.string.share_text), issue.getId(), issue.getPdfUrl());
shareIntent.putExtra(Intent.EXTRA_TEXT, shareText);
startActivity(Intent.createChooser(shareIntent, getResources().getString(R.string.share_issue)));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void viewOnISSUU() {
String url = String.format("http://issuu.com/themagpi/docs/%s", issue.getISSUU());
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
private void cancelDownload() {
Query query = new Query();
query.setFilterByStatus(
DownloadManager.STATUS_PAUSED|
DownloadManager.STATUS_PENDING|
DownloadManager.STATUS_RUNNING);
Cursor cur = dm.query(query);
int col = cur.getColumnIndex(DownloadManager.COLUMN_URI);
int colId = cur.getColumnIndex(DownloadManager.COLUMN_ID);
for(cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
if(issue.getPdfUrl().equals(cur.getString(col)))
dm.remove(cur.getLong(colId));
}
cur.close();
menu.findItem(R.id.menu_view).setVisible(true);
menu.findItem(R.id.menu_cancel_download).setVisible(false);
}
@Override
public void onStart() {
super.onStart();
Bundle args = getArguments();
if (args != null) {
issue = (Issue) args.getParcelable("IssueObject");
updateIssueView(issue);
}
}
private boolean isDownloading(String path) {
boolean isDownloading = false;
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterByStatus(
DownloadManager.STATUS_PAUSED|
DownloadManager.STATUS_PENDING|
DownloadManager.STATUS_RUNNING);
Cursor cur = dm.query(query);
int col = cur.getColumnIndex(DownloadManager.COLUMN_URI);
for(cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
isDownloading = path.equals(cur.getString(col));
if(isDownloading)
break;
}
cur.close();
return isDownloading;
}
public void updateIssueView(final Issue issue) {
this.issue = issue;
TextView issueText = (TextView) getActivity().findViewById(R.id.article);
issueText.setText(issue.getTitle() + " - " + issue.getDate());
String htmlArticle = "<img align='left' src='%s' style='margin-right:10px; height:120px; width:90px;'/>%s";
WebView editorialText = (WebView) getSherlockActivity().findViewById(R.id.text_editorial);
String content = issue.getEditorial().replace("\r\n", "<br/>").replace("\u00a0", " ");
editorialText.loadData(String.format(htmlArticle, issue.getCoverUrl(), content), "text/html; charset=utf-8", "utf-8");
editorialText.setVisibility(View.VISIBLE);
getSherlockActivity().findViewById(R.id.web_content_progress).setVisibility(View.GONE);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
public void onPause() {
super.onPause();
try {
getActivity().unregisterReceiver(downloadReceiver);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
}
@Override
public void refresh() {
((RefreshableContainer) getActivity()).startRefreshIndicator();
this.getSherlockActivity().findViewById(R.id.web_content_progress).setVisibility(View.VISIBLE);
}
public boolean canDisplayPdf(Context context) {
PackageManager packageManager = context.getPackageManager();
Intent testIntent = new Intent(Intent.ACTION_VIEW);
testIntent.setType("application/pdf");
if (packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0) {
return true;
} else {
return false;
}
}
public void onPrepareOptionsMenu(Menu menu) {
this.menu = menu;
Bundle args = getArguments();
if (args != null) {
issue = (Issue) args.getParcelable("IssueObject");
if(isDownloading(issue.getPdfUrl())) {
menu.findItem(R.id.menu_view).setVisible(false);
menu.findItem(R.id.menu_cancel_download).setVisible(true);
} else {
menu.findItem(R.id.menu_view).setVisible(true);
menu.findItem(R.id.menu_cancel_download).setVisible(false);
}
}
return;
}
}