From 30a66a26c6b579ba202c598a20e35f3f1a1f0d05 Mon Sep 17 00:00:00 2001 From: Grishka Date: Sun, 2 Jul 2023 10:50:01 +0300 Subject: [PATCH] Minor fixes --- .../fragments/ProfileAboutFragment.java | 21 +++++++++++++++-- .../android/fragments/ProfileFragment.java | 23 ++++++++++++++----- .../res/layout/fragment_onboarding_signup.xml | 1 + .../src/main/res/layout/fragment_profile.xml | 11 +++++---- .../res/layout/header_onboarding_login.xml | 1 + 5 files changed, 45 insertions(+), 12 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileAboutFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileAboutFragment.java index ea1aae4d4..061e981cc 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileAboutFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileAboutFragment.java @@ -52,6 +52,7 @@ public class ProfileAboutFragment extends Fragment implements WindowInsetsAwareF private boolean isInEditMode; private ItemTouchHelper dragHelper=new ItemTouchHelper(new ReorderCallback()); private ListImageLoaderWrapper imgLoader; + private boolean editDirty; public void setFields(List fields){ this.fields=fields; @@ -83,12 +84,17 @@ public class ProfileAboutFragment extends Fragment implements WindowInsetsAwareF fields=editableFields; adapter.notifyDataSetChanged(); dragHelper.attachToRecyclerView(list); + editDirty=false; } public List getFields(){ return fields; } + public boolean isEditDirty(){ + return editDirty; + } + @Override public void onApplyWindowInsets(WindowInsets insets){ if(Build.VERSION.SDK_INT>=29 && insets.getTappableElementInsets().bottom==0){ @@ -209,6 +215,7 @@ public class ProfileAboutFragment extends Fragment implements WindowInsetsAwareF private class EditableAboutViewHolder extends BaseViewHolder{ private final EditText title; private final EditText value; + private boolean ignoreTextChange; public EditableAboutViewHolder(){ super(R.layout.onboarding_profile_field); @@ -218,16 +225,26 @@ public class ProfileAboutFragment extends Fragment implements WindowInsetsAwareF dragHelper.startDrag(this); return true; }); - title.addTextChangedListener(new SimpleTextWatcher(e->item.name=e.toString())); - value.addTextChangedListener(new SimpleTextWatcher(e->item.value=e.toString())); + title.addTextChangedListener(new SimpleTextWatcher(e->{ + item.name=e.toString(); + if(!ignoreTextChange) + editDirty=true; + })); + value.addTextChangedListener(new SimpleTextWatcher(e->{ + item.value=e.toString(); + if(!ignoreTextChange) + editDirty=true; + })); findViewById(R.id.delete).setOnClickListener(this::onRemoveRowClick); } @Override public void onBind(AccountField item){ super.onBind(item); + ignoreTextChange=true; title.setText(item.name); value.setText(item.value); + ignoreTextChange=false; } private void onRemoveRowClick(View v){ 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 e64fda8d5..fc6b3cd94 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -67,6 +67,7 @@ import org.joinmastodon.android.ui.tabs.TabLayout; import org.joinmastodon.android.ui.tabs.TabLayoutMediator; import org.joinmastodon.android.ui.text.CustomEmojiSpan; import org.joinmastodon.android.ui.text.HtmlParser; +import org.joinmastodon.android.ui.utils.SimpleTextWatcher; import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.views.CoverImageView; import org.joinmastodon.android.ui.views.CustomDrawingOrderLinearLayout; @@ -134,7 +135,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList private boolean isOwnProfile; private ArrayList fields=new ArrayList<>(); - private boolean isInEditMode; + private boolean isInEditMode, editDirty; private Uri editNewAvatar, editNewCover; private String profileAccountID; private boolean refreshing; @@ -304,6 +305,9 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList refreshLayout.setProgressBackgroundColorSchemeColor(UiUtils.alphaBlendColors(colorBackground, colorPrimary, 0.11f)); refreshLayout.setColorSchemeColors(colorPrimary); + nameEdit.addTextChangedListener(new SimpleTextWatcher(e->editDirty=true)); + bioEdit.addTextChangedListener(new SimpleTextWatcher(e->editDirty=true)); + return sizeWrapper; } @@ -813,6 +817,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList aboutFragment.enterEditMode(account.source.fields); refreshLayout.setEnabled(false); + editDirty=false; } private void exitEditMode(){ @@ -896,11 +901,15 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList @Override public boolean onBackPressed(){ if(isInEditMode){ - new M3AlertDialogBuilder(getActivity()) - .setTitle(R.string.discard_changes) - .setPositiveButton(R.string.discard, (dlg, btn)->exitEditMode()) - .setNegativeButton(R.string.cancel, null) - .show(); + if(editDirty || aboutFragment.isEditDirty()){ + new M3AlertDialogBuilder(getActivity()) + .setTitle(R.string.discard_changes) + .setPositiveButton(R.string.discard, (dlg, btn)->exitEditMode()) + .setNegativeButton(R.string.cancel, null) + .show(); + }else{ + exitEditMode(); + } return true; } return false; @@ -961,9 +970,11 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList if(requestCode==AVATAR_RESULT){ editNewAvatar=data.getData(); ViewImageLoader.loadWithoutAnimation(avatar, null, new UrlImageLoaderRequest(editNewAvatar, V.dp(100), V.dp(100))); + editDirty=true; }else if(requestCode==COVER_RESULT){ editNewCover=data.getData(); ViewImageLoader.loadWithoutAnimation(cover, null, new UrlImageLoaderRequest(editNewCover, V.dp(1000), V.dp(1000))); + editDirty=true; } } } diff --git a/mastodon/src/main/res/layout/fragment_onboarding_signup.xml b/mastodon/src/main/res/layout/fragment_onboarding_signup.xml index d6535e6b7..285ce6e16 100644 --- a/mastodon/src/main/res/layout/fragment_onboarding_signup.xml +++ b/mastodon/src/main/res/layout/fragment_onboarding_signup.xml @@ -88,6 +88,7 @@ android:paddingRight="16dp" android:textAppearance="@style/m3_body_large" android:gravity="center_vertical" + android:textColor="?colorM3OnSurface" tools:text="\@mastodon.social"/> diff --git a/mastodon/src/main/res/layout/fragment_profile.xml b/mastodon/src/main/res/layout/fragment_profile.xml index 1efd646e4..b2da7e64d 100644 --- a/mastodon/src/main/res/layout/fragment_profile.xml +++ b/mastodon/src/main/res/layout/fragment_profile.xml @@ -84,14 +84,17 @@ android:layout_below="@id/cover" android:layout_alignParentEnd="true" android:layout_marginTop="16dp" - android:layout_marginEnd="16dp"> + android:layout_marginHorizontal="16dp" + android:paddingStart="120dp"> + style="@style/Widget.Mastodon.M3.Button.Filled" + android:minWidth="156dp" + android:paddingHorizontal="16dp" + tools:text="@string/save_changes" />