summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/build.gradle6
-rw-r--r--app/src/main/AndroidManifest.xml9
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java494
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/EditProfileActivity.java15
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/HashTagActivity.java2
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/LanguageActivity.java319
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/ListActivity.java7
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/MainApplication.java38
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/MediaActivity.java7
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/OwnerStatusActivity.java4
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/PeertubeActivity.java8
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java540
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowConversationActivity.java4
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/TagCacheActivity.java1
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java5
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveFeedsAfterBookmarkAsyncTask.java58
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveFeedsAsyncTask.java25
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveMissingFeedsAsyncTask.java25
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/client/API.java414
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java56
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java11
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/TagTimeline.java40
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/client/HttpsConnection.java49
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountSearchDevAdapter.java2
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsFollowRequestAdapter.java8
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsInAListAdapter.java2
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/drawers/AccountsListAdapter.java4
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/drawers/NotificationsListAdapter.java18
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/drawers/SearchListAdapter.java4
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java228
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayBookmarksFragment.java6
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java347
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java122
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsNotificationsFragment.java44
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/helper/CrossActions.java20
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java393
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/interfaces/OnRetrieveFeedsAfterBookmarkInterface.java25
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/jobs/ApplicationJob.java2
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/jobs/HomeTimelineSyncJob.java221
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/services/LiveNotificationService.java140
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/services/StreamingHomeTimelineService.java167
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/sqlite/SearchDAO.java56
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java17
-rw-r--r--app/src/main/res/drawable-anydpi/ic_translate_menu.xml9
-rw-r--r--app/src/main/res/drawable-hdpi/misskey.pngbin0 -> 1136 bytes
-rw-r--r--app/src/main/res/drawable-hdpi/pixelfed.pngbin0 -> 2045 bytes
-rw-r--r--app/src/main/res/drawable-ldpi/misskey.pngbin0 -> 500 bytes
-rw-r--r--app/src/main/res/drawable-ldpi/pixelfed.pngbin0 -> 704 bytes
-rw-r--r--app/src/main/res/drawable-mdpi/misskey.pngbin0 -> 650 bytes
-rw-r--r--app/src/main/res/drawable-mdpi/pixelfed.pngbin0 -> 1127 bytes
-rw-r--r--app/src/main/res/drawable-xhdpi/misskey.pngbin0 -> 1268 bytes
-rw-r--r--app/src/main/res/drawable-xhdpi/pixelfed.pngbin0 -> 3137 bytes
-rw-r--r--app/src/main/res/drawable-xxhdpi/misskey.pngbin0 -> 2196 bytes
-rw-r--r--app/src/main/res/drawable-xxhdpi/pixelfed.pngbin0 -> 5886 bytes
-rw-r--r--app/src/main/res/drawable-xxxhdpi/misskey.pngbin0 -> 2649 bytes
-rw-r--r--app/src/main/res/drawable-xxxhdpi/pixelfed.pngbin0 -> 8674 bytes
-rw-r--r--app/src/main/res/drawable/blue_border.xml11
-rw-r--r--app/src/main/res/layout-sw600dp/fragment_settings.xml18
-rw-r--r--app/src/main/res/layout/activity_language.xml105
-rw-r--r--app/src/main/res/layout/activity_show_account.xml9
-rw-r--r--app/src/main/res/layout/drawer_art.xml34
-rw-r--r--app/src/main/res/layout/drawer_status.xml1
-rw-r--r--app/src/main/res/layout/drawer_status_compact.xml1
-rw-r--r--app/src/main/res/layout/drawer_status_focused.xml1
-rw-r--r--app/src/main/res/layout/fragment_settings.xml18
-rw-r--r--app/src/main/res/layout/fragment_settings_notifications.xml11
-rw-r--r--app/src/main/res/layout/nav_header_main.xml10
-rw-r--r--app/src/main/res/layout/search_instance.xml32
-rw-r--r--app/src/main/res/layout/tags_all.xml13
-rw-r--r--app/src/main/res/layout/tags_any.xml13
-rw-r--r--app/src/main/res/layout/tags_name.xml13
-rw-r--r--app/src/main/res/layout/tags_none.xml13
-rw-r--r--app/src/main/res/menu/activity_main_drawer.xml10
-rw-r--r--app/src/main/res/menu/option_tag_timeline.xml16
-rw-r--r--app/src/main/res/menu/remote_instances.xml20
-rw-r--r--app/src/main/res/values/colors.xml5
-rw-r--r--app/src/main/res/values/strings.xml24
77 files changed, 3003 insertions, 1347 deletions
diff --git a/app/build.gradle b/app/build.gradle
index b05c9891a..d586d9b30 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -7,8 +7,8 @@ android {
applicationId "fr.gouv.etalab.mastodon"
minSdkVersion 16
targetSdkVersion 28
- versionCode 204
- versionName "1.41.1"
+ versionCode 217
+ versionName "1.62.0-beta-1"
multiDexEnabled true
}
dexOptions {
@@ -81,7 +81,7 @@ dependencies {
implementation 'com.oguzdev:CircularFloatingActionMenu:1.0.2'
implementation 'com.github.franmontiel:LocaleChanger:0.9.2'
implementation 'com.github.stom79:SparkButton:1.0.10'
- implementation 'com.github.GrenderG:Toasty:1.3.0'
+ implementation 'com.github.GrenderG:Toasty:1.3.1'
implementation 'com.elconfidencial.bubbleshowcase:bubbleshowcase:1.3.1'
implementation 'com.android.support:multidex:1.0.3'
playstoreImplementation "io.github.kobakei:ratethisapp:$ratethisappLibraryVersion"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f34e05368..144a65db5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -42,6 +42,7 @@
<service
android:name=".services.LiveNotificationService"
android:exported="false"/>
+
<service android:name=".services.BackupStatusService"
android:exported="false"/>
<service android:name=".services.BackupStatusInDataBaseService"
@@ -60,6 +61,9 @@
</intent-filter>
</receiver>
<service
+ android:name=".services.StreamingHomeTimelineService"
+ android:exported="false"/>
+ <service
android:name=".services.StreamingFederatedTimelineService"
android:exported="false"/>
<service
@@ -178,6 +182,11 @@
android:label="@string/app_name"
android:launchMode="singleTask"
/>
+ <activity android:name=".activities.LanguageActivity"
+ android:windowSoftInputMode="stateAlwaysHidden"
+ android:configChanges="orientation|screenSize"
+ android:label="@string/app_name"
+ />
<activity android:name=".activities.AboutActivity"
android:windowSoftInputMode="stateAlwaysHidden"
android:configChanges="orientation|screenSize"
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 1ff2dd7f2..229221bd8 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
@@ -70,10 +70,10 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
-import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TextView;
@@ -86,6 +86,7 @@ import org.json.JSONObject;
import java.io.File;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
@@ -147,8 +148,7 @@ import fr.gouv.etalab.mastodon.sqlite.Sqlite;
import static fr.gouv.etalab.mastodon.asynctasks.ManageFiltersAsyncTask.action.GET_ALL_FILTER;
import static fr.gouv.etalab.mastodon.helper.Helper.ADD_USER_INTENT;
import static fr.gouv.etalab.mastodon.helper.Helper.BACKUP_INTENT;
-import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_THEME_INTENT;
-import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_USER_INTENT;
+import static fr.gouv.etalab.mastodon.helper.Helper.BACK_TO_SETTINGS;
import static fr.gouv.etalab.mastodon.helper.Helper.EXTERNAL_STORAGE_REQUEST_CODE;
import static fr.gouv.etalab.mastodon.helper.Helper.HOME_TIMELINE_INTENT;
import static fr.gouv.etalab.mastodon.helper.Helper.INSTANCE_NAME;
@@ -186,7 +186,7 @@ public abstract class BaseMainActivity extends BaseActivity
private DisplayStatusFragment homeFragment, federatedFragment, localFragment, artFragment;
private DisplayNotificationsFragment notificationsFragment;
private static final int ERROR_DIALOG_REQUEST_CODE = 97;
- private static BroadcastReceiver receive_data, receive_federated_data, receive_local_data;
+ private static BroadcastReceiver receive_data, receive_home_data, receive_federated_data, receive_local_data;
private boolean display_direct, display_local, display_global, display_art;
public static int countNewStatus = 0;
public static int countNewNotifications = 0;
@@ -195,7 +195,6 @@ public abstract class BaseMainActivity extends BaseActivity
boolean notif_follow, notif_add, notif_mention, notif_share, show_boosts, show_replies , show_nsfw;
String show_filtered;
private AppBarLayout appBar;
- private String bookmark;
private String userId;
private String instance;
public int countPage;
@@ -209,6 +208,7 @@ public abstract class BaseMainActivity extends BaseActivity
private int style;
private Activity activity;
private HashMap<String, Integer> tabPosition = new HashMap<>();
+ public static HashMap<Integer, RetrieveFeedsAsyncTask.Type> typePosition = new HashMap<>();
private FloatingActionButton federatedTimelines;
@Override
@@ -408,8 +408,10 @@ public abstract class BaseMainActivity extends BaseActivity
if(remoteInstances != null) {
SubMenu submMastodon = popup.getMenu().findItem(R.id.action_show_mastodon).getSubMenu();
SubMenu submPeertube = popup.getMenu().findItem(R.id.action_show_peertube).getSubMenu();
+ SubMenu submPixelfed = popup.getMenu().findItem(R.id.action_show_pixelfed).getSubMenu();
+ SubMenu submMisskey = popup.getMenu().findItem(R.id.action_show_misskey).getSubMenu();
SubMenu submChannel = popup.getMenu().findItem(R.id.action_show_channel).getSubMenu();
- int i = 0, j = 0 , k = 0;
+ int i = 0, j = 0 , k = 0, l = 0 , m = 0;
for (RemoteInstance remoteInstance : remoteInstances) {
if (remoteInstance.getType() == null || remoteInstance.getType().equals("MASTODON")) {
MenuItem itemPlaceHolder = submMastodon.findItem(R.id.mastodon_instances);
@@ -474,11 +476,73 @@ public abstract class BaseMainActivity extends BaseActivity
});
k++;
}
+ if (remoteInstance.getType() == null || remoteInstance.getType().equals("PIXELFED")) {
+ MenuItem itemPlaceHolder = submPixelfed.findItem(R.id.pixelfed_instance);
+ if( itemPlaceHolder != null)
+ itemPlaceHolder.setVisible(false);
+ MenuItem item = submPixelfed.add(0, j, Menu.NONE, remoteInstance.getHost());
+ item.setIcon(R.drawable.pixelfed);
+ item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ DisplayStatusFragment statusFragment;
+ Bundle bundle = new Bundle();
+ statusFragment = new DisplayStatusFragment();
+ bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PIXELFED);
+ bundle.putString("remote_instance", remoteInstance.getHost());
+ statusFragment.setArguments(bundle);
+ String fragmentTag = "REMOTE_INSTANCE";
+ instance_id = remoteInstance.getDbID();
+ FragmentManager fragmentManager = getSupportFragmentManager();
+ fragmentManager.beginTransaction()
+ .replace(R.id.main_app_container, statusFragment, fragmentTag).commit();
+ main_app_container.setVisibility(View.VISIBLE);
+ viewPager.setVisibility(View.GONE);
+ tabLayout.setVisibility(View.GONE);
+ toolbarTitle.setVisibility(View.VISIBLE);
+ delete_instance.setVisibility(View.VISIBLE);
+ toolbarTitle.setText(remoteInstance.getHost());
+ return false;
+ }
+ });
+ j++;
+ }
+ if (remoteInstance.getType() == null || remoteInstance.getType().equals("MISSKEY")) {
+ MenuItem itemPlaceHolder = submPixelfed.findItem(R.id.misskey_instance);
+ if( itemPlaceHolder != null)
+ itemPlaceHolder.setVisible(false);
+ MenuItem item = submMisskey.add(0, l, Menu.NONE, remoteInstance.getHost());
+ item.setIcon(R.drawable.misskey);
+ item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ DisplayStatusFragment statusFragment;
+ Bundle bundle = new Bundle();
+ statusFragment = new DisplayStatusFragment();
+ bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE);
+ bundle.putString("remote_instance", remoteInstance.getHost());
+ statusFragment.setArguments(bundle);
+ String fragmentTag = "REMOTE_INSTANCE";
+ instance_id = remoteInstance.getDbID();
+ FragmentManager fragmentManager = getSupportFragmentManager();
+ fragmentManager.beginTransaction()
+ .replace(R.id.main_app_container, statusFragment, fragmentTag).commit();
+ main_app_container.setVisibility(View.VISIBLE);
+ viewPager.setVisibility(View.GONE);
+ tabLayout.setVisibility(View.GONE);
+ toolbarTitle.setVisibility(View.VISIBLE);
+ delete_instance.setVisibility(View.VISIBLE);
+ toolbarTitle.setText(remoteInstance.getHost());
+ return false;
+ }
+ });
+ l++;
+ }
if (remoteInstance.getType() == null || remoteInstance.getType().equals("PEERTUBE")) {
MenuItem itemPlaceHolder = submPeertube.findItem(R.id.peertube_instances);
if( itemPlaceHolder != null)
itemPlaceHolder.setVisible(false);
- MenuItem item = submPeertube.add(0, j, Menu.NONE, remoteInstance.getHost());
+ MenuItem item = submPeertube.add(0, m, Menu.NONE, remoteInstance.getHost());
item.setIcon(R.drawable.peertube_icon);
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
@@ -503,7 +567,7 @@ public abstract class BaseMainActivity extends BaseActivity
return false;
}
});
- j++;
+ m++;
}
}
}
@@ -517,7 +581,9 @@ public abstract class BaseMainActivity extends BaseActivity
dialogBuilder.setView(dialogView);
AutoCompleteTextView instance_list = dialogView.findViewById(R.id.search_instance);
- CheckBox peertube_instance = dialogView.findViewById(R.id.peertube_instance);
+ //Manage download of attachments
+ RadioGroup radioGroup = dialogView.findViewById(R.id.set_attachment_group);
+
instance_list.setFilters(new InputFilter[]{new InputFilter.LengthFilter(60)});
dialogBuilder.setPositiveButton(R.string.validate, new DialogInterface.OnClickListener() {
@Override
@@ -528,18 +594,27 @@ public abstract class BaseMainActivity extends BaseActivity
@Override
public void run() {
try {
- if( !peertube_instance.isChecked())
+ if(radioGroup.getCheckedRadioButtonId() == R.id.mastodon_instance)
new HttpsConnection(BaseMainActivity.this).get("https://" + instanceName + "/api/v1/timelines/public?local=true", 10, null, null);
- else
+ else if( radioGroup.getCheckedRadioButtonId() == R.id.peertube_instance)
new HttpsConnection(BaseMainActivity.this).get("https://" + instanceName + "/api/v1/videos/", 10, null, null);
+ else if( radioGroup.getCheckedRadioButtonId() == R.id.pixelfed_instance) {
+ new HttpsConnection(BaseMainActivity.this).get("https://" + instanceName + "/api/v1/timelines/public", 10, null, null);
+ }else if( radioGroup.getCheckedRadioButtonId() == R.id.misskey_instance) {
+ new HttpsConnection(BaseMainActivity.this).po