Skip to content

Commit

Permalink
Filter Images by Year
Browse files Browse the repository at this point in the history
  • Loading branch information
dragosholban committed Mar 18, 2018
1 parent 8ad85dc commit 6cb7f73
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 6 deletions.
78 changes: 72 additions & 6 deletions app/src/main/java/dragosholban/com/bestphotos/ImagesActivity.java
Expand Up @@ -2,12 +2,18 @@

import android.content.Intent;
import android.net.Uri;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import com.facebook.AccessToken;
import com.facebook.GraphRequest;
Expand All @@ -20,6 +26,7 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
Expand All @@ -31,12 +38,18 @@ public class ImagesActivity extends AppCompatActivity implements SwipeRefreshLay
private RecyclerView recyclerView;
private SwipeRefreshLayout mRefreshlayout;
private GraphRequest.Callback callback;
private Spinner yearsSpinner;
private ArrayList<String> filterYears = new ArrayList<>(Arrays.asList("All"));
private ArrayAdapter<CharSequence> yearsAdapter;
private int selectedYearPosition = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_images);

yearsAdapter = new ArrayAdapter<>(this, R.layout.simple_spinner_dropdown_item);

mRefreshlayout = findViewById(R.id.swiperefresh);
mRefreshlayout.setOnRefreshListener(this);

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

// add years to filter by
String year = String.valueOf(date.getYear() + 1900);
if (!filterYears.contains(year)) {
filterYears.add(year);
}

// find the closest image to 300x300px
FacebookPhotos.Datum.Image imageSource = null;
for (FacebookPhotos.Datum.Image im : datum.images) {
Expand Down Expand Up @@ -99,13 +118,11 @@ public void onCompleted(GraphResponse response) {
request.executeAsync();
} else {
mRefreshlayout.setRefreshing(false);
yearsAdapter.clear();
yearsAdapter.addAll(filterYears);
yearsAdapter.notifyDataSetChanged();
sortImages(images);
ImageRecyclerViewAdapter adapter = (ImageRecyclerViewAdapter) recyclerView.getAdapter();
if (adapter != null) {
adapter.updateData(images);
} else {
recyclerView.setAdapter(new ImageRecyclerViewAdapter(activity, images));
}
filterFacebookPhotos();
}
}
};
Expand Down Expand Up @@ -144,4 +161,53 @@ private void loadImages() {
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);
request.executeAsync();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.android_action_bar_spinner_menu, menu);

MenuItem item = menu.findItem(R.id.spinner);
yearsSpinner = (Spinner) MenuItemCompat.getActionView(item);
yearsSpinner.setPadding(0, 0, 0, 0);
yearsSpinner.setAdapter(yearsAdapter);

yearsSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
selectedYearPosition = i;
filterFacebookPhotos();
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}
});

return true;
}

private void filterFacebookPhotos() {
ArrayList<FacebookImage> filteredImages = new ArrayList<>();

if (selectedYearPosition == 0) {
// all images
filteredImages = images;
} else {
String year = filterYears.get(selectedYearPosition);
for (FacebookImage image : images) {
Date imDate = new Date(image.createdAt);
if (imDate.getYear() + 1900 == Integer.valueOf(year)) {
filteredImages.add(image);
}
}
}

ImageRecyclerViewAdapter adapter = (ImageRecyclerViewAdapter) recyclerView.getAdapter();
if (adapter != null) {
adapter.updateData(filteredImages);
} else {
recyclerView.setAdapter(new ImageRecyclerViewAdapter(this, filteredImages));
}
}
}
15 changes: 15 additions & 0 deletions app/src/main/res/layout/simple_spinner_dropdown_item.xml
@@ -0,0 +1,15 @@
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:textColor="#ffffff"
android:background="@color/colorPrimary"
android:ellipsize="marquee"/>
8 changes: 8 additions & 0 deletions app/src/main/res/menu/android_action_bar_spinner_menu.xml
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/spinner"
android:title="Year"
app:actionViewClass="android.widget.Spinner"
app:showAsAction="always" />
</menu>

0 comments on commit 6cb7f73

Please sign in to comment.