PostFragment.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. package club.thepenguins.android.fragments;
  2. import android.os.Bundle;
  3. import androidx.fragment.app.Fragment;
  4. import android.os.Handler;
  5. import android.util.Log;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.webkit.WebView;
  10. import android.widget.ImageView;
  11. import android.widget.ProgressBar;
  12. import android.widget.TextView;
  13. import com.squareup.picasso.Callback;
  14. import com.squareup.picasso.NetworkPolicy;
  15. import com.squareup.picasso.Picasso;
  16. import org.jsoup.Jsoup;
  17. import org.jsoup.nodes.Document;
  18. import org.jsoup.nodes.Element;
  19. import org.jsoup.select.Elements;
  20. import java.util.ArrayList;
  21. import club.thepenguins.android.R;
  22. import club.thepenguins.android.api.APIService;
  23. import club.thepenguins.android.data.IndividualPost;
  24. import club.thepenguins.android.data.PostContent;
  25. import retrofit2.Call;
  26. import retrofit2.Response;
  27. import retrofit2.Retrofit;
  28. import retrofit2.converter.gson.GsonConverterFactory;
  29. public class PostFragment extends Fragment {
  30. private static final String ARG_PARAM1 = "param1";
  31. private static final String ARG_PARAM2 = "param2";
  32. private static final String ARG_PARAM3 = "param3";
  33. private static final String ARG_PARAM4 = "param4";
  34. private String mParam1;
  35. private String mParam2;
  36. private String mParam3;
  37. private String mParam4;
  38. private ArrayList<PostContent> postData;
  39. private ProgressBar progressBar;
  40. public PostFragment() {
  41. // Required empty public constructor
  42. }
  43. public static PostFragment newInstance(String param1, String param2, String param3, String param4) {
  44. PostFragment fragment = new PostFragment();
  45. Bundle args = new Bundle();
  46. args.putString(ARG_PARAM1, param1);
  47. args.putString(ARG_PARAM2, param2);
  48. args.putString(ARG_PARAM3, param3);
  49. args.putString(ARG_PARAM4, param4);
  50. fragment.setArguments(args);
  51. return fragment;
  52. }
  53. @Override
  54. public void onCreate(Bundle savedInstanceState) {
  55. super.onCreate(savedInstanceState);
  56. if (getArguments() != null) {
  57. mParam1 = getArguments().getString(ARG_PARAM1);
  58. mParam2 = getArguments().getString(ARG_PARAM2);
  59. mParam3 = getArguments().getString(ARG_PARAM3);
  60. mParam4 = getArguments().getString(ARG_PARAM4);
  61. }
  62. }
  63. @Override
  64. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  65. Bundle savedInstanceState) {
  66. View rootView = inflater.inflate(R.layout.fragment_post, container, false);
  67. ImageView imageView = rootView.findViewById(R.id.postImg);
  68. TextView textView = rootView.findViewById(R.id.author);
  69. TextView textView2 = rootView.findViewById(R.id.postTitle);
  70. textView2.setText(mParam3);
  71. textView.setText(mParam4);
  72. progressBar = rootView.findViewById(R.id.progress);
  73. Picasso.get()
  74. .load(mParam2)
  75. .placeholder(R.color.preloadColor)
  76. .fit()
  77. .centerCrop()
  78. .networkPolicy(NetworkPolicy.OFFLINE)
  79. .into(imageView, new Callback() {
  80. @Override
  81. public void onSuccess() {
  82. }
  83. @Override
  84. public void onError(Exception e) {
  85. Picasso.get()
  86. .load(mParam2)
  87. .placeholder(R.color.preloadColor)
  88. .fit()
  89. .centerCrop()
  90. .into(imageView);
  91. }
  92. });
  93. postData = new ArrayList<>();
  94. postData.clear();
  95. getRetrofit(mParam1);
  96. Log.d("TAG", "onCreateView: " + mParam1);
  97. final Handler handler = new Handler();
  98. handler.postDelayed(new Runnable() {
  99. @Override
  100. public void run() {
  101. Document doc = Jsoup.parse(postData.get(0).getContent());
  102. Elements images = doc.select("img");
  103. Elements iframes = doc.select("iframe");
  104. for (Element image : images) {
  105. image.attr("width", "100%");
  106. image.attr("height", "240px");
  107. }
  108. for (Element iframe : iframes) {
  109. if (iframe.attr("width").isEmpty()) {
  110. iframe.attr("width", "100%");
  111. }
  112. }
  113. String htmlString = doc.html();
  114. WebView myWebView = rootView.findViewById(R.id.webview);
  115. myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "UTF-8", null);
  116. myWebView.getSettings().getJavaScriptEnabled();
  117. progressBar.setVisibility(View.GONE);
  118. }
  119. }, 2000);
  120. return rootView;
  121. }
  122. private void getRetrofit(String postUrl) {
  123. progressBar.setVisibility(View.VISIBLE);
  124. Retrofit retrofit = new Retrofit.Builder()
  125. .baseUrl(postUrl + "/")
  126. .addConverterFactory(GsonConverterFactory.create())
  127. .build();
  128. APIService service = retrofit.create(APIService.class);
  129. Call<IndividualPost> call = service.getPostContent();
  130. call.enqueue(new retrofit2.Callback<IndividualPost>() {
  131. @Override
  132. public void onResponse(Call<IndividualPost> call, Response<IndividualPost> response) {
  133. if (postData.size() > 1) {
  134. postData.clear();
  135. }
  136. postData.add(new PostContent(response.body().getContent().getRendered()));
  137. }
  138. @Override
  139. public void onFailure(Call<IndividualPost> call, Throwable t) {
  140. Log.d("PostRecyclerAdapter", "onFailure: ", t);
  141. }
  142. });
  143. }
  144. }