commit 130ae87d331eb8c061d0a6230ce69e11c49759b4 from: darkwolf date: Sun Jul 19 00:49:56 2026 UTC remove unused splashfragment commit - e2c3edf61bd13ef59b4b2bd8196b48320d06c913 commit + 130ae87d331eb8c061d0a6230ce69e11c49759b4 blob - d1326c5897e2303fada492d39bb7b4ceec157f72 (mode 644) blob + /dev/null --- mastodon/src/main/java/org/joinmastodon/android/fragments/SplashFragment.java +++ /dev/null @@ -1,321 +0,0 @@ -package org.joinmastodon.android.fragments; - -import android.app.ProgressDialog; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.graphics.drawable.ColorDrawable; -import android.net.Uri; -import android.os.Bundle; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewTreeObserver; -import android.view.WindowInsets; -import android.widget.ProgressBar; - -import org.joinmastodon.android.MastodonApp; -import org.joinmastodon.android.R; -import org.joinmastodon.android.api.MastodonErrorResponse; -import org.joinmastodon.android.api.requests.accounts.CheckInviteLink; -import org.joinmastodon.android.api.requests.catalog.GetCatalogDefaultInstances; -import org.joinmastodon.android.api.requests.instance.GetInstance; -import org.joinmastodon.android.fragments.onboarding.InstanceCatalogSignupFragment; -import org.joinmastodon.android.fragments.onboarding.InstanceChooserLoginFragment; -import org.joinmastodon.android.fragments.onboarding.InstanceRulesFragment; -import org.joinmastodon.android.model.Instance; -import org.joinmastodon.android.model.catalog.CatalogDefaultInstance; -import org.joinmastodon.android.ui.InterpolatingMotionEffect; -import org.joinmastodon.android.ui.M3AlertDialogBuilder; -import org.joinmastodon.android.ui.text.HtmlParser; -import org.joinmastodon.android.ui.utils.UiUtils; -import org.joinmastodon.android.ui.views.ProgressBarButton; -import org.joinmastodon.android.ui.views.SizeListenerFrameLayout; -import org.parceler.Parcels; - -import java.util.List; -import java.util.concurrent.ThreadLocalRandom; - -import androidx.annotation.Nullable; -import me.grishka.appkit.Nav; -import me.grishka.appkit.api.Callback; -import me.grishka.appkit.api.ErrorResponse; -import me.grishka.appkit.fragments.AppKitFragment; -import me.grishka.appkit.utils.V; -import me.grishka.appkit.views.BottomSheet; - -public class SplashFragment extends AppKitFragment{ - - private static final String DEFAULT_SERVER="mastodon.social"; - - private SizeListenerFrameLayout contentView; - private View artContainer, blueFill, greenFill; - private InterpolatingMotionEffect motionEffect; - private View artClouds, artPlaneElephant, artRightHill, artLeftHill, artCenterHill; - private ProgressBarButton defaultServerButton; - private ProgressBar defaultServerProgress; - private String chosenDefaultServer=DEFAULT_SERVER; - private boolean loadingDefaultServer, loadedDefaultServer; - private Uri currentInviteLink; - private ProgressDialog instanceLoadingProgress; - private String inviteCode; - - @Override - public void onCreate(Bundle savedInstanceState){ - super.onCreate(savedInstanceState); - motionEffect=new InterpolatingMotionEffect(MastodonApp.context); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState){ - contentView=(SizeListenerFrameLayout) inflater.inflate(R.layout.fragment_splash, container, false); - contentView.findViewById(R.id.btn_get_started).setOnClickListener(this::onButtonClick); - contentView.findViewById(R.id.btn_log_in).setOnClickListener(this::onButtonClick); - defaultServerButton=contentView.findViewById(R.id.btn_join_default_server); - defaultServerButton.setText(getString(R.string.join_default_server, chosenDefaultServer)); - defaultServerButton.setOnClickListener(this::onJoinDefaultServerClick); - defaultServerProgress=contentView.findViewById(R.id.action_progress); - if(loadingDefaultServer){ - defaultServerButton.setTextVisible(false); - defaultServerProgress.setVisibility(View.VISIBLE); - } - contentView.findViewById(R.id.btn_learn_more).setOnClickListener(this::onLearnMoreClick); - - artClouds=contentView.findViewById(R.id.art_clouds); - artPlaneElephant=contentView.findViewById(R.id.art_plane_elephant); - artRightHill=contentView.findViewById(R.id.art_right_hill); - artLeftHill=contentView.findViewById(R.id.art_left_hill); - artCenterHill=contentView.findViewById(R.id.art_center_hill); - - artContainer=contentView.findViewById(R.id.art_container); - blueFill=contentView.findViewById(R.id.blue_fill); - greenFill=contentView.findViewById(R.id.green_fill); - motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artClouds, V.dp(-5), V.dp(5), V.dp(-5), V.dp(5))); - motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artRightHill, V.dp(-15), V.dp(25), V.dp(-10), V.dp(10))); - motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artLeftHill, V.dp(-25), V.dp(15), V.dp(-15), V.dp(15))); - motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artCenterHill, V.dp(-14), V.dp(14), V.dp(-5), V.dp(25))); - motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artPlaneElephant, V.dp(-20), V.dp(12), V.dp(-20), V.dp(12))); - artContainer.setOnTouchListener(motionEffect); - - contentView.setSizeListener(new SizeListenerFrameLayout.OnSizeChangedListener(){ - @Override - public void onSizeChanged(int w, int h, int oldw, int oldh){ - contentView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener(){ - @Override - public boolean onPreDraw(){ - contentView.getViewTreeObserver().removeOnPreDrawListener(this); - updateArtSize(w, h); - return true; - } - }); - } - }); - if(!loadedDefaultServer && !loadingDefaultServer) - loadAndChooseDefaultServer(); - - return contentView; - } - - private void onButtonClick(View v){ - Bundle extras=new Bundle(); - boolean isSignup=v.getId()==R.id.btn_get_started; - extras.putBoolean("signup", isSignup); - extras.putString("defaultServer", chosenDefaultServer); - Nav.go(getActivity(), isSignup ? InstanceCatalogSignupFragment.class : InstanceChooserLoginFragment.class, extras); - } - - private void onJoinDefaultServerClick(View v){ - if(loadingDefaultServer) - return; - instanceLoadingProgress=new ProgressDialog(getActivity()); - instanceLoadingProgress.setCancelable(false); - instanceLoadingProgress.setMessage(getString(R.string.loading_instance)); - instanceLoadingProgress.show(); - if(currentInviteLink!=null){ - new CheckInviteLink(currentInviteLink.getPath()) - .setCallback(new Callback<>(){ - @Override - public void onSuccess(CheckInviteLink.Response result){ - inviteCode=result.inviteCode; - proceedWithServerDomain(currentInviteLink.getHost()); - } - - @Override - public void onError(ErrorResponse error){ - if(getActivity()==null) - return; - instanceLoadingProgress.dismiss(); - instanceLoadingProgress=null; - if(error instanceof MastodonErrorResponse mer){ - switch(mer.httpStatus){ - case 401 -> new M3AlertDialogBuilder(getActivity()) - .setTitle(R.string.expired_invite_link) - .setMessage(getString(R.string.expired_clipboard_invite_link_alert, currentInviteLink.getHost(), chosenDefaultServer)) - .setPositiveButton(R.string.ok, null) - .show(); - case 404 -> new M3AlertDialogBuilder(getActivity()) - .setTitle(R.string.invalid_invite_link) - .setMessage(getString(R.string.invalid_clipboard_invite_link_alert, currentInviteLink.getHost(), chosenDefaultServer)) - .setPositiveButton(R.string.ok, null) - .show(); - default -> error.showToast(getActivity()); - } - } - } - }) - .execNoAuth(currentInviteLink.getHost()); - return; - } - proceedWithServerDomain(chosenDefaultServer); - } - - private void proceedWithServerDomain(String domain){ - new GetInstance() - .setCallback(new Callback<>(){ - @Override - public void onSuccess(Instance result){ - if(getActivity()==null) - return; - instanceLoadingProgress.dismiss(); - instanceLoadingProgress=null; - if(!result.registrations && TextUtils.isEmpty(inviteCode)){ - new M3AlertDialogBuilder(getActivity()) - .setTitle(R.string.error) - .setMessage(R.string.instance_signup_closed) - .setPositiveButton(R.string.ok, null) - .show(); - return; - } - Bundle args=new Bundle(); - args.putParcelable("instance", Parcels.wrap(result)); - if(inviteCode!=null) - args.putString("inviteCode", inviteCode); - Nav.go(getActivity(), InstanceRulesFragment.class, args); - } - - @Override - public void onError(ErrorResponse error){ - if(getActivity()==null) - return; - instanceLoadingProgress.dismiss(); - instanceLoadingProgress=null; - error.showToast(getActivity()); - } - }) - .execNoAuth(domain); - } - - private void onLearnMoreClick(View v){ - View sheetView=getActivity().getLayoutInflater().inflate(R.layout.intro_bottom_sheet, null); - BottomSheet sheet=new BottomSheet(getActivity()); - sheet.setContentView(sheetView); - sheet.setNavigationBarBackground(new ColorDrawable(UiUtils.alphaBlendColors(UiUtils.getThemeColor(getActivity(), R.attr.colorM3Surface), - UiUtils.getThemeColor(getActivity(), R.attr.colorM3Primary), 0.05f)), !UiUtils.isDarkTheme()); - sheet.show(); - } - - private void updateArtSize(int w, int h){ - float scale=w/(float)V.dp(360); - artContainer.setScaleX(scale); - artContainer.setScaleY(scale); - blueFill.setScaleY(artContainer.getBottom()-V.dp(90)); - greenFill.setScaleY(h-artContainer.getBottom()+V.dp(90)); - } - - - @Override - public void onApplyWindowInsets(WindowInsets insets){ - super.onApplyWindowInsets(insets); - int bottomInset=insets.getSystemWindowInsetBottom(); - if(bottomInset>0 && bottomInset0){ - CharSequence clipText=clipData.getItemAt(0).coerceToText(getActivity()); - if(HtmlParser.INVITE_LINK_PATTERN.matcher(clipText).find()){ - currentInviteLink=Uri.parse(clipText.toString()); - defaultServerButton.setText(getString(R.string.join_server_x_with_invite, currentInviteLink.getHost())); - } - }else{ - loadingDefaultServer=true; - defaultServerButton.setTextVisible(false); - defaultServerProgress.setVisibility(View.VISIBLE); - } - new GetCatalogDefaultInstances() - .setCallback(new Callback<>(){ - @Override - public void onSuccess(List result){ - if(result.isEmpty()){ - setChosenDefaultServer(DEFAULT_SERVER); - return; - } - float sum=0f; - for(CatalogDefaultInstance inst:result){ - sum+=inst.weight; - } - if(sum<=0) - sum=1f; - for(CatalogDefaultInstance inst:result){ - inst.weight/=sum; - } - float rand=ThreadLocalRandom.current().nextFloat(); - float prev=0f; - for(CatalogDefaultInstance inst:result){ - if(rand>=prev && rand logOutAll()) - .setNegativeButton(R.string.cancel, null) - .show(); - } - private void logOut(String accountID){ String activeAccount=AccountSessionManager.getInstance().getLastActiveAccountID(); AccountSessionManager.get(accountID).logOut(activity, ()->{ @@ -170,61 +159,6 @@ public class AccountSwitcherSheet extends BottomSheet{ }); } - private void logOutAll(){ - final ProgressDialog progress=new ProgressDialog(activity); - progress.setMessage(activity.getString(R.string.loading)); - progress.setCancelable(false); - progress.show(); - ArrayList sessions=new ArrayList<>(AccountSessionManager.getInstance().getLoggedInAccounts()); - for(AccountSession session:sessions){ - new RevokeOauthToken(session.app.clientId, session.app.clientSecret, session.token.accessToken) - .setCallback(new Callback<>(){ - @Override - public void onSuccess(Object result){ - AccountSessionManager.getInstance().removeAccount(session.getID()); - sessions.remove(session); - if(sessions.isEmpty()){ - if(onLoggedOutCallback!=null) - onLoggedOutCallback.run(); - progress.dismiss(); - Nav.goClearingStack(activity, SplashFragment.class, null); - dismiss(); - } - } - - @Override - public void onError(ErrorResponse error){ - AccountSessionManager.getInstance().removeAccount(session.getID()); - sessions.remove(session); - if(sessions.isEmpty()){ - if(onLoggedOutCallback!=null) - onLoggedOutCallback.run(); - progress.dismiss(); - Nav.goClearingStack(activity, SplashFragment.class, null); - dismiss(); - } - } - }) - .exec(session.getID()); - } - } - - private void onLoggedOut(String accountID){ - AccountSessionManager.getInstance().removeAccount(accountID); - String activeAccountID = fragment != null - ? fragment.getAccountID() - : AccountSessionManager.getInstance().getLastActiveAccountID(); - if (accountID.equals(activeAccountID)) { - activity.finish(); - activity.startActivity(new Intent(activity, MainActivity.class)); - } else { - accounts.stream().filter(w -> accountID.equals(w.session.getID())).findAny().ifPresent(w -> { - accountsAdapter.notifyItemRemoved(accounts.indexOf(w)); - accounts.remove(w); - }); - } - } - @Override protected void onWindowInsetsUpdated(WindowInsets insets){ if(Build.VERSION.SDK_INT>=29){ blob - 3b6bb2bee19911c7ddff86f68212943f7714859b (mode 644) blob + /dev/null --- mastodon/src/main/res/layout/fragment_splash.xml +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -