From a845b05b74eb9142b0c064a9d5fb8c73049f2376 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sat, 8 Jun 2019 18:55:30 +0200 Subject: [PATCH] News --- .../android/activities/AboutActivity.java | 2 +- .../android/activities/BaseMainActivity.java | 8 +++ .../asynctasks/RetrieveFeedsAsyncTask.java | 4 ++ .../java/app/fedilab/android/client/API.java | 53 +++++++++++++++++++ .../PeertubeNotificationsListAdapter.java | 1 - .../app/fedilab/android/helper/Helper.java | 1 + app/src/main/res/layout/item_menu_news.xml | 29 ++++++++++ .../main/res/menu/activity_main_drawer.xml | 12 +++-- 8 files changed, 103 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/layout/item_menu_news.xml diff --git a/app/src/main/java/app/fedilab/android/activities/AboutActivity.java b/app/src/main/java/app/fedilab/android/activities/AboutActivity.java index b709fe2c4..b3ec0cc5c 100644 --- a/app/src/main/java/app/fedilab/android/activities/AboutActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/AboutActivity.java @@ -237,7 +237,7 @@ public class AboutActivity extends BaseActivity implements OnRetrieveRemoteAccou about_website.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://tom79.bitbucket.io")); + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://fedilab.app")); startActivity(browserIntent); } }); diff --git a/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java index 9e8cb10eb..8fbddfb76 100644 --- a/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/BaseMainActivity.java @@ -1621,6 +1621,14 @@ public abstract class BaseMainActivity extends BaseActivity fragmentTag = "MY_HISTORY"; fragmentManager.beginTransaction() .replace(R.id.main_app_container, fragment, fragmentTag).commit(); + } else if (id == R.id.nav_news) { + toot.hide(); + statusFragment = new DisplayStatusFragment(); + bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.NEWS); + statusFragment.setArguments(bundle); + fragmentTag = "NEWS"; + fragmentManager.beginTransaction() + .replace(R.id.main_app_container, statusFragment, fragmentTag).commit(); } else if (id == R.id.nav_blocked || id == R.id.nav_pixelfed_blocked) { toot.hide(); accountsFragment = new DisplayAccountsFragment(); diff --git a/app/src/main/java/app/fedilab/android/asynctasks/RetrieveFeedsAsyncTask.java b/app/src/main/java/app/fedilab/android/asynctasks/RetrieveFeedsAsyncTask.java index 58af89331..bb4d9f648 100644 --- a/app/src/main/java/app/fedilab/android/asynctasks/RetrieveFeedsAsyncTask.java +++ b/app/src/main/java/app/fedilab/android/asynctasks/RetrieveFeedsAsyncTask.java @@ -85,6 +85,7 @@ public class RetrieveFeedsAsyncTask extends AsyncTask { PEERTUBE, NOTIFICATION, SEARCH, + NEWS, PSUBSCRIPTIONS, POVERVIEW, @@ -222,6 +223,9 @@ public class RetrieveFeedsAsyncTask extends AsyncTask { case PUBLIC: apiResponse = api.getPublicTimeline(false, max_id); break; + case NEWS: + apiResponse = api.getNews(max_id); + break; case SCHEDULED_TOOTS: apiResponse = api.scheduledAction("GET", null, max_id, null); break; diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index 44842415a..ad515aa85 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -1524,6 +1524,59 @@ public class API { } + + /** + * Retrieves news coming from Fedilab's account *synchronously* + * @param max_id String id max + * @return APIResponse + */ + public APIResponse getNews(String max_id){ + + HashMap params = new HashMap<>(); + if (max_id != null) + params.put("max_id", max_id); + + params.put("exclude_replies", "true"); + params.put("limit", "40"); + params.put("tagged", "Fedilab"); + statuses = new ArrayList<>(); + final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); + String instance = Helper.getLiveInstance(context); + + String accountID = sharedpreferences.getString(Helper.NEWS_ACCOUNT_ID+userId+instance, null); + if( accountID == null){ + APIResponse response = search("https://framapiaf.org/@fedilab"); + Results res = response.getResults(); + if( res != null && res.getAccounts() != null && res.getAccounts().size() > 0 ){ + accountID = res.getAccounts().get(0).getId(); + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putString(Helper.NEWS_ACCOUNT_ID+userId+instance, accountID); + editor.apply(); + } + } + try { + HttpsConnection httpsConnection = new HttpsConnection(context, this.instance); + String response = httpsConnection.get(getAbsoluteUrl(String.format("/accounts/%s/statuses", accountID)), 60, params, prefKeyOauthTokenT); + statuses = parseStatuses(context, new JSONArray(response)); + apiResponse.setSince_id(httpsConnection.getSince_id()); + apiResponse.setMax_id(httpsConnection.getMax_id()); + } catch (HttpsConnection.HttpsConnectionException e) { + setError(e.getStatusCode(), e); + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } + apiResponse.setStatuses(statuses); + return apiResponse; + } + /** * Retrieves discover timeline for the account *synchronously* * @param local boolean only local timeline diff --git a/app/src/main/java/app/fedilab/android/drawers/PeertubeNotificationsListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/PeertubeNotificationsListAdapter.java index 8084d5271..e1b97abd8 100644 --- a/app/src/main/java/app/fedilab/android/drawers/PeertubeNotificationsListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/PeertubeNotificationsListAdapter.java @@ -23,7 +23,6 @@ import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.text.Html; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index 37d425cf6..a25c7556b 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -297,6 +297,7 @@ public class Helper { public static final String SET_SHOW_REPLIES = "set_show_replies"; public static final String SET_VIDEO_NSFW = "set_video_nsfw"; public static final String INSTANCE_VERSION = "instance_version"; + public static final String NEWS_ACCOUNT_ID = "news_account_id"; public static final String SET_LIVE_NOTIFICATIONS = "set_live_notifications"; public static final String SET_DISABLE_GIF = "set_disable_gif"; public static final String SET_CAPITALIZE = "set_capitalize"; diff --git a/app/src/main/res/layout/item_menu_news.xml b/app/src/main/res/layout/item_menu_news.xml new file mode 100644 index 000000000..f5ec9aec3 --- /dev/null +++ b/app/src/main/res/layout/item_menu_news.xml @@ -0,0 +1,29 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml index 26f60e527..cc682ae58 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -1,5 +1,6 @@ - + - +