2
2
3
3
import android .content .Intent ;
4
4
import android .net .Uri ;
5
+ import android .support .v4 .view .MenuItemCompat ;
5
6
import android .support .v4 .widget .SwipeRefreshLayout ;
6
7
import android .support .v7 .app .AppCompatActivity ;
7
8
import android .os .Bundle ;
8
9
import android .support .v7 .widget .RecyclerView ;
9
10
import android .util .Log ;
11
+ import android .view .Menu ;
12
+ import android .view .MenuItem ;
10
13
import android .view .View ;
14
+ import android .widget .AdapterView ;
15
+ import android .widget .ArrayAdapter ;
16
+ import android .widget .Spinner ;
11
17
12
18
import com .facebook .AccessToken ;
13
19
import com .facebook .GraphRequest ;
20
26
import java .text .ParseException ;
21
27
import java .text .SimpleDateFormat ;
22
28
import java .util .ArrayList ;
29
+ import java .util .Arrays ;
23
30
import java .util .Collections ;
24
31
import java .util .Comparator ;
25
32
import java .util .Date ;
@@ -31,12 +38,18 @@ public class ImagesActivity extends AppCompatActivity implements SwipeRefreshLay
31
38
private RecyclerView recyclerView ;
32
39
private SwipeRefreshLayout mRefreshlayout ;
33
40
private GraphRequest .Callback callback ;
41
+ private Spinner yearsSpinner ;
42
+ private ArrayList <String > filterYears = new ArrayList <>(Arrays .asList ("All" ));
43
+ private ArrayAdapter <CharSequence > yearsAdapter ;
44
+ private int selectedYearPosition = 0 ;
34
45
35
46
@ Override
36
47
protected void onCreate (Bundle savedInstanceState ) {
37
48
super .onCreate (savedInstanceState );
38
49
setContentView (R .layout .activity_images );
39
50
51
+ yearsAdapter = new ArrayAdapter <>(this , R .layout .simple_spinner_dropdown_item );
52
+
40
53
mRefreshlayout = findViewById (R .id .swiperefresh );
41
54
mRefreshlayout .setOnRefreshListener (this );
42
55
@@ -70,6 +83,12 @@ public void onCompleted(GraphResponse response) {
70
83
}
71
84
image .createdAt = date .getTime ();
72
85
86
+ // add years to filter by
87
+ String year = String .valueOf (date .getYear () + 1900 );
88
+ if (!filterYears .contains (year )) {
89
+ filterYears .add (year );
90
+ }
91
+
73
92
// find the closest image to 300x300px
74
93
FacebookPhotos .Datum .Image imageSource = null ;
75
94
for (FacebookPhotos .Datum .Image im : datum .images ) {
@@ -99,13 +118,11 @@ public void onCompleted(GraphResponse response) {
99
118
request .executeAsync ();
100
119
} else {
101
120
mRefreshlayout .setRefreshing (false );
121
+ yearsAdapter .clear ();
122
+ yearsAdapter .addAll (filterYears );
123
+ yearsAdapter .notifyDataSetChanged ();
102
124
sortImages (images );
103
- ImageRecyclerViewAdapter adapter = (ImageRecyclerViewAdapter ) recyclerView .getAdapter ();
104
- if (adapter != null ) {
105
- adapter .updateData (images );
106
- } else {
107
- recyclerView .setAdapter (new ImageRecyclerViewAdapter (activity , images ));
108
- }
125
+ filterFacebookPhotos ();
109
126
}
110
127
}
111
128
};
@@ -144,4 +161,53 @@ private void loadImages() {
144
161
GraphRequest request = new GraphRequest (AccessToken .getCurrentAccessToken (), "me/photos?fields=picture,reactions.limit(1).summary(true),link,images,created_time&type=uploaded&limit=500" , null , HttpMethod .GET , callback );
145
162
request .executeAsync ();
146
163
}
164
+
165
+ @ Override
166
+ public boolean onCreateOptionsMenu (Menu menu ) {
167
+ getMenuInflater ().inflate (R .menu .android_action_bar_spinner_menu , menu );
168
+
169
+ MenuItem item = menu .findItem (R .id .spinner );
170
+ yearsSpinner = (Spinner ) MenuItemCompat .getActionView (item );
171
+ yearsSpinner .setPadding (0 , 0 , 0 , 0 );
172
+ yearsSpinner .setAdapter (yearsAdapter );
173
+
174
+ yearsSpinner .setOnItemSelectedListener (new AdapterView .OnItemSelectedListener () {
175
+ @ Override
176
+ public void onItemSelected (AdapterView <?> adapterView , View view , int i , long l ) {
177
+ selectedYearPosition = i ;
178
+ filterFacebookPhotos ();
179
+ }
180
+
181
+ @ Override
182
+ public void onNothingSelected (AdapterView <?> adapterView ) {
183
+
184
+ }
185
+ });
186
+
187
+ return true ;
188
+ }
189
+
190
+ private void filterFacebookPhotos () {
191
+ ArrayList <FacebookImage > filteredImages = new ArrayList <>();
192
+
193
+ if (selectedYearPosition == 0 ) {
194
+ // all images
195
+ filteredImages = images ;
196
+ } else {
197
+ String year = filterYears .get (selectedYearPosition );
198
+ for (FacebookImage image : images ) {
199
+ Date imDate = new Date (image .createdAt );
200
+ if (imDate .getYear () + 1900 == Integer .valueOf (year )) {
201
+ filteredImages .add (image );
202
+ }
203
+ }
204
+ }
205
+
206
+ ImageRecyclerViewAdapter adapter = (ImageRecyclerViewAdapter ) recyclerView .getAdapter ();
207
+ if (adapter != null ) {
208
+ adapter .updateData (filteredImages );
209
+ } else {
210
+ recyclerView .setAdapter (new ImageRecyclerViewAdapter (this , filteredImages ));
211
+ }
212
+ }
147
213
}
0 commit comments