diff --git a/mastodon/src/main/AndroidManifest.xml b/mastodon/src/main/AndroidManifest.xml
index 9a378c3f8..cd80f1ed2 100644
--- a/mastodon/src/main/AndroidManifest.xml
+++ b/mastodon/src/main/AndroidManifest.xml
@@ -81,6 +81,15 @@
+
+
+
+
+
+
+
+
diff --git a/mastodon/src/main/java/org/joinmastodon/android/ChooseAccountForComposeActivity.java b/mastodon/src/main/java/org/joinmastodon/android/ChooseAccountForComposeActivity.java
new file mode 100644
index 000000000..1b2241e07
--- /dev/null
+++ b/mastodon/src/main/java/org/joinmastodon/android/ChooseAccountForComposeActivity.java
@@ -0,0 +1,52 @@
+package org.joinmastodon.android;
+
+import android.app.Fragment;
+import android.content.Intent;
+import android.os.Bundle;
+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.sheets.AccountSwitcherSheet;
+import org.joinmastodon.android.ui.utils.UiUtils;
+
+import java.util.List;
+import java.util.Objects;
+
+import androidx.annotation.Nullable;
+import me.grishka.appkit.FragmentStackActivity;
+
+public class ChooseAccountForComposeActivity extends FragmentStackActivity{
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState){
+ UiUtils.setUserPreferredTheme(this);
+ super.onCreate(savedInstanceState);
+ if (savedInstanceState == null && Objects.equals(getIntent().getAction(), Intent.ACTION_CHOOSER)) {
+ AccountSessionManager.getInstance().maybeUpdateLocalInfo();
+ List sessions=AccountSessionManager.getInstance().getLoggedInAccounts();
+ if (sessions.isEmpty()){
+ Toast.makeText(this, R.string.err_not_logged_in, Toast.LENGTH_SHORT).show();
+ finish();
+ } else if (sessions.size() > 1) {
+ AccountSwitcherSheet sheet = new AccountSwitcherSheet(this, null, R.drawable.ic_fluent_compose_28_regular,
+ R.string.choose_account, null, false);
+ sheet.setOnClick((accountId, open) -> {
+ openComposeFragment(accountId);
+ });
+ sheet.show();
+ } else if (sessions.size() == 1) {
+ openComposeFragment(sessions.get(0).getID());
+ }
+ }
+ }
+
+ private void openComposeFragment(String accountID){
+ getWindow().setBackgroundDrawable(null);
+ Bundle args=new Bundle();
+ args.putString("account", accountID);
+ Fragment fragment=new ComposeFragment();
+ fragment.setArguments(args);
+ showFragmentClearingBackStack(fragment);
+ }
+}
diff --git a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java
index 979a160fe..977c8408b 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/MainActivity.java
@@ -111,8 +111,6 @@ public class MainActivity extends FragmentStackActivity implements ProvidesAssis
fragment.setArguments(args);
showFragmentClearingBackStack(fragment);
}
- }else if(intent.getBooleanExtra("compose", false)){
- showCompose();
}else if(Intent.ACTION_VIEW.equals(intent.getAction())){
handleURL(intent.getData(), null);
}/*else if(intent.hasExtra(PackageInstaller.EXTRA_STATUS) && GithubSelfUpdater.needSelfUpdating()){
@@ -187,17 +185,6 @@ public class MainActivity extends FragmentStackActivity implements ProvidesAssis
showFragment(fragment);
}
- private void showCompose(){
- AccountSession session=AccountSessionManager.getInstance().getLastActiveAccount();
- if(session==null || !session.activated)
- return;
- ComposeFragment compose=new ComposeFragment();
- Bundle composeArgs=new Bundle();
- composeArgs.putString("account", session.getID());
- compose.setArguments(composeArgs);
- showFragment(compose);
- }
-
private void maybeRequestNotificationsPermission(){
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.TIRAMISU && checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS)!=PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, 100);
@@ -343,8 +330,6 @@ public class MainActivity extends FragmentStackActivity implements ProvidesAssis
}catch(BadParcelableException x){
Log.w(TAG, x);
}
- } else if (intent.getBooleanExtra("compose", false)){
- showCompose();
} else if (Intent.ACTION_VIEW.equals(intent.getAction())){
handleURL(intent.getData(), null);
} else {
diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java
index 26e002020..30fc5336a 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountSessionManager.java
@@ -1,7 +1,5 @@
package org.joinmastodon.android.api.session;
-import static org.unifiedpush.android.connector.UnifiedPush.getDistributor;
-
import android.app.Activity;
import android.app.NotificationManager;
import android.content.ComponentName;
@@ -17,8 +15,7 @@ import android.util.Log;
import org.joinmastodon.android.BuildConfig;
import org.joinmastodon.android.E;
-import org.joinmastodon.android.GlobalUserPreferences;
-import org.joinmastodon.android.MainActivity;
+import org.joinmastodon.android.ChooseAccountForComposeActivity;
import org.joinmastodon.android.MastodonApp;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.MastodonAPIController;
@@ -494,12 +491,11 @@ public class AccountSessionManager{
if((sm.getDynamicShortcuts().isEmpty() || BuildConfig.DEBUG) && !sessions.isEmpty()){
// There are no shortcuts, but there are accounts. Add a compose shortcut.
ShortcutInfo info=new ShortcutInfo.Builder(MastodonApp.context, "compose")
- .setActivity(ComponentName.createRelative(MastodonApp.context, MainActivity.class.getName()))
+ .setActivity(ComponentName.createRelative(MastodonApp.context, ChooseAccountForComposeActivity.class.getName()))
.setShortLabel(MastodonApp.context.getString(R.string.new_post))
.setIcon(Icon.createWithResource(MastodonApp.context, R.mipmap.ic_shortcut_compose))
- .setIntent(new Intent(MastodonApp.context, MainActivity.class)
- .setAction(Intent.ACTION_MAIN)
- .putExtra("compose", true))
+ .setIntent(new Intent(MastodonApp.context, ChooseAccountForComposeActivity.class)
+ .setAction(Intent.ACTION_CHOOSER))
.build();
sm.setDynamicShortcuts(Collections.singletonList(info));
}else if(sessions.isEmpty()){