Skip to content

Commit 6cb7f73

Browse files
committed
Filter Images by Year
1 parent 8ad85dc commit 6cb7f73

File tree

3 files changed

+95
-6
lines changed

3 files changed

+95
-6
lines changed

Diff for: app/src/main/java/dragosholban/com/bestphotos/ImagesActivity.java

+72-6
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@
22

33
import android.content.Intent;
44
import android.net.Uri;
5+
import android.support.v4.view.MenuItemCompat;
56
import android.support.v4.widget.SwipeRefreshLayout;
67
import android.support.v7.app.AppCompatActivity;
78
import android.os.Bundle;
89
import android.support.v7.widget.RecyclerView;
910
import android.util.Log;
11+
import android.view.Menu;
12+
import android.view.MenuItem;
1013
import android.view.View;
14+
import android.widget.AdapterView;
15+
import android.widget.ArrayAdapter;
16+
import android.widget.Spinner;
1117

1218
import com.facebook.AccessToken;
1319
import com.facebook.GraphRequest;
@@ -20,6 +26,7 @@
2026
import java.text.ParseException;
2127
import java.text.SimpleDateFormat;
2228
import java.util.ArrayList;
29+
import java.util.Arrays;
2330
import java.util.Collections;
2431
import java.util.Comparator;
2532
import java.util.Date;
@@ -31,12 +38,18 @@ public class ImagesActivity extends AppCompatActivity implements SwipeRefreshLay
3138
private RecyclerView recyclerView;
3239
private SwipeRefreshLayout mRefreshlayout;
3340
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;
3445

3546
@Override
3647
protected void onCreate(Bundle savedInstanceState) {
3748
super.onCreate(savedInstanceState);
3849
setContentView(R.layout.activity_images);
3950

51+
yearsAdapter = new ArrayAdapter<>(this, R.layout.simple_spinner_dropdown_item);
52+
4053
mRefreshlayout = findViewById(R.id.swiperefresh);
4154
mRefreshlayout.setOnRefreshListener(this);
4255

@@ -70,6 +83,12 @@ public void onCompleted(GraphResponse response) {
7083
}
7184
image.createdAt = date.getTime();
7285

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+
7392
// find the closest image to 300x300px
7493
FacebookPhotos.Datum.Image imageSource = null;
7594
for (FacebookPhotos.Datum.Image im : datum.images) {
@@ -99,13 +118,11 @@ public void onCompleted(GraphResponse response) {
99118
request.executeAsync();
100119
} else {
101120
mRefreshlayout.setRefreshing(false);
121+
yearsAdapter.clear();
122+
yearsAdapter.addAll(filterYears);
123+
yearsAdapter.notifyDataSetChanged();
102124
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();
109126
}
110127
}
111128
};
@@ -144,4 +161,53 @@ private void loadImages() {
144161
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);
145162
request.executeAsync();
146163
}
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+
}
147213
}
+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:id="@android:id/text1"
3+
style="?android:attr/spinnerDropDownItemStyle"
4+
android:singleLine="true"
5+
android:layout_width="match_parent"
6+
android:layout_height="wrap_content"
7+
android:paddingTop="16dp"
8+
android:paddingBottom="16dp"
9+
android:paddingLeft="16dp"
10+
android:paddingRight="16dp"
11+
android:paddingStart="16dp"
12+
android:paddingEnd="16dp"
13+
android:textColor="#ffffff"
14+
android:background="@color/colorPrimary"
15+
android:ellipsize="marquee"/>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<menu xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto">
4+
<item android:id="@+id/spinner"
5+
android:title="Year"
6+
app:actionViewClass="android.widget.Spinner"
7+
app:showAsAction="always" />
8+
</menu>

0 commit comments

Comments
 (0)