Advertisement
Guest User

Untitled

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