redirect on empty conversation list
This commit is contained in:
		
							parent
							
								
									7bc7853d1a
								
							
						
					
					
						commit
						e93b06f45c
					
				|  | @ -1648,6 +1648,19 @@ public class XmppConnectionService extends Service { | |||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean isConversationsListEmpty(final Conversation ignore) { | ||||
| 		synchronized (this.conversations) { | ||||
| 			final int size = this.conversations.size(); | ||||
| 			if (size == 0) { | ||||
| 				return true; | ||||
| 			} else if (size == 1) { | ||||
| 				return this.conversations.get(0) == ignore; | ||||
| 			} else { | ||||
| 				return false; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public Conversation findOrCreateConversation(Account account, Jid jid, boolean muc, final boolean async) { | ||||
| 		return this.findOrCreateConversation(account, jid, muc, false, async); | ||||
| 	} | ||||
|  | @ -3771,7 +3784,7 @@ public class XmppConnectionService extends Service { | |||
| 	public Account getPendingAccount() { | ||||
| 		Account pending = null; | ||||
| 		for (Account account : getAccounts()) { | ||||
| 			if (account.isOptionSet(Account.OPTION_REGISTER)) { | ||||
| 			if (!account.isOptionSet(Account.OPTION_LOGGED_IN_SUCCESSFULLY)) { | ||||
| 				pending = account; | ||||
| 			} else { | ||||
| 				return null; | ||||
|  |  | |||
|  | @ -44,9 +44,12 @@ import android.view.Menu; | |||
| import android.view.MenuItem; | ||||
| import android.widget.Toast; | ||||
| 
 | ||||
| import java.util.concurrent.atomic.AtomicBoolean; | ||||
| 
 | ||||
| import eu.siacs.conversations.Config; | ||||
| import eu.siacs.conversations.R; | ||||
| import eu.siacs.conversations.databinding.ActivityConversationsBinding; | ||||
| import eu.siacs.conversations.entities.Account; | ||||
| import eu.siacs.conversations.entities.Conversation; | ||||
| import eu.siacs.conversations.services.XmppConnectionService; | ||||
| import eu.siacs.conversations.ui.interfaces.OnConversationArchived; | ||||
|  | @ -73,6 +76,7 @@ public class ConversationActivity extends XmppActivity implements OnConversation | |||
| 	private final PendingItem<Intent> pendingViewIntent = new PendingItem<>(); | ||||
| 	private ActivityConversationsBinding binding; | ||||
| 	private boolean mActivityPaused = true; | ||||
| 	private AtomicBoolean mRedirectInProcess = new AtomicBoolean(false); | ||||
| 
 | ||||
| 	private static boolean isViewIntent(Intent i) { | ||||
| 		return i != null && ACTION_VIEW_CONVERSATION.equals(i.getAction()) && i.hasExtra(EXTRA_CONVERSATION); | ||||
|  | @ -94,6 +98,9 @@ public class ConversationActivity extends XmppActivity implements OnConversation | |||
| 
 | ||||
| 	@Override | ||||
| 	void onBackendConnected() { | ||||
| 		if (performRedirectIfNecessary(true)) { | ||||
| 			return; | ||||
| 		} | ||||
| 		for (@IdRes int id : FRAGMENT_ID_NOTIFICATION_ORDER) { | ||||
| 			notifyFragmentOfBackendConnected(id); | ||||
| 		} | ||||
|  | @ -113,6 +120,55 @@ public class ConversationActivity extends XmppActivity implements OnConversation | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private boolean performRedirectIfNecessary(boolean noAnimation) { | ||||
| 		return performRedirectIfNecessary(null, noAnimation); | ||||
| 	} | ||||
| 
 | ||||
| 	private boolean performRedirectIfNecessary(final Conversation ignore, final boolean noAnimation) { | ||||
| 		if (xmppConnectionService == null) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		boolean isConversationsListEmpty = xmppConnectionService.isConversationsListEmpty(ignore); | ||||
| 		if (isConversationsListEmpty && mRedirectInProcess.compareAndSet(false, true)) { | ||||
| 			final Intent intent = getRedirectionIntent(noAnimation); | ||||
| 			runOnUiThread(() -> { | ||||
| 				startActivity(intent); | ||||
| 				if (noAnimation) { | ||||
| 					overridePendingTransition(0, 0); | ||||
| 				} | ||||
| 			}); | ||||
| 		} | ||||
| 		return mRedirectInProcess.get(); | ||||
| 	} | ||||
| 
 | ||||
| 	private Intent getRedirectionIntent(boolean noAnimation) { | ||||
| 		Account pendingAccount = xmppConnectionService.getPendingAccount(); | ||||
| 		Intent intent; | ||||
| 		if (pendingAccount != null) { | ||||
| 			intent = new Intent(this, EditAccountActivity.class); | ||||
| 			intent.putExtra("jid", pendingAccount.getJid().toBareJid().toString()); | ||||
| 		} else { | ||||
| 			if (xmppConnectionService.getAccounts().size() == 0) { | ||||
| 				if (Config.X509_VERIFICATION) { | ||||
| 					intent = new Intent(this, ManageAccountActivity.class); | ||||
| 				} else if (Config.MAGIC_CREATE_DOMAIN != null) { | ||||
| 					intent = new Intent(this, WelcomeActivity.class); | ||||
| 					WelcomeActivity.addInviteUri(intent, getIntent()); | ||||
| 				} else { | ||||
| 					intent = new Intent(this, EditAccountActivity.class); | ||||
| 				} | ||||
| 			} else { | ||||
| 				intent = new Intent(this, StartConversationActivity.class); | ||||
| 			} | ||||
| 		} | ||||
| 		intent.putExtra("init", true); | ||||
| 		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); | ||||
| 		if (noAnimation) { | ||||
| 			intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); | ||||
| 		} | ||||
| 		return intent; | ||||
| 	} | ||||
| 
 | ||||
| 	private void notifyFragmentOfBackendConnected(@IdRes int id) { | ||||
| 		final Fragment fragment = getFragmentManager().findFragmentById(id); | ||||
| 		if (fragment != null && fragment instanceof XmppFragment) { | ||||
|  | @ -211,6 +267,7 @@ public class ConversationActivity extends XmppActivity implements OnConversation | |||
| 		if (this.mTheme != theme) { | ||||
| 			recreate(); | ||||
| 		} | ||||
| 		mRedirectInProcess.set(false); | ||||
| 		super.onStart(); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -297,7 +354,9 @@ public class ConversationActivity extends XmppActivity implements OnConversation | |||
| 
 | ||||
| 	@Override | ||||
| 	public void onConversationArchived(Conversation conversation) { | ||||
| 		//TODO; check if nothing more left; | ||||
| 		if (performRedirectIfNecessary(conversation, false)) { | ||||
| 			return; | ||||
| 		} | ||||
| 		Fragment mainFragment = getFragmentManager().findFragmentById(R.id.main_fragment); | ||||
| 		if (mainFragment != null && mainFragment instanceof ConversationFragment) { | ||||
| 			getFragmentManager().popBackStack(); | ||||
|  | @ -337,6 +396,9 @@ public class ConversationActivity extends XmppActivity implements OnConversation | |||
| 
 | ||||
| 	@Override | ||||
| 	public void onConversationUpdate() { | ||||
| 		if (performRedirectIfNecessary(false)) { | ||||
| 			return; | ||||
| 		} | ||||
| 		this.refreshUi(); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -96,7 +96,7 @@ public class WelcomeActivity extends XmppActivity { | |||
| 
 | ||||
| 	public static void launch(AppCompatActivity activity) { | ||||
| 		Intent intent = new Intent(activity, WelcomeActivity.class); | ||||
| 		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION); | ||||
| 		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); | ||||
| 		activity.startActivity(intent); | ||||
| 		activity.overridePendingTransition(0,0); | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Daniel Gultsch
						Daniel Gultsch