From ac336724d4a0673e1441ed86325c89e605115513 Mon Sep 17 00:00:00 2001 From: Kasun Date: Fri, 19 Apr 2019 21:47:13 +0530 Subject: add more metadata for fdroid listing --- fastlane/metadata/android/en-US/changelogs/253.txt | 16 +++++ .../metadata/android/en-US/full_description.txt | 81 ++++++++++++++++++++++ .../metadata/android/en-US/short_description.txt | 1 + 3 files changed, 98 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/253.txt create mode 100644 fastlane/metadata/android/en-US/full_description.txt create mode 100644 fastlane/metadata/android/en-US/short_description.txt diff --git a/fastlane/metadata/android/en-US/changelogs/253.txt b/fastlane/metadata/android/en-US/changelogs/253.txt new file mode 100644 index 000000000..fc6f1021b --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/253.txt @@ -0,0 +1,16 @@ +Added +* Poll notifications +* Customise notification sounds per type (Android O+) + +Changed +* More filters for UTM parameters +* Live notifications for Pleroma are back +* Honour white spaces in toots (emoji art) + +Fixed +* Issues with some Mastodon API due to their special version name +* Auto-save feature, drafts not deleted after being sent +* Issue when uploading media due to the file name +* Issue with the pinch-zoom +* Polls not displayed in boosts + diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt new file mode 100644 index 000000000..60f9c6510 --- /dev/null +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -0,0 +1,81 @@ +⚠️ The first field when logging in should be your instance hostname. For example: "mastodon.social" for the most popular Instance + + +- You need to create an account on an Instance first +- If you don't know what's Mastodon, please read: https://joinmastodon.org/ +- You want to choose an instance, please use this tool: https://instances.social/ +- It's an open source app, if you encounter a bug you can open a ticket on Gitlab: https://gitlab.com/tom79/mastalab/issues + + +The number of libraries is minimized and it does not use tracking tools. The source code is free (GPLv3). +You can help translating via https://crowdin.com/project/mastalab + +Current translations: +🇬🇧 - 🇨🇳 - 🇯🇵 - 🇩🇪 - 🇫🇷 - 🇳🇱 - 🇪🇸 - 🇹🇷 - 🇻🇳 -🇧🇷 - 🇵🇹 - 🇷🇴- 🇷🇸- 🇵🇱 - 🇮🇩- 🇳🇴 + +Features + +Multi-account management +- Add accounts from different instances +- Switch from one account to another by a simple click +- Boost/Add to favorites/Reply with another account without switching + +Timelines +- Federated / Local / Home +- Clicks on toots display the conversation (context) +- Clicks on mentioned accounts display details about these accounts +- Clicks on hashtags display toots containing this hashtags +- Create lists + +Actions on toots +- Mute an account related to a toot +- Block an account related to a toot +- Report inappropriate toots to administrators +- Add/Remove a toot from favourites +- Boost/Unboost toots +- Copy the content of a toot +- Download media +- Translation of toots by a simple click (via the Yandex API) + +Write a toot +- Add media +- Change the visibility of the toot +- Mention accounts in toots with autocompletion (@ + 2 characters) +- Use tags with autocompletion +- Mark the content as sensitive +- Add spoilers +- Toots which have not been sent are saved (drafts) - can be disabled in settings +- Drafts can be edited/deleted/scheduled + +Scheduled toots +- Can be edited/deleted/scheduled at another date as long as they have not been sent. + +Interaction with accounts +- Follow/Unfollow/Block/Unblock/Mute/Unmute +- Display details of accounts +- Authorize/Reject follow requests (for locked accounts) + +Searches +- A top bar allows to make researches for accounts/tags/toots +- A click on a tag displays toots containing this tag +- Create a timeline with a search + +Network optimization +- Load of media: Automatic/WIFI only/Ask +- Customization of the number of toots/accounts per load + +Notifications +- Live notifications +- Notifications for new toots on the home page (could be disabled in settings) +- Notifications for new events (could be disabled or filtered in settings) + +Built-in browser +- Full screen videos +- Disable JavaScript (default: enabled) +- Disable third-party cookies (default: disabled) +- Disable the built-in browser in settings + + +Source code: https://gitlab.com/tom79/mastalab/ +Issues: https://gitlab.com/tom79/mastalab/issues +Developer: https://mastodon.social/@tom79 diff --git a/fastlane/metadata/android/en-US/short_description.txt b/fastlane/metadata/android/en-US/short_description.txt new file mode 100644 index 000000000..004f156c6 --- /dev/null +++ b/fastlane/metadata/android/en-US/short_description.txt @@ -0,0 +1 @@ +A multi-account client for the Fediverse -- cgit v1.2.3 From f49ecadab79d8a07212d6cbf531f8ae11cfdbb80 Mon Sep 17 00:00:00 2001 From: Kasun Date: Fri, 19 Apr 2019 22:07:56 +0530 Subject: update screenshots for fdroid --- .../phoneScreenshots/device-2018-08-24-182652.png | Bin 192156 -> 0 bytes .../phoneScreenshots/device-2018-08-24-182902.png | Bin 864335 -> 0 bytes .../phoneScreenshots/device-2018-08-24-182920.png | Bin 172567 -> 0 bytes .../phoneScreenshots/device-2018-08-24-182958.png | Bin 164709 -> 0 bytes .../phoneScreenshots/device-2018-08-24-183016.png | Bin 155035 -> 0 bytes .../phoneScreenshots/device-2018-08-24-183038.png | Bin 252876 -> 0 bytes .../phoneScreenshots/device-2018-08-24-183102.png | Bin 225316 -> 0 bytes .../phoneScreenshots/device-2018-08-24-183119.png | Bin 219010 -> 0 bytes .../phoneScreenshots/device-2018-08-24-183139.png | Bin 200837 -> 0 bytes .../phoneScreenshots/device-2018-08-24-183233.png | Bin 161719 -> 0 bytes .../phoneScreenshots/device-2018-08-24-183303.png | Bin 246529 -> 0 bytes .../phoneScreenshots/device-2018-08-24-183328.png | Bin 104972 -> 0 bytes .../phoneScreenshots/device-2018-08-24-183345.png | Bin 114764 -> 0 bytes .../phoneScreenshots/device-2018-08-24-183413.png | Bin 186328 -> 0 bytes .../phoneScreenshots/device-2019-02-02-114505.png | Bin 0 -> 204345 bytes .../phoneScreenshots/device-2019-02-02-114648.png | Bin 0 -> 250608 bytes .../phoneScreenshots/device-2019-02-02-114713.png | Bin 0 -> 3493848 bytes .../phoneScreenshots/device-2019-02-02-114742.png | Bin 0 -> 323513 bytes .../phoneScreenshots/device-2019-02-02-114751.png | Bin 0 -> 1934634 bytes .../phoneScreenshots/device-2019-02-02-114808.png | Bin 0 -> 253617 bytes .../phoneScreenshots/device-2019-02-02-114823.png | Bin 0 -> 57883 bytes .../phoneScreenshots/device-2019-02-02-114834.png | Bin 0 -> 155381 bytes .../phoneScreenshots/device-2019-02-02-114845.png | Bin 0 -> 155271 bytes .../phoneScreenshots/device-2019-02-02-114854.png | Bin 0 -> 141236 bytes .../phoneScreenshots/device-2019-02-02-114910.png | Bin 0 -> 258076 bytes 25 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182652.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182902.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182920.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182958.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183016.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183038.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183102.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183119.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183139.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183233.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183303.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183328.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183345.png delete mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183413.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114505.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114648.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114713.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114742.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114751.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114808.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114823.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114834.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114845.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114854.png create mode 100644 fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114910.png diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182652.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182652.png deleted file mode 100644 index 24c4ba702..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182652.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182902.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182902.png deleted file mode 100644 index 0478238b6..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182902.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182920.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182920.png deleted file mode 100644 index f79ad03f0..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182920.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182958.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182958.png deleted file mode 100644 index 21951c8ba..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-182958.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183016.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183016.png deleted file mode 100644 index 171214818..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183016.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183038.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183038.png deleted file mode 100644 index 4ade0f437..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183038.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183102.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183102.png deleted file mode 100644 index 1e8538d10..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183102.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183119.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183119.png deleted file mode 100644 index b176edac6..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183119.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183139.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183139.png deleted file mode 100644 index 57e625eb2..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183139.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183233.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183233.png deleted file mode 100644 index 4d55b34a5..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183233.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183303.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183303.png deleted file mode 100644 index f8e918195..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183303.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183328.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183328.png deleted file mode 100644 index 9acd51b52..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183328.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183345.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183345.png deleted file mode 100644 index 83bc79a41..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183345.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183413.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183413.png deleted file mode 100644 index b27c6dad9..000000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2018-08-24-183413.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114505.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114505.png new file mode 100644 index 000000000..96e65672e Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114505.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114648.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114648.png new file mode 100644 index 000000000..d92ec256c Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114648.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114713.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114713.png new file mode 100644 index 000000000..78ca7e07b Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114713.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114742.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114742.png new file mode 100644 index 000000000..5ca575016 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114742.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114751.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114751.png new file mode 100644 index 000000000..38fe9974f Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114751.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114808.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114808.png new file mode 100644 index 000000000..9044a210c Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114808.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114823.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114823.png new file mode 100644 index 000000000..e717d5e15 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114823.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114834.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114834.png new file mode 100644 index 000000000..db82d6d31 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114834.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114845.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114845.png new file mode 100644 index 000000000..d619b6944 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114845.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114854.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114854.png new file mode 100644 index 000000000..a2b5ddb9b Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114854.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114910.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114910.png new file mode 100644 index 000000000..a752ab54b Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/device-2019-02-02-114910.png differ -- cgit v1.2.3 From 22a1c12159a686ba8080581c0781212499f9b085 Mon Sep 17 00:00:00 2001 From: Kasun Date: Sat, 20 Apr 2019 21:59:18 +0530 Subject: fit content description preview image to viewer --- app/src/main/res/layout/popup_media_description.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/popup_media_description.xml b/app/src/main/res/layout/popup_media_description.xml index 455dc881e..66a74eb12 100644 --- a/app/src/main/res/layout/popup_media_description.xml +++ b/app/src/main/res/layout/popup_media_description.xml @@ -24,7 +24,7 @@ android:layout_height="wrap_content"> Date: Sun, 21 Apr 2019 09:12:10 +0200 Subject: Add peertube column --- .../mastodon/activities/BaseMainActivity.java | 209 ++++++++------------- .../asynctasks/RetrieveFeedsAsyncTask.java | 1 + .../mastodon/fragments/DisplayStatusFragment.java | 7 +- .../mastodon/fragments/SettingsFragment.java | 21 +++ .../fr/gouv/etalab/mastodon/helper/Helper.java | 15 ++ app/src/main/res/drawable/ic_video_peertube.xml | 9 + .../main/res/layout-sw600dp/fragment_settings.xml | 7 + app/src/main/res/layout/fragment_settings.xml | 7 + app/src/main/res/values/strings.xml | 2 + 9 files changed, 145 insertions(+), 133 deletions(-) create mode 100644 app/src/main/res/drawable/ic_video_peertube.xml 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 08eb50674..2f4e2a158 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 @@ -55,6 +55,7 @@ import android.support.v7.widget.Toolbar; import android.text.Editable; import android.text.InputFilter; import android.text.TextWatcher; +import android.util.Log; import android.util.Patterns; import android.util.SparseArray; import android.view.Gravity; @@ -93,6 +94,7 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Random; +import java.util.Set; import java.util.Stack; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -196,11 +198,11 @@ public abstract class BaseMainActivity extends BaseActivity private RelativeLayout main_app_container; private Stack stackBack = new Stack<>(); public static List filters = new ArrayList<>(); - private DisplayStatusFragment homeFragment, federatedFragment, localFragment, artFragment; + private DisplayStatusFragment homeFragment, federatedFragment, localFragment, artFragment, peertubeFragment; private TabLayoutNotificationsFragment tabLayoutNotificationsFragment; private static final int ERROR_DIALOG_REQUEST_CODE = 97; - private boolean display_direct, display_local, display_global, display_art; + private boolean display_direct, display_local, display_global, display_art, display_peertube; public static int countNewStatus; public static int countNewNotifications; public static String lastHomeId = null, lastNotificationId = null; @@ -291,6 +293,7 @@ public abstract class BaseMainActivity extends BaseActivity display_local = sharedpreferences.getBoolean(Helper.SET_DISPLAY_LOCAL, true); display_global = sharedpreferences.getBoolean(Helper.SET_DISPLAY_GLOBAL, true); display_art = sharedpreferences.getBoolean(Helper.SET_DISPLAY_ART, true); + display_peertube = sharedpreferences.getBoolean(Helper.SET_DISPLAY_PEERTUBE, true); //Test if user is still log in if( ! Helper.isLoggedIn(getApplicationContext())) { //It is not, the user is redirected to the login page @@ -355,6 +358,7 @@ public abstract class BaseMainActivity extends BaseActivity TabLayout.Tab tabLocal = tabLayout.newTab(); TabLayout.Tab tabPublic = tabLayout.newTab(); TabLayout.Tab tabArt = tabLayout.newTab(); + TabLayout.Tab tabPeertube = tabLayout.newTab(); tabHome.setCustomView(R.layout.tab_badge); tabNotif.setCustomView(R.layout.tab_badge); @@ -362,6 +366,7 @@ public abstract class BaseMainActivity extends BaseActivity tabLocal.setCustomView(R.layout.tab_badge); tabPublic.setCustomView(R.layout.tab_badge); tabArt.setCustomView(R.layout.tab_badge); + tabPeertube.setCustomView(R.layout.tab_badge); @SuppressWarnings("ConstantConditions") @SuppressLint("CutPasteId") ImageView iconHome = tabHome.getCustomView().findViewById(R.id.tab_icon); @@ -396,12 +401,17 @@ public abstract class BaseMainActivity extends BaseActivity ImageView iconArt = tabArt.getCustomView().findViewById(R.id.tab_icon); iconArt.setImageResource(R.drawable.ic_color_lens); + @SuppressWarnings("ConstantConditions") @SuppressLint("CutPasteId") + ImageView iconPeertube = tabPeertube.getCustomView().findViewById(R.id.tab_icon); + iconPeertube.setImageResource(R.drawable.ic_video_peertube); + iconHome.setContentDescription(getString(R.string.home_menu)); iconNotif.setContentDescription(getString(R.string.notifications)); iconDirect.setContentDescription(getString(R.string.direct_message)); iconLocal.setContentDescription(getString(R.string.local_menu)); iconGlobal.setContentDescription(getString(R.string.global_menu)); iconArt.setContentDescription(getString(R.string.art_menu)); + iconPeertube.setContentDescription(getString(R.string.peertube_menu)); if (theme == THEME_LIGHT) { iconHome.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.action_light_header), PorterDuff.Mode.SRC_IN); @@ -410,6 +420,7 @@ public abstract class BaseMainActivity extends BaseActivity iconLocal.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.action_light_header), PorterDuff.Mode.SRC_IN); iconGlobal.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.action_light_header), PorterDuff.Mode.SRC_IN); iconArt.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.action_light_header), PorterDuff.Mode.SRC_IN); + iconPeertube.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.action_light_header), PorterDuff.Mode.SRC_IN); } else { iconHome.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); iconNotif.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); @@ -417,6 +428,7 @@ public abstract class BaseMainActivity extends BaseActivity iconLocal.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); iconGlobal.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); iconArt.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); + iconPeertube.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); } @@ -485,8 +497,15 @@ public abstract class BaseMainActivity extends BaseActivity tabLayout.addTab(tabArt); tabPosition.put("art", i); typePosition.put(i, RetrieveFeedsAsyncTask.Type.ART); + i++; + } + if( social == UpdateAccountInfoAsyncTask.SOCIAL.GNU || social == UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) + display_peertube = false; + if( display_peertube ) { + tabLayout.addTab(tabPeertube); + tabPosition.put("peertube", i); + typePosition.put(i, RetrieveFeedsAsyncTask.Type.PEERTUBE); } - if( (getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) tabLayout.setTabMode(TabLayout.MODE_FIXED); else if( i > 3 && !Helper.isTablet(getApplicationContext())){ @@ -596,6 +615,8 @@ public abstract class BaseMainActivity extends BaseActivity countPage++; if( sharedpreferences.getBoolean(Helper.SET_DISPLAY_ART, true)&& social != UpdateAccountInfoAsyncTask.SOCIAL.GNU && social != UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) countPage++; + if( sharedpreferences.getBoolean(Helper.SET_DISPLAY_PEERTUBE, true)&& social != UpdateAccountInfoAsyncTask.SOCIAL.GNU && social != UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) + countPage++; if( tabPosition.containsKey("global")) tabStrip.getChildAt(tabPosition.get("global")).setOnLongClickListener(new View.OnLongClickListener() { @@ -642,7 +663,7 @@ public abstract class BaseMainActivity extends BaseActivity viewPager.setVisibility(View.VISIBLE); delete_instance.setVisibility(View.GONE); Helper.switchLayout(BaseMainActivity.this); - if( tab.getPosition() == 1 || (tabPosition.containsKey("art") && tab.getPosition() == tabPosition.get("art"))) { + if( tab.getPosition() == 1 || (tabPosition.containsKey("art") && tab.getPosition() == tabPosition.get("art"))||(tabPosition.containsKey("peertube") && tab.getPosition() == tabPosition.get("peertube"))) { toot.hide(); federatedTimelines.hide(); }else { @@ -687,7 +708,7 @@ public abstract class BaseMainActivity extends BaseActivity DrawerLayout drawer = findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); } - if( tab.getPosition() == 1 || (tabPosition.containsKey("art") && tab.getPosition() == tabPosition.get("art"))) { + if( tab.getPosition() == 1 || (tabPosition.containsKey("art") && tab.getPosition() == tabPosition.get("art"))||(tabPosition.containsKey("peertube") && tab.getPosition() == tabPosition.get("peertube"))) { toot.hide(); federatedTimelines.hide(); }else { @@ -713,7 +734,7 @@ public abstract class BaseMainActivity extends BaseActivity updateNotifCounter(); }else if (tab.getPosition() > 1) { if (typePosition.containsKey(tab.getPosition())) - updateTimeLine(typePosition.get(tab.getPosition()), 0); + manageTab(typePosition.get(tab.getPosition()), 0); displayStatusFragment = ((DisplayStatusFragment) fragment); displayStatusFragment.scrollToTop(); } @@ -1589,7 +1610,8 @@ public abstract class BaseMainActivity extends BaseActivity (homeFragment != null && homeFragment.getUserVisibleHint()) || (federatedFragment != null && federatedFragment.getUserVisibleHint()) || (localFragment != null && localFragment.getUserVisibleHint()) || - (artFragment != null && artFragment.getUserVisibleHint()) + (artFragment != null && artFragment.getUserVisibleHint()) || + (peertubeFragment != null && peertubeFragment.getUserVisibleHint()) ){ PopupMenu popup = null; if(homeFragment != null && homeFragment.getUserVisibleHint()) @@ -1663,7 +1685,10 @@ public abstract class BaseMainActivity extends BaseActivity }); popup.show(); return false; + }else if(peertubeFragment != null && peertubeFragment.getUserVisibleHint()){ + //TODO: Peertube manage popup here } + if( popup == null) return true; popup.getMenuInflater() @@ -1800,6 +1825,8 @@ public abstract class BaseMainActivity extends BaseActivity federatedFragment.refreshFilter(); if(artFragment != null) artFragment.refreshFilter(); + if(peertubeFragment != null) + peertubeFragment.refreshFilter(); } @Override @@ -2509,6 +2536,12 @@ public abstract class BaseMainActivity extends BaseActivity } if (typePosition.get(position) == RetrieveFeedsAsyncTask.Type.ART) bundle.putString("instanceType","ART"); + if (typePosition.get(position) == RetrieveFeedsAsyncTask.Type.PEERTUBE) { + bundle.putString("instanceType", "PEERTUBE"); + bundle.putString("remote_instance", "peertube.social"); + bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE); + + } statusFragment.setArguments(bundle); return statusFragment; } @@ -2592,6 +2625,8 @@ public abstract class BaseMainActivity extends BaseActivity federatedFragment = (DisplayStatusFragment) createdFragment; else if (display_art && position == tabPosition.get("art")) artFragment = (DisplayStatusFragment) createdFragment; + else if (display_peertube && position == tabPosition.get("peertube")) + peertubeFragment = (DisplayStatusFragment) createdFragment; } @@ -2894,132 +2929,44 @@ public abstract class BaseMainActivity extends BaseActivity } } - - public void updateTimeLine(RetrieveFeedsAsyncTask.Type type, int value){ - - if( type == RetrieveFeedsAsyncTask.Type.DIRECT || type == RetrieveFeedsAsyncTask.Type.CONVERSATION){ - if (tabLayout.getTabAt(2) != null && display_direct) { - View tabDirect = tabLayout.getTabAt(2).getCustomView(); - assert tabDirect != null; - TextView tabCounterDirect = tabDirect.findViewById(R.id.tab_counter); - tabCounterDirect.setText(String.valueOf(value)); - if (value > 0) { - tabCounterDirect.setVisibility(View.VISIBLE); - } else { - tabCounterDirect.setVisibility(View.GONE); - } - } - }else if( type == RetrieveFeedsAsyncTask.Type.LOCAL ){ - if( display_local) { - if (tabLayout.getTabAt(2) != null && !display_direct) { - View tabLocal = tabLayout.getTabAt(2).getCustomView(); - assert tabLocal != null; - TextView tabCounterLocal = tabLocal.findViewById(R.id.tab_counter); - tabCounterLocal.setText(String.valueOf(value)); - if (value > 0) { - tabCounterLocal.setVisibility(View.VISIBLE); - } else { - tabCounterLocal.setVisibility(View.GONE); - } - } else if (tabLayout.getTabAt(3) != null ) { - View tabLocal = tabLayout.getTabAt(3).getCustomView(); - assert tabLocal != null; - TextView tabCounterLocal = tabLocal.findViewById(R.id.tab_counter); - tabCounterLocal.setText(String.valueOf(value)); - if (value > 0) { - tabCounterLocal.setVisibility(View.VISIBLE); - } else { - tabCounterLocal.setVisibility(View.GONE); - } - } - } - }else if( type == RetrieveFeedsAsyncTask.Type.PUBLIC ){ - if( display_global){ - if( tabLayout.getTabAt(2) != null && !display_local && !display_direct){ - View tabPublic = tabLayout.getTabAt(2).getCustomView(); - assert tabPublic != null; - TextView tabCounterPublic = tabPublic.findViewById(R.id.tab_counter); - tabCounterPublic.setText(String.valueOf(value)); - if( value > 0){ - tabCounterPublic.setVisibility(View.VISIBLE); - }else { - tabCounterPublic.setVisibility(View.GONE); - } - }else if( tabLayout.getTabAt(3) != null && ((!display_local && display_direct) || (display_local && !display_direct) )){ - View tabPublic = tabLayout.getTabAt(3).getCustomView(); - assert tabPublic != null; - TextView tabCounterPublic = tabPublic.findViewById(R.id.tab_counter); - tabCounterPublic.setText(String.valueOf(value)); - if( value > 0){ - tabCounterPublic.setVisibility(View.VISIBLE); - }else { - tabCounterPublic.setVisibility(View.GONE); - } - }else if( tabLayout.getTabAt(4) != null && display_local && display_direct){ - View tabPublic = tabLayout.getTabAt(4).getCustomView(); - assert tabPublic != null; - TextView tabCounterPublic = tabPublic.findViewById(R.id.tab_counter); - tabCounterPublic.setText(String.valueOf(value)); - if( value > 0){ - tabCounterPublic.setVisibility(View.VISIBLE); - }else { - tabCounterPublic.setVisibility(View.GONE); - } - } - } - }else if( type == RetrieveFeedsAsyncTask.Type.ART ){ - if( display_art){ - if( tabLayout.getTabAt(2) != null && !display_local && !display_direct && !display_global){ - View tabArt = tabLayout.getTabAt(2).getCustomView(); - assert tabArt != null; - TextView tabCounterArt = tabArt.findViewById(R.id.tab_counter); - tabCounterArt.setText(String.valueOf(value)); - if( value > 0){ - tabCounterArt.setVisibility(View.VISIBLE); - }else { - tabCounterArt.setVisibility(View.GONE); - } - }else if( tabLayout.getTabAt(3) != null && ( - (!display_local && !display_direct && display_global) || - (!display_global && !display_direct && display_local) || - (!display_global && !display_local && display_direct) - )){ - View tabArt = tabLayout.getTabAt(3).getCustomView(); - assert tabArt != null; - TextView tabCounterArt = tabArt.findViewById(R.id.tab_counter); - tabCounterArt.setText(String.valueOf(value)); - if( value > 0){ - tabCounterArt.setVisibility(View.VISIBLE); - }else { - tabCounterArt.setVisibility(View.GONE); - } - }else if( tabLayout.getTabAt(4) != null && ( - (!display_direct && display_local && display_global) || - (!display_local && display_direct && display_global) || - (!display_global && display_local && display_direct) - )){ - View tabArt = tabLayout.getTabAt(4).getCustomView(); - assert tabArt != null; - TextView tabCounterArt = tabArt.findViewById(R.id.tab_counter); - tabCounterArt.setText(String.valueOf(value)); - if( value > 0){ - tabCounterArt.setVisibility(View.VISIBLE); - }else { - tabCounterArt.setVisibility(View.GONE); - } - }else if( tabLayout.getTabAt(5) != null && display_local && display_direct && display_global){ - View tabArt = tabLayout.getTabAt(5).getCustomView(); - assert tabArt != null; - TextView tabCounterArt = tabArt.findViewById(R.id.tab_counter); - tabCounterArt.setText(String.valueOf(value)); - if( value > 0){ - tabCounterArt.setVisibility(View.VISIBLE); - }else { - tabCounterArt.setVisibility(View.GONE); - } - } + public void manageTab( RetrieveFeedsAsyncTask.Type type, int value){ + boolean searchedIsDisplayed; + //Search if the current timeline is displayed + searchedIsDisplayed = false; + int positionInTab; + switch (type){ + case DIRECT: + searchedIsDisplayed = display_direct; + break; + case LOCAL: + searchedIsDisplayed = display_local; + break; + case PUBLIC: + searchedIsDisplayed = display_global; + break; + case ART: + searchedIsDisplayed = display_art; + break; + case PEERTUBE: + searchedIsDisplayed = display_peertube; + break; + } + Log.v(Helper.TAG,"positionInTab " + Helper.getKeyByValue(typePosition, type)); + if( searchedIsDisplayed){ + //noinspection ConstantConditions + positionInTab = Helper.getKeyByValue(typePosition, type); + + View tabCustom = tabLayout.getTabAt(positionInTab).getCustomView(); + assert tabCustom != null; + TextView tabCountertCustom = tabCustom.findViewById(R.id.tab_counter); + tabCountertCustom.setText(String.valueOf(value)); + if( value > 0){ + tabCountertCustom.setVisibility(View.VISIBLE); + }else { + tabCountertCustom.setVisibility(View.GONE); } } + } public void updateNotifCounter(){ 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 d3a117234..306195c3b 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 @@ -75,6 +75,7 @@ public class RetrieveFeedsAsyncTask extends AsyncTask { TAG, REMOTE_INSTANCE, ART, + PEERTUBE, NOTIFICATION, SEARCH, diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java index 6967afc91..bfd9c4d4d 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java @@ -32,6 +32,7 @@ import android.support.v4.content.LocalBroadcastManager; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -157,6 +158,8 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn instanceType = bundle.getString("instanceType", "MASTODON"); ischannel = bundle.getBoolean("ischannel",false); } + Log.v(Helper.TAG,"type! " + type); + Log.v(Helper.TAG,"instanceType! " + instanceType); if( ischannel) type = RetrieveFeedsAsyncTask.Type.CHANNEL; @@ -914,9 +917,9 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn ((MainActivity) context).updateHomeCounter(); else { if( type != RetrieveFeedsAsyncTask.Type.CONVERSATION) - ((MainActivity) context).updateTimeLine(type, inserted); + ((MainActivity) context).manageTab(type, inserted); else - ((MainActivity) context).updateTimeLine(type, insertedConversation); + ((MainActivity) context).manageTab(type, insertedConversation); } }catch (Exception ignored){} } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java index 76f19867a..c8a91d2d0 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java @@ -878,6 +878,27 @@ public class SettingsFragment extends Fragment { } }); + + boolean display_peertube = sharedpreferences.getBoolean(Helper.SET_DISPLAY_PEERTUBE, true); + final CheckBox set_display_peertube = rootView.findViewById(R.id.set_display_peertube); + set_display_peertube.setChecked(display_peertube); + + set_display_peertube.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putBoolean(Helper.SET_DISPLAY_PEERTUBE, set_display_peertube.isChecked()); + editor.apply(); + if( getActivity() != null) + getActivity().recreate(); + Intent intent = new Intent(context, MainActivity.class); + intent.putExtra(INTENT_ACTION, BACK_TO_SETTINGS); + if(getActivity() != null) + getActivity().finish(); + startActivity(intent); + } + }); + boolean disableGif = sharedpreferences.getBoolean(Helper.SET_DISABLE_GIF, false); final CheckBox set_disable_gif = rootView.findViewById(R.id.set_disable_gif); set_disable_gif.setChecked(disableGif); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index 2f2c05f44..143ddba28 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -145,13 +145,17 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.Random; +import java.util.Set; import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import es.dmoral.toasty.Toasty; import fr.gouv.etalab.mastodon.BuildConfig; @@ -374,6 +378,7 @@ public class Helper { public static final String SET_DISPLAY_LOCAL = "set_display_local"; public static final String SET_DISPLAY_GLOBAL = "set_display_global"; public static final String SET_DISPLAY_ART = "set_display_art"; + public static final String SET_DISPLAY_PEERTUBE = "set_display_peertube"; public static final String SET_AUTOMATICALLY_SPLIT_TOOTS = "set_automatically_split_toots"; public static final String SET_AUTOMATICALLY_SPLIT_TOOTS_SIZE = "set_automatically_split_toots_size"; public static final String SET_TRUNCATE_TOOTS_SIZE = "set_truncate_toots_size"; @@ -3803,4 +3808,14 @@ public class Helper { return cleaned_content; } + + public static T getKeyByValue(Map map, E value) { + for (Map.Entry entry : map.entrySet()) { + if (Objects.equals(value, entry.getValue())) { + return entry.getKey(); + } + } + return null; + } + } diff --git a/app/src/main/res/drawable/ic_video_peertube.xml b/app/src/main/res/drawable/ic_video_peertube.xml new file mode 100644 index 000000000..f808aee58 --- /dev/null +++ b/app/src/main/res/drawable/ic_video_peertube.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout-sw600dp/fragment_settings.xml b/app/src/main/res/layout-sw600dp/fragment_settings.xml index 849d77139..b4b28df35 100644 --- a/app/src/main/res/layout-sw600dp/fragment_settings.xml +++ b/app/src/main/res/layout-sw600dp/fragment_settings.xml @@ -128,6 +128,13 @@ android:layout_marginBottom="@dimen/settings_checkbox_margin" android:text="@string/set_display_art" android:layout_height="wrap_content" /> + + Vote A poll cannot be attached to a direct message! A poll you have voted in has ended + Display Peertube timeline + Peertube %d vote -- cgit v1.2.3 From f59c53f711587cd5429cf8de58b7baf9f95a3c44 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sun, 21 Apr 2019 10:22:07 +0200 Subject: Manage in db timelines --- .../mastodon/client/Entities/ManageTimelines.java | 173 +++++++++++++++++++++ .../mastodon/client/Entities/RemoteInstance.java | 37 ++++- .../mastodon/client/Entities/TagTimeline.java | 46 +++++- .../fr/gouv/etalab/mastodon/helper/Helper.java | 60 +++++++ .../fr/gouv/etalab/mastodon/sqlite/Sqlite.java | 24 ++- .../gouv/etalab/mastodon/sqlite/TimelinesDAO.java | 163 +++++++++++++++++++ 6 files changed, 500 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/ManageTimelines.java create mode 100644 app/src/main/java/fr/gouv/etalab/mastodon/sqlite/TimelinesDAO.java diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/ManageTimelines.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/ManageTimelines.java new file mode 100644 index 000000000..77c235472 --- /dev/null +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/ManageTimelines.java @@ -0,0 +1,173 @@ +package fr.gouv.etalab.mastodon.client.Entities; +/* Copyright 2019 Thomas Schneider + * + * This file is a part of Mastalab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Mastalab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Mastalab; if not, + * see . */ + + + +public class ManageTimelines { + + private int position; + private int id; + private boolean displayed; + private Type type; + private String referencedBy; + private String userId; + private String instance; + private RemoteInstance remoteInstance; + private TagTimeline tagTimeline; + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + public boolean isDisplayed() { + return displayed; + } + + public void setDisplayed(boolean displayed) { + this.displayed = displayed; + } + + public ManageTimelines.Type getType() { + return type; + } + + public void setType(ManageTimelines.Type type) { + this.type = type; + } + + + public String getReferencedBy() { + return referencedBy; + } + + public void setReferencedBy(String referencedBy) { + this.referencedBy = referencedBy; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUserId() { + return userId; + } + + + public String getInstance() { + return instance; + } + + public void setInstance(String instance) { + this.instance = instance; + } + + public RemoteInstance getRemoteInstance() { + return remoteInstance; + } + + public void setRemoteInstance(RemoteInstance remoteInstance) { + this.remoteInstance = remoteInstance; + } + + public TagTimeline getTagTimeline() { + return tagTimeline; + } + + public void setTagTimeline(TagTimeline tagTimeline) { + this.tagTimeline = tagTimeline; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public enum Type{ + HOME, + DIRECT, + NOTIFICATION, + LOCAL, + PUBLIC, + ART, + PEERTUBE, + TAG, + LIST, + INSTANCE + } + + + public static Type typeFromDb(String value){ + switch (value){ + case "HOME": + return Type.HOME; + case "DIRECT": + return Type.DIRECT; + case "NOTIFICATION": + return Type.NOTIFICATION; + case "LOCAL": + return Type.LOCAL; + case "PUBLIC": + return Type.PUBLIC; + case "ART": + return Type.ART; + case "PEERTUBE": + return Type.PEERTUBE; + case "TAG": + return Type.TAG; + case "LIST": + return Type.LIST; + case "INSTANCE": + return Type.INSTANCE; + } + return null; + } + + public static String typeToDb(Type type){ + switch (type){ + case HOME: + return "HOME"; + case DIRECT: + return "DIRECT"; + case NOTIFICATION: + return "NOTIFICATION"; + case LOCAL: + return "LOCAL"; + case PUBLIC: + return "PUBLIC"; + case ART: + return "ART"; + case PEERTUBE: + return "PEERTUBE"; + case TAG: + return "TAG"; + case LIST: + return "LIST"; + case INSTANCE: + return "INSTANCE"; + } + return null; + } + + + +} diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/RemoteInstance.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/RemoteInstance.java index 4e38ce062..fcf19a743 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/RemoteInstance.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/RemoteInstance.java @@ -15,12 +15,15 @@ package fr.gouv.etalab.mastodon.client.Entities; +import android.os.Parcel; +import android.os.Parcelable; + /** * Created by Thomas on 05/10/2018. * Manages following instances */ -public class RemoteInstance { +public class RemoteInstance implements Parcelable { private String host; private String type; @@ -61,4 +64,36 @@ public class RemoteInstance { public void setDbID(String dbID) { this.dbID = dbID; } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.host); + dest.writeString(this.type); + dest.writeString(this.id); + dest.writeString(this.dbID); + } + + protected RemoteInstance(Parcel in) { + this.host = in.readString(); + this.type = in.readString(); + this.id = in.readString(); + this.dbID = in.readString(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public RemoteInstance createFromParcel(Parcel source) { + return new RemoteInstance(source); + } + + @Override + public RemoteInstance[] newArray(int size) { + return new RemoteInstance[size]; + } + }; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/TagTimeline.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/TagTimeline.java index 6f180623a..01e94ce9d 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/TagTimeline.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/TagTimeline.java @@ -14,6 +14,9 @@ * see . */ package fr.gouv.etalab.mastodon.client.Entities; +import android.os.Parcel; +import android.os.Parcelable; + import java.util.List; /** @@ -21,7 +24,7 @@ import java.util.List; * Manage Tags timeline settings */ -public class TagTimeline { +public class TagTimeline implements Parcelable { private String name; private String displayname; @@ -86,4 +89,45 @@ public class TagTimeline { public void setDisplayname(String displayname) { this.displayname = displayname; } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.name); + dest.writeString(this.displayname); + dest.writeByte(this.isART ? (byte) 1 : (byte) 0); + dest.writeByte(this.isNSFW ? (byte) 1 : (byte) 0); + dest.writeStringList(this.any); + dest.writeStringList(this.all); + dest.writeStringList(this.none); + } + + public TagTimeline() { + } + + protected TagTimeline(Parcel in) { + this.name = in.readString(); + this.displayname = in.readString(); + this.isART = in.readByte() != 0; + this.isNSFW = in.readByte() != 0; + this.any = in.createStringArrayList(); + this.all = in.createStringArrayList(); + this.none = in.createStringArrayList(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public TagTimeline createFromParcel(Parcel source) { + return new TagTimeline(source); + } + + @Override + public TagTimeline[] newArray(int size) { + return new TagTimeline[size]; + } + }; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index 143ddba28..7b4ad63e6 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -178,8 +178,10 @@ import fr.gouv.etalab.mastodon.client.Entities.Card; import fr.gouv.etalab.mastodon.client.Entities.Emojis; import fr.gouv.etalab.mastodon.client.Entities.Filters; import fr.gouv.etalab.mastodon.client.Entities.Mention; +import fr.gouv.etalab.mastodon.client.Entities.RemoteInstance; import fr.gouv.etalab.mastodon.client.Entities.Status; import fr.gouv.etalab.mastodon.client.Entities.Tag; +import fr.gouv.etalab.mastodon.client.Entities.TagTimeline; import fr.gouv.etalab.mastodon.client.Entities.Version; import fr.gouv.etalab.mastodon.sqlite.AccountDAO; import fr.gouv.etalab.mastodon.sqlite.SearchDAO; @@ -2422,6 +2424,64 @@ public class Helper { } + /** + * Unserialized a TagTimeline + * @param serializedTagTimeline String serialized TagTimeline + * @return TagTimeline + */ + public static TagTimeline restoreTagTimelineFromString(String serializedTagTimeline){ + Gson gson = new Gson(); + try { + return gson.fromJson(serializedTagTimeline, TagTimeline.class); + }catch (Exception e){ + return null; + } + } + + /** + * Serialized a TagTimeline class + * @param tagTimeline TagTimeline to serialize + * @return String serialized TagTimeline + */ + public static String tagTimelineToStringStorage(TagTimeline tagTimeline){ + Gson gson = new Gson(); + try { + return gson.toJson(tagTimeline); + }catch (Exception e){ + return null; + } + } + + + /** + * Unserialized a RemoteInstance + * @param serializedRemoteInstance String serialized RemoteInstance + * @return RemoteInstance + */ + public static RemoteInstance restoreRemoteInstanceFromString(String serializedRemoteInstance){ + Gson gson = new Gson(); + try { + return gson.fromJson(serializedRemoteInstance, RemoteInstance.class); + }catch (Exception e){ + return null; + } + } + + /** + * Serialized a RemoteInstance class + * @param remoteInstance RemoteInstance to serialize + * @return String serialized RemoteInstance + */ + public static String remoteInstanceToStringStorage(RemoteInstance remoteInstance){ + Gson gson = new Gson(); + try { + return gson.toJson(remoteInstance); + }catch (Exception e){ + return null; + } + } + + /** * Unserialized a Locale * @param serializedLocale String serialized locale diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java index f115d3ff3..6dd024eb3 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java @@ -46,7 +46,7 @@ import fr.gouv.etalab.mastodon.helper.Helper; public class Sqlite extends SQLiteOpenHelper { - public static final int DB_VERSION = 27; + public static final int DB_VERSION = 28; public static final String DB_NAME = "mastodon_etalab_db"; public static SQLiteDatabase db; private static Sqlite sInstance; @@ -87,6 +87,9 @@ public class Sqlite extends SQLiteOpenHelper { //Table for blocking tracking domains public static final String TABLE_TRACKING_BLOCK = "TRACKING_BLOCK"; + //Table for timelines + public static final String TABLE_TIMELINES = "TIMELINES"; + static final String COL_USER_ID = "USER_ID"; static final String COL_USERNAME = "USERNAME"; static final String COL_ACCT = "ACCT"; @@ -255,6 +258,22 @@ public class Sqlite extends SQLiteOpenHelper { + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_DOMAIN + " TEXT NOT NULL)"; + static final String COL_TYPE = "TYPE"; + static final String COL_REFERENCED_BY = "REFERENCED_BY"; + static final String COL_DISPLAYED = "DISPLAYED"; + static final String COL_POSITION = "POSITION"; + static final String COL_REMOTE_INSTANCE = "REMOTE_INSTANCE"; + static final String COL_TAG_TIMELINE = "TAG_TIMELINE"; + + private static final String CREATE_TABLE_TIMELINES = "CREATE TABLE " + TABLE_TIMELINES + " (" + + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + COL_POSITION + " INTEGER NOT NULL, " + + COL_USER_ID + " TEXT NOT NULL, " + COL_INSTANCE + " TEXT NOT NULL, " + + COL_TYPE + " TEXT NOT NULL, " + + COL_REMOTE_INSTANCE