package com.masterofcode.android.magreader.fragments; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; import org.kroz.activerecord.ActiveRecordBase; import org.kroz.activerecord.ActiveRecordException; import android.accounts.Account; import android.accounts.AccountManager; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.Fragment; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; import android.os.AsyncTask; import android.os.Bundle; import android.text.TextUtils; import android.util.Base64; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.webkit.WebView; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; import com.masterofcode.android.magreader.EpubViewerActivity; import com.masterofcode.android.magreader.MainShopActivity; import com.masterofcode.android.magreader.application.JtjApplication; import com.masterofcode.android.magreader.db.entity.IssueItem; import com.masterofcode.android.magreader.db.entity.LibraryItem; import com.masterofcode.android.magreader.library.LibraryManager; import com.masterofcode.android.magreader.utils.ApplicationUtils; import com.masterofcode.android.magreader.utils.ImageLoader; import com.masterofcode.android.magreader.utils.constants.Constants; import com.sandsmedia.apps.mobile.android.epub.lib.R; public class IssueDetailsFragment extends Fragment { OnIssueBuyNowBtnClickedListener listener; private IssueItem issueItem; private IssueItem mIssue; private ActiveRecordBase _db; private Button issueBuyNowBtn; private static IssueDetailsFragment Instance = null; public static IssueDetailsFragment getInstance(){ return Instance; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //mIssue = _db.find(IssueItem.class, false, "_id>?", new String[] { String.valueOf("0") }, null, null, "PUBLICATION_DATE DESC", null).get(getShownIndex()); mIssue = generateIssuesList().get(getShownIndex()); Log.d("purchase_test", "mIssue: " + mIssue.googlecheckoutid +" IssueDetailsFragment.onCreate(): " + getShownIndex()); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); //container.removeAllViewsInLayout(); //container.removeAllViews(); View mView = (View)inflater.inflate(R.layout.shop_issue_detail_layout, null); ScrollView issueItemView = (ScrollView) mView.findViewById(R.id.viewOfIssueItem); issueItemView.setVisibility(View.INVISIBLE); issueItemView.scrollTo(0, 0); LinearLayout loading = (LinearLayout) mView.findViewById(R.id.loadingIssueDetailLayout); loading.setVisibility(View.VISIBLE); TextView issueTitle = (TextView)mView.findViewById(R.id.issue_title); if ((mIssue.title != null) && (mIssue.title != "")) { issueTitle.setText(mIssue.title); } ImageView issueDetailImage = (ImageView)mView.findViewById(R.id.issueDetailsImage); if(ImageLoader.getImageMap().containsKey(mIssue.detailCoverUrl)) issueDetailImage.setImageBitmap(ImageLoader.getImageMap().get(mIssue.detailCoverUrl)); WebView issueSummary = (WebView)mView.findViewById(R.id.issue_summary); if ((mIssue.summary != null) && (mIssue.summary != "")) { String text_in_html = "<html><body>" + mIssue.summary + "</body></html>"; issueSummary.loadData(text_in_html, "text/html", null); } else if ((mIssue.shopDetailTextUrlText != null) && (mIssue.shopDetailTextUrlText != "")) { Log.i("MagazinReader" , mIssue.shopDetailTextUrlText); // OK.. if shopDetailTextUrlText is not null and if summary on issue is null we should load something here new DownloadIssueShopDetailsTextAsync(issueSummary).execute(mIssue.shopDetailTextUrlText); } TextView issuePublicationDate = (TextView)mView.findViewById(R.id.issue_publication_date); //issuePublicationDate.setText(ApplicationUtils.formatDateForIssueDetail(mIssue.publicationDate)); issuePublicationDate.setText(ApplicationUtils.getPublicationDateIssueDetails(mIssue.publicationDate)); TextView issuePrice = (TextView)mView.findViewById(R.id.issue_price); issueBuyNowBtn = (Button)mView.findViewById(R.id.issue_buttonBuyNow); if(!mIssue.isBuyed){ if(mIssue.downloadable){ issuePrice.setVisibility(View.GONE); issueBuyNowBtn.setText("FREE"); } else { issuePrice.setText("€" + mIssue.androidreadergooglecheckoutprice); } } else { issuePrice.setVisibility(View.GONE); if(!mIssue.isDownloaded){ issueBuyNowBtn.setText("DOWNLOAD"); } else { issueBuyNowBtn.setText("READ"); } } issueBuyNowBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub com.sandsmedia.content.jtj4ipad.2010.01 //PurchasedManager.GetInstance().insertOrder(getActivity().getApplicationContext(), "com.sandsmedia.content.jtj4ipad.2010.01", "com.sandsmedia.content.jtj4ipad.2010.01", Consts.PurchaseState.PURCHASED, 12, "payload"); if(!TextUtils.isEmpty(getGoogleAccount())) { if(!mIssue.downloadable) { if (!mIssue.isBuyed){ //Eddie Li // if (BillingHelper.getBillingService().requestPurchase(mIssue.googlecheckoutid, "payloadhere")) if (listener != null); { listener.onIssueBuyNowBtnClicked(mIssue); Log.d("purchase_test", "onClick: " + mIssue.googlecheckoutid); } } else if(mIssue.isBuyed && !mIssue.isDownloaded){ LibraryItem mLibraryItem = LibraryManager.GetInstance().getLibraryItemByGoogleCheckoutId(mIssue.googlecheckoutid); createDialog(R.string.download_issue_dialog_title, R.string.download_issue_dialog_message, android.R.drawable.stat_sys_download, mLibraryItem).show(); } else if(mIssue.isBuyed && mIssue.isDownloaded){ LibraryItem mLibraryItem = LibraryManager.GetInstance().getLibraryItemByGoogleCheckoutId(mIssue.googlecheckoutid); openIssue(mLibraryItem); } } else { if (!mIssue.isBuyed){ ((MainShopActivity)getActivity()).downloadIssue(mIssue.googlecheckoutid); } else if(mIssue.isBuyed && !mIssue.isDownloaded){ LibraryItem mLibraryItem = LibraryManager.GetInstance().getLibraryItemByGoogleCheckoutId(mIssue.googlecheckoutid); createDialog(R.string.download_issue_dialog_title, R.string.download_issue_dialog_message, android.R.drawable.stat_sys_download, mLibraryItem).show(); } else if(mIssue.isBuyed && mIssue.isDownloaded){ LibraryItem mLibraryItem = LibraryManager.GetInstance().getLibraryItemByGoogleCheckoutId(mIssue.googlecheckoutid); openIssue(mLibraryItem); } } } else { if(mIssue.downloadable) { ((MainShopActivity)getActivity()).downloadIssue(mIssue.googlecheckoutid); } } } }); issueItemView.setVisibility(View.VISIBLE); loading.setVisibility(View.GONE); Instance = this; return mView; //return inflater.inflate(R.layout.shop_issue_detail_layout, null); } private void openIssue(LibraryItem mLibraryItem){ Intent intent = new Intent(getActivity(), EpubViewerActivity.class); intent.putExtra(Constants.BUNDLE_KEY_EPUB_FILE_PATH, mLibraryItem.magazine_filepath); intent.putExtra(Constants.BUNDLE_KEY_EPUB_COVER_FILE_PATH, mLibraryItem.magazine_cover_filepath); startActivity(intent); } private Dialog createDialog(final int dialogTitle, final int dialogMessage, final int dialogIcon, final LibraryItem mLibraryItem) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle((getActivity()).getString(dialogTitle)) .setIcon(dialogIcon) .setMessage((getActivity()).getString(dialogMessage)) .setCancelable(false) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if(mLibraryItem.magazine_type == Constants.MAGAZINE_TYPE_NORMAL) { if(ApplicationUtils.isOnline(getActivity())){ LibraryManager.GetInstance().downloadMagazine(getActivity(), mLibraryItem); } else { ApplicationUtils.createNoInternetDialog(getActivity()).show(); } } if (getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){ ShopGalleryForViewFragment.getInstance().getIssueAdapter().notifyDataSetChanged(); } else { ShopGridForViewFragment.getInstance().getIssueAdapter().notifyDataSetChanged(); } issueBuyNowBtn.setText("READ"); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); return builder.create(); } /** * Asynctask for downloading the issues details from an url * @author Robert Munsky * */ class DownloadIssueShopDetailsTextAsync extends AsyncTask<String, String, String> { private WebView detailsWebView; private String text = ""; /** * Constructor * @param webView the view to place the text in */ protected DownloadIssueShopDetailsTextAsync(WebView webView) { detailsWebView = webView; } @Override protected String doInBackground(String... aurl) { BufferedReader in = null; try { URL url = new URL(aurl[0]); HttpURLConnection conexion = (HttpURLConnection) url.openConnection(); String authString = Constants.TECH_USER_LOGIN + ":" + Constants.TECH_USER_PASSWORD; byte[] authEncBytes = Base64.encode(authString.getBytes(), Base64.DEFAULT ); String authStringEnc = new String(authEncBytes); conexion.setRequestProperty("Authorization", "Basic " + authStringEnc); in = new BufferedReader(new InputStreamReader( conexion.getInputStream())); StringBuffer sb = new StringBuffer(); String inputLine; while ((inputLine = in.readLine()) != null) { sb.append(inputLine); } if (conexion.getResponseCode() == HttpURLConnection.HTTP_OK) { text = sb.toString(); } } catch (Exception e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (Exception e2) { e2.printStackTrace(); } } } return text; } @Override protected void onPostExecute(String result) { if (detailsWebView != null) { //this we do not use since we changed the issue_summary from TextView to WebView type //detailsWebView.setText(Html.fromHtml(text)); detailsWebView.loadData(text, "text/html", null); } } } public String getGoogleAccount(){ AccountManager manager = AccountManager.get(getActivity()); Account[] accounts = manager.getAccountsByType("com.google"); if (accounts.length == 0) { return null; } else { return accounts[0].name; } } public static IssueDetailsFragment newInstance(int index) { IssueDetailsFragment f = new IssueDetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } public int getShownIndex() { return getArguments().getInt("index", 0); } public void setissueBuyNowBtnTitle(String title){ issueBuyNowBtn.setText(title); } private List<IssueItem> generateIssuesList(){ ActiveRecordBase _db; List<IssueItem> mIssues = null; try { _db = ((JtjApplication)getActivity().getApplication()).getDatabase(); _db.open(); mIssues = _db.find(IssueItem.class, false, "_id>?", new String[] { String.valueOf("0") }, null, null, null, null); Log.d("purchase_test", "in generateArrayListToAdapter() mIssues size: " + mIssues.size()); } catch (ActiveRecordException exc) { exc.printStackTrace(); } return mIssues; } public interface OnIssueBuyNowBtnClickedListener { public void onIssueBuyNowBtnClicked(IssueItem issue); } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { listener = (OnIssueBuyNowBtnClickedListener)activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnIssueBuyNowBtnClickedListener"); } } }