Advertisement
Guest User

ActivityPostDetails.java

a guest
Aug 4th, 2018
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.40 KB | None | 0 0
  1. package com.app.newsagni;
  2.  
  3. import android.app.Dialog;
  4. import android.content.Intent;
  5. import android.graphics.Color;
  6. import android.graphics.PorterDuff;
  7. import android.graphics.drawable.Drawable;
  8. import android.os.Bundle;
  9. import android.os.Handler;
  10. import android.support.design.widget.Snackbar;
  11. import android.support.v4.app.ActivityCompat;
  12. import android.support.v4.app.ActivityOptionsCompat;
  13. import android.support.v4.view.ViewCompat;
  14. import android.support.v4.widget.SwipeRefreshLayout;
  15. import android.support.v7.app.ActionBar;
  16. import android.support.v7.app.AppCompatActivity;
  17. import android.support.v7.widget.LinearLayoutManager;
  18. import android.support.v7.widget.RecyclerView;
  19. import android.support.v7.widget.Toolbar;
  20. import android.text.Html;
  21. import android.view.Menu;
  22. import android.view.MenuItem;
  23. import android.view.MotionEvent;
  24. import android.view.View;
  25. import android.view.Window;
  26. import android.view.WindowManager;
  27. import android.webkit.WebChromeClient;
  28. import android.webkit.WebView;
  29. import android.widget.Button;
  30. import android.widget.ImageView;
  31. import android.widget.RelativeLayout;
  32. import android.widget.TextView;
  33.  
  34. import com.app.newsagni.adapter.AdapterComments;
  35. import com.app.newsagni.connection.API;
  36. import com.app.newsagni.connection.RestAdapter;
  37. import com.app.newsagni.connection.callbacks.CallbackDetailsPost;
  38. import com.app.newsagni.data.AppConfig;
  39. import com.app.newsagni.data.Constant;
  40. import com.app.newsagni.data.SharedPref;
  41. import com.app.newsagni.model.Comment;
  42. import com.app.newsagni.model.Post;
  43. import com.app.newsagni.realm.RealmController;
  44. import com.app.newsagni.utils.NetworkCheck;
  45. import com.app.newsagni.utils.Tools;
  46. import com.google.android.gms.ads.AdRequest;
  47. import com.google.android.gms.ads.AdView;
  48.  
  49. import java.util.List;
  50.  
  51. import retrofit2.Call;
  52. import retrofit2.Callback;
  53. import retrofit2.Response;
  54.  
  55. public class ActivityPostDetails extends AppCompatActivity {
  56.  
  57.     public static final String EXTRA_OBJC = "key.EXTRA_OBJC";
  58.     public static final String EXTRA_NOTIF = "key.EXTRA_NOTIF";
  59.  
  60.     // give preparation animation activity transition
  61.     public static void navigate(AppCompatActivity activity, View transitionView, Post obj) {
  62.         Intent intent = new Intent(activity, ActivityPostDetails.class);
  63.         intent.putExtra(EXTRA_OBJC, obj);
  64.         ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionView, EXTRA_OBJC);
  65.         ActivityCompat.startActivity(activity, intent, options.toBundle());
  66.     }
  67.  
  68.     private Toolbar toolbar;
  69.     private ActionBar actionBar;
  70.     private View parent_view;
  71.     private MenuItem read_later_menu;
  72.     private SwipeRefreshLayout swipe_refresh;
  73.  
  74.     // extra obj
  75.     private Post post;
  76.     private boolean from_notif;
  77.  
  78.     private SharedPref sharedPref;
  79.     private boolean flag_read_later;
  80.     private Call<CallbackDetailsPost> callbackCall = null;
  81.  
  82.     @Override
  83.     protected void onCreate(Bundle savedInstanceState) {
  84.         super.onCreate(savedInstanceState);
  85.         setContentView(R.layout.activity_post_details);
  86.         parent_view = findViewById(android.R.id.content);
  87.         swipe_refresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
  88.         sharedPref = new SharedPref(this);
  89.  
  90.         // animation transition
  91.         ViewCompat.setTransitionName(findViewById(R.id.image), EXTRA_OBJC);
  92.  
  93.         // get extra object
  94.         post = (Post) getIntent().getSerializableExtra(EXTRA_OBJC);
  95.         from_notif = getIntent().getBooleanExtra(EXTRA_NOTIF, false);
  96.         initToolbar();
  97.  
  98.         displayPostData(true);
  99.         prepareAds();
  100.  
  101.         if (post.isDraft()) requestAction();
  102.  
  103.         // on swipe
  104.         swipe_refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
  105.             @Override
  106.             public void onRefresh() {
  107.                 requestAction();
  108.             }
  109.         });
  110.  
  111.         // get enabled controllers
  112.         Tools.requestInfoApi(this);
  113.  
  114.         // analytics tracking
  115.        // ThisApplication.getInstance().trackScreenView("View post : "+post.title_plain);
  116.  
  117.     }
  118.  
  119.     private void initToolbar() {
  120.         toolbar = (Toolbar) findViewById(R.id.toolbar);
  121.         setSupportActionBar(toolbar);
  122.         actionBar = getSupportActionBar();
  123.         actionBar.setDisplayHomeAsUpEnabled(true);
  124.         actionBar.setHomeButtonEnabled(true);
  125.         actionBar.setTitle("");
  126.     }
  127.  
  128.     private void requestDetailsPostApi() {
  129.         API api = RestAdapter.createAPI();
  130.         callbackCall = api.getPostDetialsById(post.id);
  131.         callbackCall.enqueue(new Callback<CallbackDetailsPost>() {
  132.             @Override
  133.             public void onResponse(Call<CallbackDetailsPost> call, Response<CallbackDetailsPost> response) {
  134.                 CallbackDetailsPost resp = response.body();
  135.                 if (resp != null && resp.status.equals("ok")) {
  136.                     post = resp.post;
  137.                     displayPostData(false);
  138.                     swipeProgress(false);
  139.                 } else {
  140.                     onFailRequest();
  141.                 }
  142.             }
  143.  
  144.             @Override
  145.             public void onFailure(Call<CallbackDetailsPost> call, Throwable t) {
  146.                 if (!call.isCanceled()) onFailRequest();
  147.             }
  148.  
  149.         });
  150.     }
  151.  
  152.     private void requestAction() {
  153.         showFailedView(false, "");
  154.         swipeProgress(true);
  155.         new Handler().postDelayed(new Runnable() {
  156.             @Override
  157.             public void run() {
  158.                 requestDetailsPostApi();
  159.             }
  160.         }, Constant.DELAY_TIME_MEDIUM);
  161.     }
  162.  
  163.     private void onFailRequest() {
  164.         swipeProgress(false);
  165.         if (NetworkCheck.isConnect(this)) {
  166.             showFailedView(true, getString(R.string.failed_text));
  167.         } else {
  168.             showFailedView(true, getString(R.string.no_internet_text));
  169.         }
  170.     }
  171.  
  172.     private void displayPostData(boolean is_draft) {
  173.         ((TextView) findViewById(R.id.title)).setText(Html.fromHtml(post.title));
  174.  
  175.         WebView webview = (WebView) findViewById(R.id.content);
  176.         String html_data = "<style>img{max-width:100%;height:auto;} iframe{width:100%;}</style> ";
  177.         html_data += post.content;
  178.         webview.getSettings().setJavaScriptEnabled(true);
  179.         webview.getSettings();
  180.         webview.getSettings().setBuiltInZoomControls(true);
  181.         webview.setBackgroundColor(Color.TRANSPARENT);
  182.         webview.setWebChromeClient(new WebChromeClient());
  183.         webview.loadData(html_data, "text/html; charset=UTF-8", null);
  184.         // disable scroll on touch
  185.         webview.setOnTouchListener(new View.OnTouchListener() {
  186.             public boolean onTouch(View v, MotionEvent event) {
  187.                 return (event.getAction() == MotionEvent.ACTION_MOVE);
  188.             }
  189.         });
  190.  
  191.         ((TextView) findViewById(R.id.date)).setText(Tools.getFormatedDate(post.date));
  192.         ((TextView) findViewById(R.id.comment)).setText(post.comment_count + "");
  193.         ((TextView) findViewById(R.id.tv_comment)).setText(getString(R.string.show_tv_comments) + " (" + post.comment_count + ")");
  194.         ((TextView) findViewById(R.id.category)).setText(Html.fromHtml(Tools.getCategoryTxt(post.categories)));
  195.         Tools.displayImageThumbnail(this, post, ((ImageView) findViewById(R.id.image)));
  196.  
  197.         if(is_draft){
  198.            return;
  199.         }
  200.         // when show comments click
  201.         (findViewById(R.id.bt_show_comment)).setOnClickListener(new View.OnClickListener() {
  202.             @Override
  203.             public void onClick(View view) {
  204.                 if (post.comments.size() <= 0) {
  205.                     Snackbar.make(parent_view, R.string.post_have_no_comment, Snackbar.LENGTH_SHORT).show();
  206.                     return;
  207.                 }
  208.                 dialogShowComments(post.comments);
  209.             }
  210.         });
  211.  
  212.         // when post comments click
  213.         (findViewById(R.id.bt_send_comment)).setOnClickListener(new View.OnClickListener() {
  214.             @Override
  215.             public void onClick(View view) {
  216.                 if (!AppConfig.MUST_REGISTER_TO_COMMENT) {
  217.                     Intent i = new Intent(ActivityPostDetails.this, ActivityWebView.class);
  218.  
  219.                     i.putExtra(EXTRA_OBJC, post);
  220.                     startActivity(i);
  221.                 } else {
  222.                     Tools.dialogCommentNeedLogin(ActivityPostDetails.this, post.url);
  223.                 }
  224.             }
  225.         });
  226.  
  227.     }
  228.  
  229.     @Override
  230.     public boolean onOptionsItemSelected(MenuItem item) {
  231.         int item_id = item.getItemId();
  232.         switch (item_id) {
  233.             case android.R.id.home:
  234.                 onBackPressed();
  235.                 break;
  236.             case R.id.action_share:
  237.                 Tools.methodShare(ActivityPostDetails.this, post);
  238.                 break;
  239.             case R.id.action_later:
  240.                 if (post.isDraft()) {
  241.                     Snackbar.make(parent_view, R.string.cannot_add_to_read_later, Snackbar.LENGTH_SHORT).show();
  242.                     return true;
  243.                 }
  244.                 String str;
  245.                 if (flag_read_later) {
  246.                     RealmController.with(this).deletePost(post.id);
  247.                     str = getString(R.string.remove_from_msg);
  248.                 } else {
  249.                     RealmController.with(this).savePost(post);
  250.                     str = getString(R.string.added_to_msg);
  251.                 }
  252.                 Snackbar.make(parent_view, "Post " + str + " Read Later", Snackbar.LENGTH_SHORT).show();
  253.                 refreshReadLaterMenu();
  254.                 break;
  255.             case R.id.action_browser:
  256.                 Tools.directLinkToBrowser(this, post.url);
  257.                 break;
  258.         }
  259.         return super.onOptionsItemSelected(item);
  260.     }
  261.  
  262.     @Override
  263.     public boolean onCreateOptionsMenu(final Menu menu) {
  264.         getMenuInflater().inflate(R.menu.menu_activity_post_details, menu);
  265.         read_later_menu = menu.findItem(R.id.action_later);
  266.         refreshReadLaterMenu();
  267.         return true;
  268.     }
  269.  
  270.     private void dialogShowComments(List<Comment> items) {
  271.  
  272.         final Dialog dialog = new Dialog(ActivityPostDetails.this);
  273.         dialog.setCancelable(true);
  274.         dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // before
  275.         dialog.setContentView(R.layout.dialog_comments);
  276.  
  277.         WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
  278.         lp.copyFrom(dialog.getWindow().getAttributes());
  279.         lp.width = WindowManager.LayoutParams.MATCH_PARENT;
  280.         lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
  281.  
  282.         RecyclerView recyclerView = dialog.findViewById(R.id.recyclerView);
  283.         recyclerView.setLayoutManager(new LinearLayoutManager(this));
  284.         recyclerView.setHasFixedSize(true);
  285.         AdapterComments mAdapter = new AdapterComments(this, items);
  286.         recyclerView.setAdapter(mAdapter);
  287.  
  288.         dialog.findViewById(R.id.img_close).setOnClickListener(new View.OnClickListener() {
  289.             @Override
  290.             public void onClick(View view) {
  291.                 dialog.dismiss();
  292.             }
  293.         });
  294.  
  295.         dialog.show();
  296.         dialog.getWindow().setAttributes(lp);
  297.     }
  298.  
  299.     private void refreshReadLaterMenu() {
  300.         flag_read_later = RealmController.with(this).getPost(post.id) != null;
  301.         Drawable drawable = read_later_menu.getIcon();
  302.         if (flag_read_later) {
  303.             drawable.setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_ATOP);
  304.         } else {
  305.             drawable.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);
  306.         }
  307.     }
  308.  
  309.     private void prepareAds() {
  310.         if (AppConfig.ENABLE_ADSENSE && NetworkCheck.isConnect(getApplicationContext())) {
  311.             AdView mAdView = (AdView) findViewById(R.id.ad_view);
  312.             AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build();
  313.             // Start loading the ad in the background.
  314.             mAdView.loadAd(adRequest);
  315.         } else {
  316.             findViewById(R.id.banner_layout).setVisibility(View.GONE);
  317.         }
  318.     }
  319.  
  320.     private void showFailedView(boolean show, String message) {
  321.         View lyt_failed = findViewById(R.id.lyt_failed);
  322.         View lyt_main_content = findViewById(R.id.lyt_main_content);
  323.  
  324.         ((TextView) findViewById(R.id.failed_message)).setText(message);
  325.         if (show) {
  326.             lyt_main_content.setVisibility(View.GONE);
  327.             lyt_failed.setVisibility(View.VISIBLE);
  328.         } else {
  329.             lyt_main_content.setVisibility(View.VISIBLE);
  330.             lyt_failed.setVisibility(View.GONE);
  331.         }
  332.         findViewById(R.id.failed_retry).setOnClickListener(new View.OnClickListener() {
  333.             @Override
  334.             public void onClick(View view) {
  335.                 requestAction();
  336.             }
  337.         });
  338.     }
  339.  
  340.     private void swipeProgress(final boolean show) {
  341.         if (!show) {
  342.             swipe_refresh.setRefreshing(show);
  343.             return;
  344.         }
  345.         swipe_refresh.post(new Runnable() {
  346.             @Override
  347.             public void run() {
  348.                 swipe_refresh.setRefreshing(show);
  349.             }
  350.         });
  351.     }
  352.  
  353.     @Override
  354.     public void onBackPressed() {
  355.         if(from_notif) {
  356.             startActivity(new Intent(getApplicationContext(), ActivityMain.class));
  357.             finish();
  358.         } else {
  359.             super.onBackPressed();
  360.         }
  361.     }
  362. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement