Add FAB in profile
This commit is contained in:
parent
3215960115
commit
8b8dc4fbf9
4 changed files with 264 additions and 222 deletions
|
@ -50,7 +50,6 @@ import org.joinmastodon.android.model.Attachment;
|
||||||
import org.joinmastodon.android.model.Emoji;
|
import org.joinmastodon.android.model.Emoji;
|
||||||
import org.joinmastodon.android.model.EmojiCategory;
|
import org.joinmastodon.android.model.EmojiCategory;
|
||||||
import org.joinmastodon.android.model.Mention;
|
import org.joinmastodon.android.model.Mention;
|
||||||
import org.joinmastodon.android.model.Poll;
|
|
||||||
import org.joinmastodon.android.model.Status;
|
import org.joinmastodon.android.model.Status;
|
||||||
import org.joinmastodon.android.ui.CustomEmojiPopupKeyboard;
|
import org.joinmastodon.android.ui.CustomEmojiPopupKeyboard;
|
||||||
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
|
||||||
|
@ -129,7 +128,7 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis
|
||||||
private List<EmojiCategory> customEmojis;
|
private List<EmojiCategory> customEmojis;
|
||||||
private CustomEmojiPopupKeyboard emojiKeyboard;
|
private CustomEmojiPopupKeyboard emojiKeyboard;
|
||||||
private Status replyTo;
|
private Status replyTo;
|
||||||
private String initialReplyMentions;
|
private String initialText;
|
||||||
private String uuid;
|
private String uuid;
|
||||||
private int pollDuration=24*3600;
|
private int pollDuration=24*3600;
|
||||||
private String pollDurationStr;
|
private String pollDurationStr;
|
||||||
|
@ -291,14 +290,22 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis
|
||||||
if(!mentions.contains(m))
|
if(!mentions.contains(m))
|
||||||
mentions.add(m);
|
mentions.add(m);
|
||||||
}
|
}
|
||||||
initialReplyMentions=TextUtils.join(" ", mentions)+" ";
|
initialText=TextUtils.join(" ", mentions)+" ";
|
||||||
if(savedInstanceState==null){
|
if(savedInstanceState==null){
|
||||||
mainEditText.setText(initialReplyMentions);
|
mainEditText.setText(initialText);
|
||||||
mainEditText.setSelection(mainEditText.length());
|
mainEditText.setSelection(mainEditText.length());
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
replyText.setVisibility(View.GONE);
|
replyText.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
if(savedInstanceState==null){
|
||||||
|
String prefilledText=getArguments().getString("prefilledText");
|
||||||
|
if(!TextUtils.isEmpty(prefilledText)){
|
||||||
|
mainEditText.setText(prefilledText);
|
||||||
|
mainEditText.setSelection(mainEditText.length());
|
||||||
|
initialText=prefilledText;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -418,7 +425,7 @@ public class ComposeFragment extends ToolbarFragment implements OnBackPressedLis
|
||||||
boolean pollFieldsHaveContent=false;
|
boolean pollFieldsHaveContent=false;
|
||||||
for(DraftPollOption opt:pollOptions)
|
for(DraftPollOption opt:pollOptions)
|
||||||
pollFieldsHaveContent|=opt.edit.length()>0;
|
pollFieldsHaveContent|=opt.edit.length()>0;
|
||||||
return (mainEditText.length()>0 && !mainEditText.getText().toString().equals(initialReplyMentions)) || !attachments.isEmpty()
|
return (mainEditText.length()>0 && !mainEditText.getText().toString().equals(initialText)) || !attachments.isEmpty()
|
||||||
|| uploadingAttachment!=null || !queuedAttachments.isEmpty() || !failedAttachments.isEmpty() || pollFieldsHaveContent;
|
|| uploadingAttachment!=null || !queuedAttachments.isEmpty() || !failedAttachments.isEmpty() || pollFieldsHaveContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,7 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||||
import androidx.viewpager2.widget.ViewPager2;
|
import androidx.viewpager2.widget.ViewPager2;
|
||||||
|
import me.grishka.appkit.Nav;
|
||||||
import me.grishka.appkit.api.Callback;
|
import me.grishka.appkit.api.Callback;
|
||||||
import me.grishka.appkit.api.ErrorResponse;
|
import me.grishka.appkit.api.ErrorResponse;
|
||||||
import me.grishka.appkit.api.SimpleCallback;
|
import me.grishka.appkit.api.SimpleCallback;
|
||||||
|
@ -116,6 +117,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||||
private Uri editNewAvatar, editNewCover;
|
private Uri editNewAvatar, editNewCover;
|
||||||
private String profileAccountID;
|
private String profileAccountID;
|
||||||
private boolean refreshing;
|
private boolean refreshing;
|
||||||
|
private View fab;
|
||||||
|
|
||||||
public ProfileFragment(){
|
public ProfileFragment(){
|
||||||
super(R.layout.loader_fragment_overlay_toolbar);
|
super(R.layout.loader_fragment_overlay_toolbar);
|
||||||
|
@ -175,6 +177,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||||
nameEdit=content.findViewById(R.id.name_edit);
|
nameEdit=content.findViewById(R.id.name_edit);
|
||||||
bioEdit=content.findViewById(R.id.bio_edit);
|
bioEdit=content.findViewById(R.id.bio_edit);
|
||||||
actionProgress=content.findViewById(R.id.action_progress);
|
actionProgress=content.findViewById(R.id.action_progress);
|
||||||
|
fab=content.findViewById(R.id.fab);
|
||||||
|
|
||||||
avatar.setOutlineProvider(new ViewOutlineProvider(){
|
avatar.setOutlineProvider(new ViewOutlineProvider(){
|
||||||
@Override
|
@Override
|
||||||
|
@ -244,11 +247,14 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||||
avatar.setOnClickListener(this::onAvatarClick);
|
avatar.setOnClickListener(this::onAvatarClick);
|
||||||
cover.setOnClickListener(this::onCoverClick);
|
cover.setOnClickListener(this::onCoverClick);
|
||||||
refreshLayout.setOnRefreshListener(this);
|
refreshLayout.setOnRefreshListener(this);
|
||||||
|
fab.setOnClickListener(this::onFabClick);
|
||||||
|
|
||||||
if(loaded){
|
if(loaded){
|
||||||
bindHeaderView();
|
bindHeaderView();
|
||||||
dataLoaded();
|
dataLoaded();
|
||||||
tabLayoutMediator.attach();
|
tabLayoutMediator.attach();
|
||||||
|
}else{
|
||||||
|
fab.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return sizeWrapper;
|
return sizeWrapper;
|
||||||
|
@ -280,6 +286,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||||
if(mediaFragment.loaded)
|
if(mediaFragment.loaded)
|
||||||
mediaFragment.onRefresh();
|
mediaFragment.onRefresh();
|
||||||
}
|
}
|
||||||
|
V.setVisibilityAnimated(fab, View.VISIBLE);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.exec(accountID);
|
.exec(accountID);
|
||||||
|
@ -452,7 +459,6 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||||
if(relationship==null)
|
if(relationship==null)
|
||||||
return;
|
return;
|
||||||
inflater.inflate(R.menu.profile, menu);
|
inflater.inflate(R.menu.profile, menu);
|
||||||
menu.findItem(R.id.mention).setTitle(getString(R.string.mention_user, account.displayName));
|
|
||||||
menu.findItem(R.id.share).setTitle(getString(R.string.share_user, account.displayName));
|
menu.findItem(R.id.share).setTitle(getString(R.string.share_user, account.displayName));
|
||||||
menu.findItem(R.id.mute).setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.displayName));
|
menu.findItem(R.id.mute).setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.displayName));
|
||||||
menu.findItem(R.id.block).setTitle(getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.displayName));
|
menu.findItem(R.id.block).setTitle(getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.displayName));
|
||||||
|
@ -804,6 +810,15 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onFabClick(View v){
|
||||||
|
Bundle args=new Bundle();
|
||||||
|
args.putString("account", accountID);
|
||||||
|
if(!AccountSessionManager.getInstance().isSelf(accountID, account)){
|
||||||
|
args.putString("prefilledText", '@'+account.acct+' ');
|
||||||
|
}
|
||||||
|
Nav.go(getActivity(), ComposeFragment.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
private void startImagePicker(int requestCode){
|
private void startImagePicker(int requestCode){
|
||||||
Intent intent=new Intent(Intent.ACTION_GET_CONTENT);
|
Intent intent=new Intent(Intent.ACTION_GET_CONTENT);
|
||||||
intent.setType("image/*");
|
intent.setType("image/*");
|
||||||
|
|
|
@ -5,6 +5,11 @@
|
||||||
android:id="@+id/refresh_layout"
|
android:id="@+id/refresh_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<org.joinmastodon.android.ui.views.NestedRecyclerScrollView
|
<org.joinmastodon.android.ui.views.NestedRecyclerScrollView
|
||||||
android:id="@+id/scroller"
|
android:id="@+id/scroller"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -236,4 +241,20 @@
|
||||||
android:layout_height="wrap_content"/>
|
android:layout_height="wrap_content"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</org.joinmastodon.android.ui.views.NestedRecyclerScrollView>
|
</org.joinmastodon.android.ui.views.NestedRecyclerScrollView>
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/fab"
|
||||||
|
android:layout_width="64dp"
|
||||||
|
android:layout_height="64dp"
|
||||||
|
android:layout_gravity="end|bottom"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginBottom="24dp"
|
||||||
|
android:background="@drawable/bg_fab"
|
||||||
|
android:tint="@color/fab_icon"
|
||||||
|
android:scaleType="center"
|
||||||
|
android:stateListAnimator="@animator/fab_shadow"
|
||||||
|
android:src="@drawable/ic_edit_34"/>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
</me.grishka.appkit.views.RecursiveSwipeRefreshLayout>
|
</me.grishka.appkit.views.RecursiveSwipeRefreshLayout>
|
|
@ -1,6 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<item android:id="@+id/mention" android:title="@string/mention_user" android:icon="@drawable/ic_fluent_arrow_reply_24_regular" android:showAsAction="always"/>
|
|
||||||
<item android:id="@+id/share" android:title="@string/share_user"/>
|
<item android:id="@+id/share" android:title="@string/share_user"/>
|
||||||
<item android:id="@+id/mute" android:title="@string/mute_user"/>
|
<item android:id="@+id/mute" android:title="@string/mute_user"/>
|
||||||
<item android:id="@+id/block" android:title="@string/block_user"/>
|
<item android:id="@+id/block" android:title="@string/block_user"/>
|
||||||
|
|
Loading…
Add table
Reference in a new issue