summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2022-07-09 17:45:33 +0200
committerThomas <tschneider.ac@gmail.com>2022-07-09 17:45:33 +0200
commit867d2ed49288db686759f74f0edd6659713b42aa (patch)
tree49e04a644fdc756408970cc8de48547d1e279d0f
parent17ae8a243a5b6431e4c4aafec88bf47eb6ee3188 (diff)
parentea8f497902a124160b9f2d7c8f77438278ecacf2 (diff)
Merge branch 'develop' into main3.0.6
-rw-r--r--.gitignore2
-rw-r--r--app/build.gradle4
-rw-r--r--app/src/fdroid/res/xml/file_paths.xml2
-rw-r--r--app/src/main/AndroidManifest.xml5
-rw-r--r--app/src/main/java/app/fedilab/android/BaseMainActivity.java52
-rw-r--r--app/src/main/java/app/fedilab/android/MainApplication.java2
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ComposeActivity.java5
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ContextActivity.java2
-rw-r--r--app/src/main/java/app/fedilab/android/activities/MediaActivity.java53
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ProfileActivity.java82
-rw-r--r--app/src/main/java/app/fedilab/android/activities/ScheduledActivity.java41
-rw-r--r--app/src/main/java/app/fedilab/android/activities/SearchResultTabActivity.java102
-rw-r--r--app/src/main/java/app/fedilab/android/activities/TrendsActivity.java156
-rw-r--r--app/src/main/java/app/fedilab/android/client/endpoints/MastodonTimelinesService.java9
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/api/Attachment.java30
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/app/QuickLoad.java6
-rw-r--r--app/src/main/java/app/fedilab/android/client/entities/app/Timeline.java4
-rw-r--r--app/src/main/java/app/fedilab/android/helper/CirclesDrawingView.java249
-rw-r--r--app/src/main/java/app/fedilab/android/helper/GlideFocus.java209
-rw-r--r--app/src/main/java/app/fedilab/android/helper/Helper.java38
-rw-r--r--app/src/main/java/app/fedilab/android/helper/MediaHelper.java2
-rw-r--r--app/src/main/java/app/fedilab/android/helper/NestedScrollableHost.kt113
-rw-r--r--app/src/main/java/app/fedilab/android/helper/NotificationsHelper.java4
-rw-r--r--app/src/main/java/app/fedilab/android/helper/PinnedTimelineHelper.java166
-rw-r--r--app/src/main/java/app/fedilab/android/helper/SpannableHelper.java10
-rw-r--r--app/src/main/java/app/fedilab/android/imageeditor/EditImageActivity.java52
-rw-r--r--app/src/main/java/app/fedilab/android/imageeditor/tools/EditingToolsAdapter.java1
-rw-r--r--app/src/main/java/app/fedilab/android/imageeditor/tools/ToolType.java3
-rw-r--r--app/src/main/java/app/fedilab/android/services/PostMessageService.java3
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java18
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/FieldAdapter.java85
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/NotificationAdapter.java18
-rw-r--r--app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java40
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentNotificationsSettings.java8
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentThemingSettings.java2
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonAccount.java15
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonAnnouncement.java13
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonNotification.java41
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTag.java12
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java109
-rw-r--r--app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentProfileTimeline.java3
-rw-r--r--app/src/main/java/app/fedilab/android/ui/pageadapter/FedilabPageAdapter.java46
-rw-r--r--app/src/main/java/app/fedilab/android/ui/pageadapter/FedilabProfilePageAdapter.java32
-rw-r--r--app/src/main/java/app/fedilab/android/ui/pageadapter/FedilabProfileTLPageAdapter.java30
-rw-r--r--app/src/main/java/app/fedilab/android/ui/pageadapter/FedilabScheduledPageAdapter.java29
-rw-r--r--app/src/main/java/app/fedilab/android/viewmodel/mastodon/TimelinesVM.java53
-rw-r--r--app/src/main/res/drawable/ic_baseline_filter_center_focus_24.xml10
-rw-r--r--app/src/main/res/drawable/ic_baseline_trending_up_24.xml11
-rw-r--r--app/src/main/res/drawable/ic_fetch_more_arrow_downward.xml10
-rw-r--r--app/src/main/res/drawable/ic_fetch_more_arrow_upward.xml10
-rw-r--r--app/src/main/res/layout/activity_edit_image.xml20
-rw-r--r--app/src/main/res/layout/activity_main.xml17
-rw-r--r--app/src/main/res/layout/activity_media_pager.xml2
-rw-r--r--app/src/main/res/layout/activity_profile.xml509
-rw-r--r--app/src/main/res/layout/activity_scheduled.xml2
-rw-r--r--app/src/main/res/layout/activity_search_result_tabs.xml14
-rw-r--r--app/src/main/res/layout/activity_trends.xml38
-rw-r--r--app/src/main/res/layout/drawer_fetch_more.xml45
-rw-r--r--app/src/main/res/layout/drawer_field.xml37
-rw-r--r--app/src/main/res/layout/fragment_profile_timelines.xml2
-rw-r--r--app/src/main/res/menu/activity_main_drawer.xml6
-rw-r--r--app/src/main/res/values-uk/strings.xml57
-rw-r--r--app/src/main/res/xml/pref_interface.xml2
-rw-r--r--app/src/playstore/res/xml/file_paths.xml2
-rw-r--r--src/fdroid/fastlane/metadata/android/en/changelogs/396.txt13
65 files changed, 1838 insertions, 930 deletions
diff --git a/.gitignore b/.gitignore
index 6de4017ff..18d1198a5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,5 @@
local.properties
/cropper/build/
/build/
+/app/fdroid/release/
+/app/playstore/release/
diff --git a/app/build.gradle b/app/build.gradle
index 66f6b632c..dc9ea8795 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@ android {
defaultConfig {
minSdk 21
targetSdk 31
- versionCode 395
- versionName "3.0.5"
+ versionCode 396
+ versionName "3.0.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
flavorDimensions "default"
diff --git a/app/src/fdroid/res/xml/file_paths.xml b/app/src/fdroid/res/xml/file_paths.xml
index 1d2a9d9fa..758bbce98 100644
--- a/app/src/fdroid/res/xml/file_paths.xml
+++ b/app/src/fdroid/res/xml/file_paths.xml
@@ -2,7 +2,7 @@
<paths>
<external-path
name="my_images"
- path="Android/data/fr.gouv.etalab.mastodon.test/files/Pictures" />
+ path="Android/data/fr.gouv.etalab.mastodon/files/Pictures" />
<cache-path
name="*"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3c0f0dc06..481ca2625 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -118,6 +118,11 @@
android:theme="@style/AppThemeBar"
android:label="@string/search" />
<activity
+ android:name=".activities.TrendsActivity"
+ android:configChanges="keyboardHidden|orientation|screenSize"
+ android:label="@string/trending"
+ android:theme="@style/AppThemeBar" />
+ <activity
android:name=".activities.ReorderTimelinesActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/reorder_timelines"
diff --git a/app/src/main/java/app/fedilab/android/BaseMainActivity.java b/app/src/main/java/app/fedilab/android/BaseMainActivity.java
index 6fe89afc5..343bbcc5d 100644
--- a/app/src/main/java/app/fedilab/android/BaseMainActivity.java
+++ b/app/src/main/java/app/fedilab/android/BaseMainActivity.java
@@ -107,6 +107,7 @@ import app.fedilab.android.activities.ReorderTimelinesActivity;
import app.fedilab.android.activities.ScheduledActivity;
import app.fedilab.android.activities.SearchResultTabActivity;
import app.fedilab.android.activities.SettingsActivity;
+import app.fedilab.android.activities.TrendsActivity;
import app.fedilab.android.broadcastreceiver.NetworkStateReceiver;
import app.fedilab.android.client.entities.api.Emoji;
import app.fedilab.android.client.entities.api.EmojiInstance;
@@ -509,6 +510,9 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
} else if (id == R.id.nav_announcements) {
Intent intent = new Intent(this, AnnouncementActivity.class);
startActivity(intent);
+ } else if (id == R.id.nav_trends) {
+ Intent intent = new Intent(this, TrendsActivity.class);
+ startActivity(intent);
} else if (id == R.id.nav_cache) {
Intent intent = new Intent(BaseMainActivity.this, CacheActivity.class);
startActivity(intent);
@@ -900,10 +904,12 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
itemFilter.setTitle(show_filtered);
}
popup.setOnDismissListener(menu1 -> {
- Fragment fragment = getSupportFragmentManager().findFragmentByTag("f" + binding.viewPager.getCurrentItem());
- if (fragment instanceof FragmentMastodonTimeline && fragment.isVisible()) {
- FragmentMastodonTimeline fragmentMastodonTimeline = ((FragmentMastodonTimeline) fragment);
- fragmentMastodonTimeline.refreshAllAdapters();
+ if (binding.viewPager.getAdapter() != null) {
+ Fragment fragment = (Fragment) binding.viewPager.getAdapter().instantiateItem(binding.viewPager, binding.tabLayout.getSelectedTabPosition());
+ if (fragment instanceof FragmentMastodonTimeline && fragment.isVisible()) {
+ FragmentMastodonTimeline fragmentMastodonTimeline = ((FragmentMastodonTimeline) fragment);
+ fragmentMastodonTimeline.refreshAllAdapters();
+ }
}
});
String finalShow_filtered = show_filtered;
@@ -990,13 +996,15 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
}
public void refreshFragment() {
- Fragment fragment = getSupportFragmentManager().findFragmentByTag("f" + binding.viewPager.getCurrentItem());
- if (fragment instanceof FragmentNotificationContainer) {
- FragmentTransaction fragTransaction = getSupportFragmentManager().beginTransaction();
- fragTransaction.detach(fragment).commit();
- FragmentTransaction fragTransaction2 = getSupportFragmentManager().beginTransaction();
- fragTransaction2.attach(fragment);
- fragTransaction2.commit();
+ if (binding.viewPager.getAdapter() != null) {
+ Fragment fragment = (Fragment) binding.viewPager.getAdapter().instantiateItem(binding.viewPager, binding.tabLayout.getSelectedTabPosition());
+ if (fragment instanceof FragmentNotificationContainer) {
+ FragmentTransaction fragTransaction = getSupportFragmentManager().beginTransaction();
+ fragTransaction.detach(fragment).commit();
+ FragmentTransaction fragTransaction2 = getSupportFragmentManager().beginTransaction();
+ fragTransaction2.attach(fragment);
+ fragTransaction2.commit();
+ }
}
}
@@ -1035,16 +1043,18 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
*/
private void scrollToTop() {
- Fragment fragment = getSupportFragmentManager().findFragmentByTag("f" + binding.viewPager.getCurrentItem());
- if (fragment instanceof FragmentMastodonTimeline) {
- FragmentMastodonTimeline fragmentMastodonTimeline = ((FragmentMastodonTimeline) fragment);
- fragmentMastodonTimeline.scrollToTop();
- } else if (fragment instanceof FragmentMastodonConversation) {
- FragmentMastodonConversation fragmentMastodonConversation = ((FragmentMastodonConversation) fragment);
- fragmentMastodonConversation.scrollToTop();
- } else if (fragment instanceof FragmentNotificationContainer) {
- FragmentNotificationContainer fragmentNotificationContainer = ((FragmentNotificationContainer) fragment);
- fragmentNotificationContainer.scrollToTop();
+ if (binding.viewPager.getAdapter() != null) {
+ Fragment fragment = (Fragment) binding.viewPager.getAdapter().instantiateItem(binding.viewPager, binding.tabLayout.getSelectedTabPosition());
+ if (fragment instanceof FragmentMastodonTimeline) {
+ FragmentMastodonTimeline fragmentMastodonTimeline = ((FragmentMastodonTimeline) fragment);
+ fragmentMastodonTimeline.scrollToTop();
+ } else if (fragment instanceof FragmentMastodonConversation) {
+ FragmentMastodonConversation fragmentMastodonConversation = ((FragmentMastodonConversation) fragment);
+ fragmentMastodonConversation.scrollToTop();
+ } else if (fragment instanceof FragmentNotificationContainer) {
+ FragmentNotificationContainer fragmentNotificationContainer = ((FragmentNotificationContainer) fragment);
+ fragmentNotificationContainer.scrollToTop();
+ }
}
}
diff --git a/app/src/main/java/app/fedilab/android/MainApplication.java b/app/src/main/java/app/fedilab/android/MainApplication.java
index f880a27ed..a2d40e7d0 100644
--- a/app/src/main/java/app/fedilab/android/MainApplication.java
+++ b/app/src/main/java/app/fedilab/android/MainApplication.java
@@ -75,7 +75,7 @@ public class MainApplication extends MultiDexApplication {
super.attachBaseContext(base);
MultiDex.install(MainApplication.this);
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(MainApplication.this);
- boolean send_crash_reports = sharedpreferences.getBoolean(getString(R.string.SET_SEND_CRASH_REPORTS), true);
+ boolean send_crash_reports = sharedpreferences.getBoolean(getString(R.string.SET_SEND_CRASH_REPORTS), false);
if (send_crash_reports) {
ACRA.init(this, new CoreConfigurationBuilder()
//core configuration:
diff --git a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java
index 0ddda7578..58c28c852 100644
--- a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java
@@ -109,12 +109,17 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
@Override
public void onReceive(android.content.Context context, Intent intent) {
String imgpath = intent.getStringExtra("imgpath");
+ float focusX = intent.getFloatExtra("focusX", -2);
+ float focusY = intent.getFloatExtra("focusY", -2);
if (imgpath != null) {
int position = 0;
for (Status status : statusList) {
if (status.media_attachments != null && status.media_attachments.size() > 0) {
for (Attachment attachment : status.media_attachments) {
if (attachment.local_path.equalsIgnoreCase(imgpath)) {
+ if (focusX != -2) {
+ attachment.focus = focusX + "," + focusY;
+ }
composeAdapter.notifyItemChanged(position);
break;
}
diff --git a/app/src/main/java/app/fedilab/android/activities/ContextActivity.java b/app/src/main/java/app/fedilab/android/activities/ContextActivity.java
index 51fd8f320..b763e87f3 100644
--- a/app/src/main/java/app/fedilab/android/activities/ContextActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/ContextActivity.java
@@ -82,7 +82,7 @@ public class ContextActivity extends BaseActivity {
focusedStatus = null; // or other values
if (b != null)
focusedStatus = (Status) b.getSerializable(Helper.ARG_STATUS);
- if (focusedStatus == null) {
+ if (focusedStatus == null && currentAccount == null || currentAccount.mastodon_account == null) {
finish();
return;
}
diff --git a/app/src/main/java/app/fedilab/android/activities/MediaActivity.java b/app/src/main/java/app/fedilab/android/activities/MediaActivity.java
index baeb5a82a..ca275b439 100644
--- a/app/src/main/java/app/fedilab/android/activities/MediaActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/MediaActivity.java
@@ -33,15 +33,18 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewGroup;
import android.view.Window;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentActivity;
-import androidx.viewpager2.adapter.FragmentStateAdapter;
-import androidx.viewpager2.widget.ViewPager2;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentStatePagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+
+import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
@@ -94,6 +97,7 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
private float startX;
private float startY;
private ActivityMediaPagerBinding binding;
+ private FragmentMedia mCurrentFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -123,7 +127,7 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
setTitle("");
- ScreenSlidePagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(MediaActivity.this);
+ ScreenSlidePagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
binding.mediaViewpager.setAdapter(mPagerAdapter);
binding.mediaViewpager.setSaveEnabled(false);
binding.mediaViewpager.setCurrentItem(mediaPosition - 1);
@@ -135,15 +139,14 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
binding.mediaDescription.setText(description);
}
- binding.mediaViewpager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
- @Override
+ binding.mediaViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ public void onPageScrollStateChanged(int state) {
+ }
+
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- super.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
- @Override
public void onPageSelected(int position) {
- super.onPageSelected(position);
String description = attachments.get(position).description;
if (handler != null) {
handler.removeCallbacksAndMessages(null);
@@ -153,13 +156,9 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
binding.mediaDescription.setText(description);
}
}
-
- @Override
- public void onPageScrollStateChanged(int state) {
- super.onPageScrollStateChanged(state);
- }
});
+
setFullscreen(true);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
@@ -358,18 +357,22 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
+ public FragmentMedia getCurrentFragment() {
+ return mCurrentFragment;
+ }
+
/**
* Media Pager
*/
- private class ScreenSlidePagerAdapter extends FragmentStateAdapter {
-
- ScreenSlidePagerAdapter(FragmentActivity fa) {
- super(fa);
+ @SuppressWarnings("deprecation")
+ private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
+ ScreenSlidePagerAdapter(FragmentManager fm) {
+ super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
- @NonNull
+ @NotNull
@Override
- public Fragment createFragment(int position) {
+ public Fragment getItem(int position) {
Bundle bundle = new Bundle();
FragmentMedia mediaSliderFragment = new FragmentMedia();
bundle.putInt(Helper.ARG_MEDIA_POSITION, position);
@@ -379,7 +382,15 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
}
@Override
- public int getItemCount() {
+ public void setPrimaryItem(@NotNull ViewGroup container, int position, @NotNull Object object) {
+ if (getCurrentFragment() != object) {
+ mCurrentFragment = ((FragmentMedia) object);
+ }
+ super.setPrimaryItem(container, position, object);
+ }
+
+ @Override
+ public int getCount() {
return attachments.size();
}
}
diff --git a/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java b/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java
index e8d8fc522..1226c83d2 100644
--- a/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/ProfileActivity.java
@@ -32,7 +32,6 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.text.Html;
-import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
@@ -63,7 +62,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
-import com.google.android.material.tabs.TabLayoutMediator;
+import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList;
import java.util.Date;
@@ -94,6 +93,7 @@ import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.MastodonHelper;
import app.fedilab.android.helper.SpannableHelper;
import app.fedilab.android.helper.ThemeHelper;