diff --git a/mastodon/src/main/AndroidManifest.xml b/mastodon/src/main/AndroidManifest.xml
index 9a58cd0c3..f225dff03 100644
--- a/mastodon/src/main/AndroidManifest.xml
+++ b/mastodon/src/main/AndroidManifest.xml
@@ -44,7 +44,8 @@
-
+
diff --git a/mastodon/src/main/java/org/joinmastodon/android/ExternalShareActivity.java b/mastodon/src/main/java/org/joinmastodon/android/ExternalShareActivity.java
index 32d7c74cd..5743a5955 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/ExternalShareActivity.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/ExternalShareActivity.java
@@ -3,7 +3,6 @@ package org.joinmastodon.android;
import android.app.Fragment;
import android.content.ClipData;
import android.content.Intent;
-import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
@@ -12,6 +11,7 @@ import android.widget.Toast;
import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.fragments.ComposeFragment;
+import org.joinmastodon.android.ui.AccountSwitcherSheet;
import org.joinmastodon.android.ui.utils.UiUtils;
import java.util.ArrayList;
@@ -34,11 +34,7 @@ public class ExternalShareActivity extends FragmentStackActivity{
}else if(sessions.size()==1){
openComposeFragment(sessions.get(0).getID());
}else{
- getWindow().setBackgroundDrawable(new ColorDrawable(0xff000000));
- UiUtils.pickAccount(this, null, R.string.choose_account, 0,
- session -> openComposeFragment(session.getID()),
- b -> b.setOnCancelListener(d -> finish())
- );
+ new AccountSwitcherSheet(this, false, false, accountSession -> openComposeFragment(accountSession.getID())).show();
}
}
}
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 90b4a951e..fe58d76dd 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeFragment.java
@@ -2,6 +2,7 @@ package org.joinmastodon.android.fragments;
import android.app.Fragment;
import android.app.NotificationManager;
+import android.content.Intent;
import android.graphics.Outline;
import android.os.Build;
import android.os.Bundle;
@@ -21,6 +22,7 @@ import androidx.annotation.Nullable;
import org.joinmastodon.android.DomainManager;
import org.joinmastodon.android.GlobalUserPreferences;
+import org.joinmastodon.android.MainActivity;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager;
@@ -305,7 +307,10 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
for(AccountSession session:AccountSessionManager.getInstance().getLoggedInAccounts()){
options.add(session.self.displayName+"\n("+session.self.username+"@"+session.domain+")");
}
- new AccountSwitcherSheet(getActivity()).show();
+ new AccountSwitcherSheet(getActivity(), true, true, accountSession -> {
+ getActivity().finish();
+ getActivity().startActivity(new Intent(getActivity(), MainActivity.class));
+ }).show();
return true;
}
if(tab==R.id.tab_search){
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 c8f091c78..c173f3064 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java
@@ -19,13 +19,11 @@ import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.ImageSpan;
-import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
-import android.view.MotionEvent;
import android.view.SubMenu;
import android.view.View;
import android.view.ViewGroup;
@@ -94,13 +92,10 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
-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;
diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java
index b1109b5c5..b52b735b1 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/onboarding/AccountActivationFragment.java
@@ -110,7 +110,10 @@ public class AccountActivationFragment extends ToolbarFragment{
@Override
public void onToolbarNavigationClick(){
- new AccountSwitcherSheet(getActivity()).show();
+ new AccountSwitcherSheet(getActivity(), true, true, accountSession -> {
+ getActivity().finish();
+ getActivity().startActivity(new Intent(getActivity(), MainActivity.class));
+ }).show();
}
@Override
diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java b/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java
index 437d75e80..64a4f6e21 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/ui/AccountSwitcherSheet.java
@@ -8,6 +8,7 @@ import android.graphics.drawable.Animatable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
+import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowInsets;
@@ -28,6 +29,7 @@ import org.joinmastodon.android.fragments.onboarding.CustomWelcomeFragment;
import org.joinmastodon.android.ui.utils.UiUtils;
import java.util.List;
+import java.util.function.Consumer;
import java.util.stream.Collectors;
import androidx.annotation.NonNull;
@@ -53,10 +55,14 @@ public class AccountSwitcherSheet extends BottomSheet{
private UsableRecyclerView list;
private List accounts;
private ListImageLoaderWrapper imgLoader;
+ private final boolean logOutEnabled;
+ private final Consumer onClick;
- public AccountSwitcherSheet(@NonNull Activity activity){
+ public AccountSwitcherSheet(@NonNull Activity activity, boolean logOutEnabled, boolean addAccountEnabled, Consumer onClick){
super(activity);
this.activity=activity;
+ this.logOutEnabled=logOutEnabled;
+ this.onClick=onClick;
accounts=AccountSessionManager.getInstance().getLoggedInAccounts().stream().map(WrappedAccount::new).collect(Collectors.toList());
@@ -70,17 +76,20 @@ public class AccountSwitcherSheet extends BottomSheet{
handle.setBackgroundResource(R.drawable.bg_bottom_sheet_handle);
adapter.addAdapter(new SingleViewRecyclerAdapter(handle));
adapter.addAdapter(new AccountsAdapter());
- AccountViewHolder holder=new AccountViewHolder();
- holder.more.setVisibility(View.GONE);
- holder.currentIcon.setVisibility(View.GONE);
- holder.name.setText(R.string.add_account);
- holder.avatar.setScaleType(ImageView.ScaleType.CENTER);
- holder.avatar.setImageResource(R.drawable.ic_fluent_add_circle_24_filled);
- holder.avatar.setImageTintList(ColorStateList.valueOf(UiUtils.getThemeColor(activity, android.R.attr.textColorPrimary)));
- adapter.addAdapter(new ClickableSingleViewRecyclerAdapter(holder.itemView, ()->{
- Nav.go(activity, CustomWelcomeFragment.class, null);
- dismiss();
- }));
+
+ if(addAccountEnabled){
+ AccountViewHolder holder = new AccountViewHolder();
+ holder.more.setVisibility(View.GONE);
+ holder.currentIcon.setVisibility(View.GONE);
+ holder.display_name.setText(R.string.add_account);
+ holder.avatar.setScaleType(ImageView.ScaleType.CENTER);
+ holder.avatar.setImageResource(R.drawable.ic_fluent_add_circle_24_filled);
+ holder.avatar.setImageTintList(ColorStateList.valueOf(UiUtils.getThemeColor(activity, android.R.attr.textColorPrimary)));
+ adapter.addAdapter(new ClickableSingleViewRecyclerAdapter(holder.itemView, () -> {
+ Nav.go(activity, CustomWelcomeFragment.class, null);
+ dismiss();
+ }));
+ }
list.setAdapter(adapter);
DividerItemDecoration divider=new DividerItemDecoration(activity, R.attr.colorPollVoted, .5f, 72, 16, DividerItemDecoration.NOT_FIRST);
@@ -176,6 +185,7 @@ public class AccountSwitcherSheet extends BottomSheet{
private class AccountViewHolder extends BindableViewHolder implements ImageLoaderViewHolder, UsableRecyclerView.Clickable{
private final TextView name;
+ private final TextView display_name;
private final ImageView avatar;
private final ImageButton more;
private final View currentIcon;
@@ -184,6 +194,7 @@ public class AccountSwitcherSheet extends BottomSheet{
public AccountViewHolder(){
super(activity, R.layout.item_account_switcher, list);
name=findViewById(R.id.name);
+ display_name=findViewById(R.id.display_name);
avatar=findViewById(R.id.avatar);
more=findViewById(R.id.more);
currentIcon=findViewById(R.id.current);
@@ -203,6 +214,7 @@ public class AccountSwitcherSheet extends BottomSheet{
@SuppressLint("SetTextI18n")
@Override
public void onBind(AccountSession item){
+ display_name.setText(item.self.displayName);
name.setText("@"+item.self.username+"@"+item.domain);
if(AccountSessionManager.getInstance().getLastActiveAccountID().equals(item.getID())){
more.setVisibility(View.GONE);
@@ -211,6 +223,11 @@ public class AccountSwitcherSheet extends BottomSheet{
more.setVisibility(View.VISIBLE);
currentIcon.setVisibility(View.GONE);
}
+
+ if(!logOutEnabled){
+ more.setVisibility(View.GONE);
+ currentIcon.setVisibility(View.GONE);
+ }
menu.getMenu().findItem(R.id.log_out).setTitle(activity.getString(R.string.log_out_account, "@"+item.self.username));
UiUtils.enablePopupMenuIcons(activity, menu);
}
@@ -230,8 +247,8 @@ public class AccountSwitcherSheet extends BottomSheet{
@Override
public void onClick(){
AccountSessionManager.getInstance().setLastActiveAccountID(item.getID());
- activity.finish();
- activity.startActivity(new Intent(activity, MainActivity.class));
+ dismiss();
+ onClick.accept(AccountSessionManager.getInstance().getAccount(item.getID()));
}
}
diff --git a/mastodon/src/main/res/layout/item_account_switcher.xml b/mastodon/src/main/res/layout/item_account_switcher.xml
index 1cffbf7af..d23f462d5 100644
--- a/mastodon/src/main/res/layout/item_account_switcher.xml
+++ b/mastodon/src/main/res/layout/item_account_switcher.xml
@@ -2,30 +2,53 @@
-
+
+
+
+
+
+
+
+
+
+
+