From fa6abd44c3126bb94fb15c592a6d0bcc2f829a33 Mon Sep 17 00:00:00 2001 From: LucasGGamerM Date: Wed, 24 Jul 2024 15:22:18 -0300 Subject: [PATCH] feat(compose-shortcut): allow user to choose account --- mastodon/src/main/AndroidManifest.xml | 9 ++++ .../ChooseAccountForComposeActivity.java | 52 +++++++++++++++++++ .../joinmastodon/android/MainActivity.java | 15 ------ .../api/session/AccountSessionManager.java | 12 ++--- 4 files changed, 65 insertions(+), 23 deletions(-) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/ChooseAccountForComposeActivity.java 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()){