package net.jimblackler.yourphotoswatch; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.NonNull; import android.view.View; import com.facebook.FacebookRequestError; import com.facebook.HttpMethod; import com.facebook.Request; import com.facebook.Response; import com.facebook.Session; import com.facebook.SessionState; import com.facebook.UiLifecycleHelper; import com.facebook.model.GraphUser; import com.facebook.widget.LoginButton; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; public class FacebookSelectActivity extends BasePhotoSelectActivity { private UiLifecycleHelper uiHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.photo_select_facebook_activity); setEntries(new ArrayList<PhotoListEntry>()); uiHelper = new UiLifecycleHelper(this, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (!session.isOpened()) return; getPhotos(session); } }); uiHelper.onCreate(savedInstanceState); LoginButton loginButton = (LoginButton) findViewById(R.id.login_button); loginButton.setReadPermissions(Arrays.asList("user_photos")); loginButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() { @Override public void onUserInfoFetched(GraphUser user) { if (user == null) { // User logged out. setEntries(new ArrayList<PhotoListEntry>()); } } }); Session session = Session.getActiveSession(); if (session != null && session.isOpened()) { getPhotos(session); } } private void getPhotos(Session session) { findViewById(R.id.progress).setVisibility(View.VISIBLE); Bundle params = new Bundle(); params.putInt("limit", 500); params.putString("fields", "source,id,images,created_time"); new Request(session, "/me/photos/uploaded", params, HttpMethod.GET, new Request.Callback() { public void onCompleted(Response response) { FacebookRequestError error = response.getError(); if (error != null) { System.out.println(error.toString()); setEntries(null); return; } AsyncTask<JSONObject, Void, List<? extends PhotoListEntry>> asyncTask = new AsyncTask<JSONObject, Void, List<? extends PhotoListEntry>>() { @Override protected List<? extends PhotoListEntry> doInBackground(JSONObject... params) { try { List<FacebookPhotoListEntry> entries = new ArrayList<>(); int position = 0; JSONObject obj = params[0]; JSONArray array = obj.getJSONArray("data"); for (int i = 0; i < array.length(); i++) { JSONObject entry = array.getJSONObject(i); entries.add(new FacebookPhotoListEntry(position, entry)); position++; } final int sortOrder = getIntent().getIntExtra("sort", R.id.oldest_first); Collections.sort(entries, new Comparator<FacebookPhotoListEntry>(){ @Override public int compare(FacebookPhotoListEntry lhs, FacebookPhotoListEntry rhs) { if (sortOrder == R.id.oldest_first) return lhs.getPublishDate().compareTo(rhs.getPublishDate()); else return rhs.getPublishDate().compareTo(lhs.getPublishDate()); } }); return entries; } catch (JSONException e) { throw new RuntimeException(e); } } @Override protected void onPostExecute(List<? extends PhotoListEntry> entries) { setEntries(entries); } }; asyncTask.execute(response.getGraphObject().getInnerJSONObject()); } } ).executeAsync(); } @Override public void onResume() { super.onResume(); uiHelper.onResume(); } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); uiHelper.onSaveInstanceState(outState); } @Override public void onPause() { super.onPause(); uiHelper.onPause(); } @Override public void onDestroy() { super.onDestroy(); uiHelper.onDestroy(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { uiHelper.onActivityResult(requestCode, resultCode, data); } }