-
Notifications
You must be signed in to change notification settings - Fork 9
/
ListingActivity.java
129 lines (106 loc) · 4.21 KB
/
ListingActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package com.mateuszkoslacz.moviper.rxsample.viper.view.activity;
import android.app.Activity;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.mateuszkoslacz.moviper.base.presenter.ViperPresentersList;
import com.mateuszkoslacz.moviper.base.view.activity.autoinject.passive.ViperAiPassiveActivity;
import com.mateuszkoslacz.moviper.iface.presenter.ViperPresenter;
import com.mateuszkoslacz.moviper.rxsample.R;
import com.mateuszkoslacz.moviper.rxsample.viper.contract.ListingContract;
import com.mateuszkoslacz.moviper.rxsample.viper.entity.User;
import com.mateuszkoslacz.moviper.rxsample.viper.presenter.ListingPresenter;
import com.mateuszkoslacz.moviper.rxsample.viper.view.adapter.UserAdapter;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.Observable;
import io.reactivex.subjects.PublishSubject;
import io.reactivex.subjects.Subject;
public class ListingActivity
// you can change base class to any Mosby Activity, ie. MvpLceActivity, MvpViewStateActivity, etc.
extends ViperAiPassiveActivity<ListingContract.View>
implements ListingContract.View, UserAdapter.UserClickListener {
public static final String PHOTO_URL_EXTRA_STRING = "PHOTO_URL_EXTRA_STRING";
@BindView(R.id.recycler_view)
protected RecyclerView mRecyclerView;
@BindView(R.id.errorView)
TextView mErrorViewTextView;
@BindView(R.id.loadingView)
ProgressBar mLoadingViewProgressBar;
PublishSubject<User> mUserClicks = PublishSubject.create();
private UserAdapter mAdapter;
public static void start(Activity activity, String avatarUrl, ImageView avatarImageView) {
Intent starter = new Intent(activity, FullscreenPhotoActivity.class);
starter.putExtra(PHOTO_URL_EXTRA_STRING, avatarUrl);
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat
.makeSceneTransitionAnimation(activity,
avatarImageView,
activity.getString(R.string.avatar_transition));
activity.startActivity(starter, optionsCompat.toBundle());
}
@Override
public Observable<User> getUserClicks() {
return mUserClicks;
}
@Override
public void setUserList(List<User> userList) {
mAdapter.setUserList(userList);
}
private void prepareRecyclerView() {
mAdapter = new UserAdapter(this);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onUserClick(User user) {
mUserClicks.onNext(user);
}
@Override
protected void onDestroy() {
super.onDestroy();
mAdapter = null;
}
@Override
public void showError(Throwable throwable) {
mErrorViewTextView.setVisibility(View.VISIBLE);
mLoadingViewProgressBar.setVisibility(View.INVISIBLE);
mRecyclerView.setVisibility(View.INVISIBLE);
mErrorViewTextView.setText(throwable.getLocalizedMessage());
}
@Override
public void showLoading() {
mErrorViewTextView.setVisibility(View.INVISIBLE);
mLoadingViewProgressBar.setVisibility(View.VISIBLE);
mRecyclerView.setVisibility(View.INVISIBLE);
}
@Override
public void showContent() {
mErrorViewTextView.setVisibility(View.INVISIBLE);
mLoadingViewProgressBar.setVisibility(View.INVISIBLE);
mRecyclerView.setVisibility(View.VISIBLE);
}
@NonNull
@Override
public ViperPresenter<ListingContract.View> createPresenter() {
return new ListingPresenter();
}
@Override
protected void injectViews() {
super.injectViews();
ButterKnife.bind(this);
prepareRecyclerView();
}
@Override
protected int getLayoutId() {
return R.layout.activity_listing;
}
}