Guest User

Untitled

a guest
Nov 21st, 2018
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.79 KB | None | 0 0
  1. package com.example.android.maximfialko;
  2.  
  3. import android.content.Intent;
  4. import android.content.res.Configuration;
  5. import android.os.Bundle;
  6. import android.view.Menu;
  7. import android.view.MenuItem;
  8. import android.view.View;
  9. import android.widget.ProgressBar;
  10.  
  11. import com.example.android.maximfialko.Utils.DensityPixelMath;
  12. import com.example.android.maximfialko.network.DTOmodels.MapperDtoToNews;
  13. import com.example.android.maximfialko.Utils.Visibilty;
  14. import com.example.android.maximfialko.Utils.Margins;
  15. import com.example.android.maximfialko.data.NewsAdapter;
  16. import com.example.android.maximfialko.data.NewsItem;
  17. import com.example.android.maximfialko.network.RestApi;
  18.  
  19. import java.io.IOException;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22.  
  23. import androidx.annotation.NonNull;
  24. import androidx.annotation.Nullable;
  25. import androidx.appcompat.app.AppCompatActivity;
  26. import androidx.recyclerview.widget.GridLayoutManager;
  27. import androidx.recyclerview.widget.LinearLayoutManager;
  28. import androidx.recyclerview.widget.RecyclerView;
  29. import io.reactivex.android.schedulers.AndroidSchedulers;
  30. import io.reactivex.disposables.CompositeDisposable;
  31. import io.reactivex.disposables.Disposable;
  32. import io.reactivex.schedulers.Schedulers;
  33.  
  34. public class NewsListActivity extends AppCompatActivity {
  35.  
  36. private NewsAdapter adapter;
  37. private ProgressBar progress;
  38. private RecyclerView rv;
  39. private View error;
  40.  
  41. private final CompositeDisposable compositeDisposable = new CompositeDisposable();
  42.  
  43. @Override
  44. protected void onCreate(@Nullable Bundle savedInstanceState) {
  45. super.onCreate(savedInstanceState);
  46. setContentView(R.layout.news_list_activity);
  47.  
  48. progress = (ProgressBar) findViewById(R.id.progress);
  49. rv = (RecyclerView) findViewById(R.id.recycler_view);
  50. error = (View) findViewById(R.id.lt_error);
  51.  
  52. adapter = new NewsAdapter(this, new ArrayList<>(), clickListener);
  53.  
  54. //ps to dp //util class
  55. DensityPixelMath DPmath = new DensityPixelMath(getApplicationContext());
  56. //add Margins to Recycler View
  57. Margins decoration = new Margins((int) DPmath.dpFromPx(44), 1);
  58.  
  59. rv.addItemDecoration(decoration);
  60. rv.setAdapter(adapter);
  61.  
  62. if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
  63. rv.setLayoutManager(new LinearLayoutManager(this));
  64. } else {
  65. rv.setLayoutManager(new GridLayoutManager(this, 2));
  66. }
  67. }
  68.  
  69. //переход на DetailedNewsActivity через WebView
  70. private final NewsAdapter.OnItemClickListener clickListener = position -> openDetailedNewsActivity(position.getTextUrl());
  71.  
  72. //асинхронная загрузка списка новостей
  73. private void loadItems(@NonNull String category) {
  74. showProgress(true);
  75. final Disposable searchDisposable = RestApi.getInstance()
  76. .topStoriesEndpoint()
  77. .getNews(category)
  78. .map(response -> MapperDtoToNews.map(response.getNews()))
  79. .subscribeOn(Schedulers.io())
  80. .observeOn(AndroidSchedulers.mainThread())
  81. .subscribe(newsItems -> setupNews(newsItems), throwable -> NewsListActivity.this.handleError(throwable));
  82. compositeDisposable.add(searchDisposable);
  83. }
  84.  
  85. @Override
  86. protected void onStart() {
  87. super.onStart();
  88. //TODO: SpinnerAdapter for category usage
  89. loadItems("home");
  90. }
  91.  
  92. @Override
  93. protected void onStop() {
  94. super.onStop();
  95. showProgress(false);
  96. compositeDisposable.dispose();
  97. }
  98.  
  99. @Override
  100. protected void onDestroy() {
  101. super.onDestroy();
  102. adapter = null;
  103. rv = null;
  104. progress = null;
  105. }
  106.  
  107. private void handleError(Throwable throwable) {
  108. if (throwable instanceof IOException) {
  109. showError(true);
  110. return;
  111. }
  112. showError(true);
  113. }
  114.  
  115. private void setupNews(List<NewsItem> newsItems) {
  116. showProgress(false);
  117. updateItems(newsItems);
  118. }
  119.  
  120. //метод перехода на активити DetailedNews
  121. public void openDetailedNewsActivity(String url) {
  122. DetailedNewsActivity.start(this, url);
  123. }
  124.  
  125. public void showProgress(boolean show) {
  126. Visibilty.setVisible(progress, show);
  127. Visibilty.setVisible(rv, !show);
  128. Visibilty.setVisible(error, !show);
  129. }
  130.  
  131. void showError(boolean show) {
  132. Visibilty.setVisible(progress, !show);
  133. Visibilty.setVisible(rv, !show);
  134. Visibilty.setVisible(error, show);
  135. }
  136.  
  137. private void updateItems(@Nullable List<NewsItem> news) {
  138. if (adapter != null) adapter.replaceItems(news);
  139.  
  140. Visibilty.setVisible(rv, true);
  141. Visibilty.setVisible(progress, false);
  142. Visibilty.setVisible(error, false);
  143. }
  144. }
Add Comment
Please, Sign In to add comment