package com.ijoomer.components.icms; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import org.json.JSONArray; import org.json.JSONObject; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Typeface; import android.net.Uri; import android.text.SpannableString; import android.text.style.StyleSpan; import android.text.style.UnderlineSpan; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.webkit.WebSettings.PluginState; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.Toast; import com.androidquery.AQuery; import com.androidquery.callback.AjaxStatus; import com.androidquery.callback.BitmapAjaxCallback; import com.ijoomer.caching.IjoomerCaching; import com.ijoomer.common.classes.IjoomerShareActivity; import com.ijoomer.common.classes.IjoomerUtilities; import com.ijoomer.common.classes.IjoomerWebviewClient; import com.ijoomer.custom.interfaces.IjoomerSharedPreferences; import com.ijoomer.customviews.IjoomerTextView; import com.ijoomer.library.icms.IcmsArticleDetailDataProvider; import com.ijoomer.media.player.IjoomerMediaPlayer; import com.ijoomer.src.R; import com.ijoomer.weservice.WebCallListener; import com.smart.framework.CustomAlertNeutral; import com.smart.framework.SmartActivity; import com.smart.framework.SmartFragment; /** * This Fragment Contains All Method Related To IcmsArticleDetailFragment. * * @author tasol * */ @SuppressLint({ "ValidFragment", "SimpleDateFormat" }) public class IcmsArticleDetailFragment extends SmartFragment implements IcmsTagHolder, IjoomerSharedPreferences { private LinearLayout lnrUrls; private ListView listArticleDetail; private IjoomerTextView txtCategory, txtWrittenBy, txtPublishedOn, txtTitle, txtPageIndicator; private ImageView imgFavorite, imgShare; private ImageView imageFullText; private ProgressBar pbrArticleDetail; private WebView webFull; private View headerView; private ArrayList<HashMap<String, String>> articleDetail; private IcmsArticleDetailDataProvider articleDetailDataProvider; private AQuery androidQuery; private Context mContext; private String articleId; private String currentId; private String FAVOURITE; private int position, totalPages; /** * Constructor * * @param mContext * represented {@link Context} * @param articleId * represented article id * @param position * represented article position * @param totalPages * represented articles total pages */ public IcmsArticleDetailFragment(Context mContext, String articleId, int position, int totalPages) { this.articleId = articleId; this.mContext = mContext; this.position = position; this.totalPages = totalPages; } /** * Overrides methods */ @Override public int setLayoutId() { return R.layout.icms_article_detail_listview; } @Override public View setLayoutView() { return null; } @SuppressLint("SetJavaScriptEnabled") @SuppressWarnings("deprecation") @Override public void initComponents(View currentView) { listArticleDetail = (ListView) currentView.findViewById(R.id.icmsListArticleDetail); pbrArticleDetail = (ProgressBar) currentView.findViewById(R.id.icmsPbr); LayoutInflater inflater = LayoutInflater.from(getActivity()); headerView = inflater.inflate(R.layout.icms_article_detail_header, null, false); articleDetailDataProvider = new IcmsArticleDetailDataProvider(mContext); txtPageIndicator = (IjoomerTextView) headerView.findViewById(R.id.icmsTxtIndicator); imgFavorite = (ImageView) headerView.findViewById(R.id.icmsImageFavorite); imgShare = (ImageView) headerView.findViewById(R.id.icmsImageShare); lnrUrls = (LinearLayout) headerView.findViewById(R.id.icmsLnrUrls); txtCategory = (IjoomerTextView) headerView.findViewById(R.id.icmsTxtCategory); txtPublishedOn = (IjoomerTextView) headerView.findViewById(R.id.icmsTxtPublishedOn); txtWrittenBy = (IjoomerTextView) headerView.findViewById(R.id.icmsTxtWriitenBy); txtTitle = (IjoomerTextView) headerView.findViewById(R.id.icmsTxtTitle); imageFullText = (ImageView) headerView.findViewById(R.id.icmsImageFullText); androidQuery = new AQuery(mContext); webFull = (WebView) headerView.findViewById(R.id.icmsWebViewFull); webFull.setBackgroundColor(0); webFull.getSettings().setJavaScriptEnabled(true); webFull.getSettings().setPluginState(PluginState.ON); webFull.setInitialScale(99); FAVOURITE = "favourite"; } @Override public void prepareViews(View currentView) { pbrArticleDetail.setVisibility(View.VISIBLE); txtPageIndicator.setText(position + " " + getString(R.string.of) + " " + totalPages); getArticleDetail(articleId); listArticleDetail.addHeaderView(headerView); listArticleDetail.setAdapter(null); listArticleDetail.setSelectionAfterHeaderView(); txtPageIndicator.setFocusable(true); } @Override public void setActionListeners(View currentView) { imgFavorite.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { imgFavorite.setVisibility(View.GONE); ArrayList<HashMap<String, String>> favouriteDataArray = new ArrayList<HashMap<String, String>>(); HashMap<String, String> favouriteData = new HashMap<String, String>(); favouriteData.put(ARTICLEID, articleDetail.get(0).get("id")); favouriteData.put(TITLE, articleDetail.get(0).get(TITLE)); favouriteData.put(INTROTEXT, articleDetail.get(0).get(INTROTEXT)); favouriteData.put(IMAGE, articleDetail.get(0).get("image_intro")); favouriteDataArray.add(favouriteData); new IjoomerCaching(mContext).createTable(favouriteDataArray, FAVOURITE); Toast.makeText(mContext, getString(R.string.addtofavorite), Toast.LENGTH_SHORT).show(); } }); imgShare.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { ((SmartActivity) getActivity()).loadNew(IjoomerShareActivity.class, getActivity(), false, "IN_SHARE_CAPTION", articleDetail.get(0).get(TITLE).toString(), "IN_SHARE_DESCRIPTION", articleDetail.get(0).get(INTROTEXT).toString(), "IN_SHARE_THUMB", articleDetail.get(0).get(IMAGEFULLTEXT).toString(), "IN_SHARE_SHARELINK", articleDetail.get(0).get(SHARELINK).toString()); } catch (Throwable e) { e.printStackTrace(); } } }); } /** * Class methods */ /** * This method used to get article details. * * @param id * represented article id */ public void getArticleDetail(String id) { currentId = id; articleDetailDataProvider.getArticleDetail(id, new WebCallListener() { @Override public void onProgressUpdate(int progressCount) { } @Override public void onCallComplete(final int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) { try { if (responseCode == 200) { if (data1.get(0).get("id").equalsIgnoreCase(currentId)) { articleDetail = data1; prepareArticleDetail(data1); pbrArticleDetail.setVisibility(View.GONE); } } else { pbrArticleDetail.setVisibility(View.GONE); IjoomerUtilities.getCustomOkDialog(getString(R.string.articles), getString(getResources().getIdentifier("code" + responseCode, "string", mContext.getPackageName())), getString(R.string.ok), R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() { @Override public void NeutralMethod() { } }); } } catch (Exception e) { e.printStackTrace(); } } }); } /** * This method used to prepare article details. * * @param data * represented article data */ public void prepareArticleDetail(ArrayList<HashMap<String, String>> data) { if (data != null) { try { if (data.get(0).get("urls") != null && data.get(0).get("urls").length() > 0) { lnrUrls.removeAllViews(); JSONArray jsonArrayUrls = new JSONArray(data.get(0).get("urls")); for (int i = 0; i < jsonArrayUrls.length(); i++) { JSONObject jsonObject = jsonArrayUrls.getJSONObject(i); IjoomerTextView textUrl = new IjoomerTextView(mContext); textUrl.setTag(jsonObject.get("url").toString()); textUrl.setTextColor(Color.parseColor(getString(R.color.icms_blue))); SpannableString spanString = new SpannableString(jsonObject.get("urltext").toString()); spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0); spanString.setSpan(new StyleSpan(Typeface.BOLD), 0, spanString.length(), 0); spanString.setSpan(new StyleSpan(Typeface.ITALIC), 0, spanString.length(), 0); textUrl.setText(spanString); textUrl.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String url = (String) v.getTag(); Intent intent = new Intent(mContext, IjoomerWebviewClient.class); intent.putExtra("url", url); startActivity(intent); } }); lnrUrls.addView(textUrl); } } txtTitle.setText(data.get(0).get(TITLE)); try { androidQuery.id(imageFullText).image(data.get(0).get(IMAGEFULLTEXT), true, true, ((SmartActivity) getActivity()).getDeviceWidth(), 0, new BitmapAjaxCallback() { @Override protected void callback(String url, ImageView iv, Bitmap bm, AjaxStatus status) { super.callback(url, iv, bm, status); if (bm != null) { imageFullText.setVisibility(View.VISIBLE); imageFullText.setImageBitmap(bm); } else { imageFullText.setVisibility(View.GONE); } } }); } catch (Exception e) { e.printStackTrace(); } if (data.get(0).get(PUBLISH_ON) != null && data.get(0).get(PUBLISH_ON).trim().length() > 0) { String dateStr = data.get(0).get(PUBLISH_ON); SimpleDateFormat curFormater = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date dateObj = curFormater.parse(dateStr); SimpleDateFormat postFormater = new SimpleDateFormat("MM/dd/yyyy"); txtPublishedOn.setText(postFormater.format(dateObj)); } if (data.get(0).get(CRETEDBY) != null && data.get(0).get(CRETEDBY).trim().length() > 0) { txtWrittenBy.setText(getString(R.string.writtenby) + " " + data.get(0).get(CRETEDBY)); } if (data.get(0).get(CATEGORY_TITLE) != null && data.get(0).get(CATEGORY_TITLE).trim().length() > 0) { txtCategory.setText(data.get(0).get(CATEGORY_TITLE)); } webFull.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); listArticleDetail.setSelectionAfterHeaderView(); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Intent activityintent = IcmsActivityFinder.findActivityFromUrl(mContext, url); if (activityintent == null) { Intent intent = new Intent(mContext, IjoomerWebviewClient.class); intent.putExtra("url", url); startActivity(intent); } else { startActivity(activityintent); } return true; } @Override public void onLoadResource(WebView view, String url) { try { if (url.contains("&video_id=")) { url = url.substring(url.indexOf("video_id=")); url = url.substring(0, url.indexOf("&")); String video_id = url.split("=")[1]; Intent lVideoIntent = new Intent(null, Uri.parse("ytv://" + video_id + ""), mContext, IjoomerMediaPlayer.class); startActivity(lVideoIntent); StringBuilder sb = new StringBuilder(); // StringBuilder(); sb.append("<HTML><HEAD><link rel=\"stylesheet\" type=\"text/css\" href=\"weblayout.css\" /></HEAD><body>"); String str = articleDetail.get(0).get(FULLTEXT).toString().trim(); str = str.replaceAll("<iframe width=\"[0-9]*", "<iframe width=\"100\\%"); str = str.replaceAll("<img[\\w]*", "<img height=\"auto\" style=\"max-width:100\\%\";"); sb.append(str); sb.append("</body></HTML>"); webFull.loadDataWithBaseURL("file:///android_asset/css/", sb.toString(), "text/html", "utf-8", null); } } catch (Exception e) { } super.onLoadResource(view, url); } }); StringBuilder sb = new StringBuilder(); // StringBuilder(); sb.append("<HTML><HEAD><link rel=\"stylesheet\" type=\"text/css\" href=\"weblayout.css\" /></HEAD><body>"); String str = data.get(0).get(FULLTEXT).toString().trim(); str = str.replaceAll("<iframe width=\"[0-9]*", "<iframe width=\"100\\%"); str = str.replaceAll("<img[\\w]*", "<img height=\"auto\" style=\"max-width:100\\%\";"); sb.append(str); sb.append("</body></HTML>"); webFull.loadDataWithBaseURL("file:///android_asset/css/", sb.toString(), "text/html", "utf-8", null); } catch (Throwable e) { e.printStackTrace(); } } } }