diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index d3b8a94b0..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Screenshots and screen recordings** -If applicable, add screenshots (and screen recordings, if possible) to help explain your problem. - -**Version** -Megalodon version: [e.g. v1.1.4+fork.#] - -**Additional context** -- Does this issue also occur with the respective upstream release? (Please test using the respective `upstream-xxxxxx.apk` provided in [Releases](https://github.com/sk22/megalodon/releases)) No / Yes (`mastodon#…`) - - > In this case, please consider filing an [upstream bug report](https://github.com/mastodon/mastodon-android/issues) instead. If this bug is seriously impacting your usage or you think I might want to try to fix it for Megalodon, feel free to still create this issue! - -**Crash log** -If you know your way around Android development tools, please consider attaching a crash log, if possible. diff --git a/.github/ISSUE_TEMPLATE/feature-ui-request.md b/.github/ISSUE_TEMPLATE/feature-ui-request.md deleted file mode 100644 index 7a56c359a..000000000 --- a/.github/ISSUE_TEMPLATE/feature-ui-request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature/UI request -about: Suggest an idea for this project -title: '' -labels: feature -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -If applicable: a clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/something-else.md b/.github/ISSUE_TEMPLATE/something-else.md deleted file mode 100644 index 995600f1e..000000000 --- a/.github/ISSUE_TEMPLATE/something-else.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: It's something else… -about: Issues that can't be categorized as feature requests or bug reports -title: '' -labels: '' -assignees: '' - ---- - - diff --git a/mastodon/build.gradle b/mastodon/build.gradle index 845841c65..5bd4f81ad 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -9,8 +9,8 @@ android { applicationId "org.joinmastodon.android.moshinda" minSdk 23 targetSdk 33 - versionCode 84 - versionName "1.1.4+fork.84.moshinda" + versionCode 85 + versionName "1.1.4+fork.85.moshinda" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" resConfigs "ar-rSA", "be-rBY", "bn-rBD", "bs-rBA", "ca-rES", "cs-rCZ", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "nl-rNL", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "vi-rVN", "zh-rCN", "zh-rTW" } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java index ca33aefd9..30b38ffbf 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java @@ -202,6 +202,17 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene private void onTabSelected(@IdRes int tab){ Fragment newFragment=fragmentForTab(tab); if(tab==currentTab){ + if(tab == R.id.tab_search){ + if(newFragment instanceof ScrollableToTop scrollable) + scrollable.scrollToTop(); + searchFragment.selectSearch(); + return; + } + if(newFragment instanceof ScrollableToTop scrollable) + scrollable.scrollToTop(); + return; + } + if(tab==currentTab && tab == R.id.tab_search){ if(newFragment instanceof ScrollableToTop scrollable) scrollable.scrollToTop(); return; @@ -235,6 +246,12 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene new AccountSwitcherSheet(getActivity()).show(); return true; } + if(tab==R.id.tab_search){ + onTabSelected(R.id.tab_search); + tabBar.selectTab(R.id.tab_search); + searchFragment.selectSearch(); + return true; + } return false; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index 9bfda95f8..cddb620d3 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -1,16 +1,11 @@ package org.joinmastodon.android.fragments; -import static android.content.Context.CLIPBOARD_SERVICE; - import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.app.Activity; import android.app.Fragment; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.graphics.Outline; @@ -19,8 +14,6 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.os.VibrationEffect; -import android.os.Vibrator; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.style.ImageSpan; @@ -38,13 +31,16 @@ import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; -import android.widget.Toast; import android.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import androidx.viewpager2.widget.ViewPager2; + import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.accounts.GetAccountByID; @@ -83,10 +79,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; -import androidx.viewpager2.widget.ViewPager2; import me.grishka.appkit.Nav; import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.ErrorResponse; @@ -106,7 +98,6 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList private ImageView avatar; private CoverImageView cover; private View avatarBorder; - private Button botIcon; private TextView name, username, bio, followersCount, followersLabel, followingCount, followingLabel, postsCount, postsLabel; private ProgressBarButton actionButton, notifyButton; private ViewPager2 pager; @@ -295,6 +286,10 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList followersBtn.setOnClickListener(this::onFollowersOrFollowingClick); followingBtn.setOnClickListener(this::onFollowersOrFollowingClick); + if (account != null && account.bot) { + username.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_fluent_bot_24_filled, 0, 0, 0); + } + username.setOnLongClickListener(v->{ String usernameString=account.acct; if(!usernameString.contains("@")){ @@ -557,14 +552,15 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList if(relationship==null && !isOwnProfile) return; inflater.inflate(isOwnProfile ? R.menu.profile_own : R.menu.profile, menu); - UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.bookmarks, R.id.followed_hashtags, R.id.favorites, R.id.scheduled, R.id.share, R.id.bot_icon); + if(isOwnProfile){ + UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.bookmarks, R.id.followed_hashtags, R.id.favorites, R.id.scheduled, R.id.share); + }else{ + UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.bookmarks, R.id.followed_hashtags, R.id.favorites, R.id.scheduled); + } menu.findItem(R.id.share).setTitle(getString(R.string.share_user, account.getShortUsername())); if(isOwnProfile) return; - MenuItem botIcon = menu.findItem(R.id.bot_icon); - botIcon.setVisible(account.bot); - MenuItem mute = menu.findItem(R.id.mute); mute.setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getShortUsername())); mute.setIcon(relationship.muting ? R.drawable.ic_fluent_speaker_0_24_regular : R.drawable.ic_fluent_speaker_off_24_regular); @@ -651,8 +647,6 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList Bundle args=new Bundle(); args.putString("account", accountID); Nav.go(getActivity(), ScheduledStatusListFragment.class, args); - }else if(id==R.id.bot_icon){ - Toast.makeText(getActivity(), R.string.sk_bot_account, Toast.LENGTH_LONG).show(); } return true; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java index d64d291f5..b50936034 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java @@ -131,10 +131,15 @@ public class SettingsFragment extends MastodonToolbarFragment{ case NORD -> R.string.sk_color_palette_nord; }); })); - items.add(new ButtonItem(R.string.sk_settings_publish_button_text, R.drawable.ic_fluent_send_24_regular, b->{ + items.add(new ButtonItem(R.string.sk_settings_publish_button_text, R.drawable.ic_fluent_send_24_regular, b-> { updatePublishText(b); - - b.setOnClickListener(l->{ + if (GlobalUserPreferences.relocatePublishButton) { + b.setOnClickListener(l -> { + Toast.makeText(getActivity(), R.string.sk_disable_relocate_publish_button_to_enable_customization, + Toast.LENGTH_LONG).show(); + }); + } else { + b.setOnClickListener(l -> { FrameLayout inputWrap = new FrameLayout(getContext()); EditText input = new EditText(getContext()); input.setHint(R.string.publish); @@ -154,9 +159,10 @@ public class SettingsFragment extends MastodonToolbarFragment{ GlobalUserPreferences.save(); updatePublishText(b); }) - .setNegativeButton(R.string.cancel, (d, which) -> {}) + .setNegativeButton(R.string.cancel, (d, which) -> { + }) .show(); - }); + });} })); items.add(new SwitchItem(R.string.sk_settings_uniform_icon_for_notifications, R.drawable.ic_ntf_logo, GlobalUserPreferences.uniformNotificationIcon, i->{ GlobalUserPreferences.uniformNotificationIcon=i.checked; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java index b67c7f5da..dd40d2367 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/DiscoverFragment.java @@ -358,4 +358,10 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop, return position; } } + + public void selectSearch(){ + searchEdit.requestFocus(); + onSearchEditFocusChanged(searchEdit, true); + getActivity().getSystemService(InputMethodManager.class).showSoftInput(searchEdit, 0); + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java index be0df7997..a5ad255fc 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java @@ -15,6 +15,9 @@ import android.view.ViewGroup; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; +import android.view.animation.AnimationSet; +import android.view.animation.BounceInterpolator; +import android.view.animation.RotateAnimation; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageView; @@ -58,6 +61,8 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ private final TextView reply, boost, favorite, bookmark; private final ImageView share; private static final Animation opacityOut, opacityIn; + private static AnimationSet animSet; + private View touchingView = null; private boolean longClickPerformed = false; @@ -86,6 +91,15 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ opacityIn = new AlphaAnimation(0.55f, 1); opacityIn.setDuration(400); opacityIn.setInterpolator(CubicBezierInterpolator.DEFAULT); + Animation spin = new RotateAnimation(0, 360, + Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, + 0.5f); + + animSet = new AnimationSet(true); + animSet.setInterpolator(CubicBezierInterpolator.DEFAULT); + animSet.addAnimation(spin); + animSet.addAnimation(opacityIn); + animSet.setDuration(400); } public Holder(Activity activity, ViewGroup parent){ @@ -296,7 +310,11 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ private void onFavoriteClick(View v){ favorite.setSelected(!item.status.favourited); AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(item.status, !item.status.favourited, r->{ - v.startAnimation(opacityIn); + if (item.status.favourited) { + v.startAnimation(animSet); + } else { + v.startAnimation(opacityIn); + } bindButton(favorite, r.favouritesCount); }); } @@ -363,4 +381,4 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ return 0; } } -} +} \ No newline at end of file diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index f3e6bf02c..a0b080d97 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -9,6 +9,7 @@ import android.os.Build; import android.os.Bundle; import android.text.SpannableStringBuilder; import android.text.TextUtils; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; @@ -267,6 +268,9 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ public void onBind(HeaderStatusDisplayItem item){ name.setText(item.parsedName); username.setText('@'+item.user.acct); + + username.setCompoundDrawablesWithIntrinsicBounds(item.user.bot ? R.drawable.ic_fluent_bot_24_filled : 0, 0, 0, 0); + if (item.scheduledStatus!=null) if (item.scheduledStatus.scheduledAt.isAfter(CreateStatus.DRAFTS_AFTER_INSTANT)) { timestamp.setText(R.string.sk_draft); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/text/LinkSpan.java b/mastodon/src/main/java/org/joinmastodon/android/ui/text/LinkSpan.java index 94679733f..fee86b22a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/text/LinkSpan.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/text/LinkSpan.java @@ -1,8 +1,10 @@ package org.joinmastodon.android.ui.text; import android.content.Context; +import android.content.Intent; import android.text.TextPaint; import android.text.style.CharacterStyle; +import android.util.Log; import android.view.View; import org.joinmastodon.android.ui.utils.UiUtils; @@ -42,7 +44,14 @@ public class LinkSpan extends CharacterStyle { } public void onLongClick(View view) { - UiUtils.copyText(view, getType() == Type.URL ? link : text); + if (getType() == Type.URL) { + Intent shareIntent = new Intent(Intent.ACTION_SEND) + .setType("text/plain") + .putExtra(Intent.EXTRA_TEXT, link); + view.getContext().startActivity(Intent.createChooser(shareIntent, null)); + } else { + UiUtils.copyText(view, text); + } } public String getLink(){ diff --git a/mastodon/src/main/res/drawable/ic_fluent_bot_20_filled.xml b/mastodon/src/main/res/drawable/ic_fluent_bot_20_filled.xml new file mode 100644 index 000000000..56e754e5f --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_bot_20_filled.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/mastodon/src/main/res/drawable/ic_fluent_bot_20_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_bot_20_regular.xml index 5464f5d35..e182b6fee 100644 --- a/mastodon/src/main/res/drawable/ic_fluent_bot_20_regular.xml +++ b/mastodon/src/main/res/drawable/ic_fluent_bot_20_regular.xml @@ -3,7 +3,7 @@ android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"> - + diff --git a/mastodon/src/main/res/drawable/ic_fluent_bot_24_filled.xml b/mastodon/src/main/res/drawable/ic_fluent_bot_24_filled.xml new file mode 100644 index 000000000..e05adcb6f --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_bot_24_filled.xml @@ -0,0 +1,9 @@ + + + diff --git a/mastodon/src/main/res/drawable/ic_fluent_bot_24_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_bot_24_regular.xml deleted file mode 100644 index 540503341..000000000 --- a/mastodon/src/main/res/drawable/ic_fluent_bot_24_regular.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/mastodon/src/main/res/menu/profile.xml b/mastodon/src/main/res/menu/profile.xml index aea46e2f8..1f2a99a2d 100644 --- a/mastodon/src/main/res/menu/profile.xml +++ b/mastodon/src/main/res/menu/profile.xml @@ -1,6 +1,5 @@ - diff --git a/mastodon/src/main/res/values-de-rDE/strings_sk.xml b/mastodon/src/main/res/values-de-rDE/strings_sk.xml index e68e0de6d..1af340463 100644 --- a/mastodon/src/main/res/values-de-rDE/strings_sk.xml +++ b/mastodon/src/main/res/values-de-rDE/strings_sk.xml @@ -133,5 +133,5 @@ Keine Bildbeschreibung Die enthaltenen Bilder haben keine Beschreibung. Bitte füge eine Beschreibung hinzu, damit auch sehbehinderte Personen teilnehmen können. Kürzlich verwendet - Kürzlich verwendetes Emoji löschen + Kürzlich verwendete Emojis löschen \ No newline at end of file diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 578693434..6600f2cb7 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -37,7 +37,7 @@ Lists with %s Always reveal content warnings Disable scrolling text in title bars - Disable toot dividers + Disable post dividers Relocate publish button Contribute to Moshidon Show federated timeline @@ -138,4 +138,5 @@ Add new poll option + Disable "Relocate publish button" to allow customization \ No newline at end of file diff --git a/metadata/en-US/changelogs/85.txt b/metadata/en-US/changelogs/85.txt new file mode 100644 index 000000000..e2a003454 --- /dev/null +++ b/metadata/en-US/changelogs/85.txt @@ -0,0 +1,7 @@ +New stuff that comes with Release 85: +Adding long click search button to bring up the keyboard +Clicking the search button when already in search tab also brings up keyboard +Bringing up a bot icon to toots from bot accounts, Thanks @FineFindus! +Improving visibility of bot icon inside account profile, Thanks @FineFindus! +Updating german translation, Thanks @Dontobi! +Fixing minor UI issues \ No newline at end of file