diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java index fbf2cecab..eb83792a5 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java @@ -53,7 +53,6 @@ import android.support.v7.widget.PopupMenu; import android.support.v7.widget.SearchView; import android.support.v7.widget.SwitchCompat; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.util.Patterns; import android.view.Gravity; import android.view.LayoutInflater; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ReorderTimelinesActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ReorderTimelinesActivity.java index 3b0990b84..ba5988728 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ReorderTimelinesActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ReorderTimelinesActivity.java @@ -187,7 +187,10 @@ public class ReorderTimelinesActivity extends BaseActivity implements OnStartDra new HttpsConnection(ReorderTimelinesActivity.this).get("https://" + instanceName + "/api/v1/timelines/public", 10, null, null); }else if( radioGroup.getCheckedRadioButtonId() == R.id.misskey_instance) { new HttpsConnection(ReorderTimelinesActivity.this).post("https://" + instanceName + "/api/notes/local-timeline", 10, null, null); + }else if( radioGroup.getCheckedRadioButtonId() == R.id.gnu_instance) { + new HttpsConnection(ReorderTimelinesActivity.this).get("https://" + instanceName + "/api/statuses/public_timeline.json", 10, null, null); } + runOnUiThread(new Runnable() { public void run() { dialog.dismiss(); @@ -199,6 +202,8 @@ public class ReorderTimelinesActivity extends BaseActivity implements OnStartDra new InstancesDAO(ReorderTimelinesActivity.this, db).insertInstance(instanceName, "PIXELFED"); } else if( radioGroup.getCheckedRadioButtonId() == R.id.misskey_instance) { new InstancesDAO(ReorderTimelinesActivity.this, db).insertInstance(instanceName, "MISSKEY"); + }else if( radioGroup.getCheckedRadioButtonId() == R.id.gnu_instance) { + new InstancesDAO(ReorderTimelinesActivity.this, db).insertInstance(instanceName, "GNU"); } if( timelines != null && adapter != null) { List instance = new InstancesDAO(ReorderTimelinesActivity.this, db).getInstanceByName(instanceName); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveFeedsAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveFeedsAsyncTask.java index 9f224caa9..6279f1c3b 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveFeedsAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveFeedsAsyncTask.java @@ -18,6 +18,7 @@ import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.AsyncTask; + import java.lang.ref.WeakReference; import java.util.List; @@ -232,6 +233,8 @@ public class RetrieveFeedsAsyncTask extends AsyncTask { } } else if(remoteInstanceObj != null && remoteInstanceObj.size() > 0 && remoteInstanceObj.get(0).getType().equals("PIXELFED") ) { apiResponse = api.getPixelfedTimeline(instanceName, max_id); + } else if(remoteInstanceObj != null && remoteInstanceObj.size() > 0 && remoteInstanceObj.get(0).getType().equals("GNU") ) { + apiResponse = api.getGNUTimeline(instanceName, max_id); }else { apiResponse = api.getPeertube(this.instanceName, max_id); } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java index e4a2d98aa..3162eca2c 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java @@ -1025,6 +1025,40 @@ public class API { } + /** + * Retrieves public GNU timeline for the account *synchronously* + * @param max_id String id max + * @return APIResponse + */ + public APIResponse getGNUTimeline(String remoteInstance, String max_id) { + + HashMap params = new HashMap<>(); + if (max_id != null) + params.put("max_id", max_id); + statuses = new ArrayList<>(); + try { + HttpsConnection httpsConnection = new HttpsConnection(context); + String response = httpsConnection.get("https://"+remoteInstance+"/api/statuses/public_timeline.json", 60, params, prefKeyOauthTokenT); + statuses = GNUAPI.parseStatuses(context, new JSONArray(response)); + if( statuses.size() > 0) { + apiResponse.setSince_id(String.valueOf(Long.parseLong(statuses.get(0).getId())+1)); + apiResponse.setMax_id(String.valueOf(Long.parseLong(statuses.get(statuses.size() - 1).getId())-1)); + } + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } catch (HttpsConnection.HttpsConnectionException e) { + e.printStackTrace(); + } + apiResponse.setStatuses(statuses); + return apiResponse; + } + /** * Retrieves public pixelfed timeline for the account *synchronously* diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/GNUAPI.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/GNUAPI.java index 3ea5041cc..4e4891b9a 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/GNUAPI.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/GNUAPI.java @@ -1823,7 +1823,7 @@ public class GNUAPI { * @param jsonArray JSONArray * @return List */ - private List parseStatuses(Context context, JSONArray jsonArray){ + public static List parseStatuses(Context context, JSONArray jsonArray){ List statuses = new ArrayList<>(); try { @@ -1848,7 +1848,7 @@ public class GNUAPI { * @return Status */ @SuppressWarnings("InfiniteRecursion") - private Status parseStatuses(Context context, JSONObject resobj){ + private static Status parseStatuses(Context context, JSONObject resobj){ Status status = new Status(); try { status.setId(resobj.get("id").toString()); @@ -1953,6 +1953,8 @@ public class GNUAPI { if( resobj.has("friendica_activities") && resobj.getJSONObject("friendica_activities").has("like")){ status.setFavourited(false); JSONArray jsonArray = resobj.getJSONObject("friendica_activities").getJSONArray("like"); + SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); for (int i = 0; i < jsonArray.length(); i++) { JSONObject like = jsonArray.getJSONObject(i); if( like.getString("id").equals(userId)) { diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/ReorderTabAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/ReorderTabAdapter.java index 99674280c..37913f97b 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/ReorderTabAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/ReorderTabAdapter.java @@ -128,6 +128,9 @@ public class ReorderTabAdapter extends RecyclerView.Adapter tagTimelines = new SearchDAO(context, db).getTimelineInfo(tag); @@ -542,7 +542,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn } //Let's deal with statuses if( statuses != null && statuses.size() > 0) { - if ( statusListAdapter != null && ( instanceType.equals("MASTODON") || instanceType.equals("MISSKEY"))) { + if ( statusListAdapter != null && ( instanceType.equals("MASTODON") || instanceType.equals("MISSKEY") || instanceType.equals("GNU"))) { this.statuses.addAll(statuses); statusListAdapter.notifyItemRangeInserted(previousPosition, statuses.size()); }else if(artListAdapter != null && instanceType.equals("ART") ) { @@ -824,7 +824,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn public void scrollToTop(){ if( lv_status != null && instanceType != null) { - if( statusListAdapter != null && (instanceType.equals("MASTODON") || instanceType.equals("MISSKEY"))) + if( statusListAdapter != null && (instanceType.equals("MASTODON") || instanceType.equals("MISSKEY") || instanceType.equals("GNU"))) lv_status.setAdapter(statusListAdapter); else if( pixelfedListAdapter != null && instanceType.equals("PIXELFED")) lv_status.setAdapter(pixelfedListAdapter); @@ -840,7 +840,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn */ public void refreshFilter(){ - if( instanceType.equals("MASTODON") || instanceType.equals("MISSKEY")) + if( instanceType.equals("MASTODON") || instanceType.equals("MISSKEY")|| instanceType.equals("GNU")) statusListAdapter.notifyDataSetChanged(); else if( instanceType.equals("PIXELFED")) pixelfedListAdapter.notifyDataSetChanged(); @@ -857,7 +857,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn for (Status status : this.statuses) { status.setNew(false); } - if( instanceType.equals("MASTODON") || instanceType.equals("MISSKEY")) + if( instanceType.equals("MASTODON") || instanceType.equals("MISSKEY")|| instanceType.equals("GNU")) statusListAdapter.notifyItemRangeChanged(0, this.statuses.size()); else if( instanceType.equals("PIXELFED")) pixelfedListAdapter.notifyItemRangeChanged(0, this.statuses.size()); @@ -881,7 +881,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn Status status = it.next(); for (Status status1 : statuses) { if (status.getConversationId() != null && status.getConversationId().equals(status1.getConversationId())) { - if( instanceType.equals("MASTODON") || instanceType.equals("MISSKEY")) + if( instanceType.equals("MASTODON") || instanceType.equals("MISSKEY")|| instanceType.equals("GNU")) statusListAdapter.notifyItemRemoved(position); else if( instanceType.equals("PIXELFED")) pixelfedListAdapter.notifyItemRemoved(position); @@ -920,7 +920,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn } } } - if( statusListAdapter != null && (instanceType.equals("MASTODON") || instanceType.equals("MISSKEY"))) + if( statusListAdapter != null && (instanceType.equals("MASTODON") || instanceType.equals("MISSKEY")|| instanceType.equals("GNU"))) statusListAdapter.notifyItemRangeInserted(0, inserted); else if( pixelfedListAdapter != null && instanceType.equals("PIXELFED")) pixelfedListAdapter.notifyItemRangeInserted(0, inserted); diff --git a/app/src/main/res/drawable/ic_gnu_social.xml b/app/src/main/res/drawable/ic_gnu_social.xml new file mode 100644 index 000000000..a14c90623 --- /dev/null +++ b/app/src/main/res/drawable/ic_gnu_social.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/app/src/main/res/layout/search_instance.xml b/app/src/main/res/layout/search_instance.xml index ce2d5b894..81cca530c 100644 --- a/app/src/main/res/layout/search_instance.xml +++ b/app/src/main/res/layout/search_instance.xml @@ -36,5 +36,10 @@ android:layout_height="wrap_content" android:text="@string/misskey_instance" /> + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fc6b2d299..59892bd9a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -944,6 +944,7 @@ BBCode Add a timeline Always mark media as sensitive + GNU instance %d vote