package com.uservoice.uservoicesdk.flow; import android.content.Context; import com.uservoice.uservoicesdk.Config; import com.uservoice.uservoicesdk.Session; import com.uservoice.uservoicesdk.model.AccessToken; import com.uservoice.uservoicesdk.model.AccessTokenResult; import com.uservoice.uservoicesdk.model.BaseModel; import com.uservoice.uservoicesdk.model.ClientConfig; import com.uservoice.uservoicesdk.model.RequestToken; import com.uservoice.uservoicesdk.model.User; import com.uservoice.uservoicesdk.ui.DefaultCallback; public class InitManager { private final Context context; private final Runnable callback; private boolean canceled; public InitManager(Context context, Runnable callback) { this.context = context; this.callback = callback; } public void init() { if (Session.getInstance().getClientConfig() == null) { ClientConfig.loadClientConfig(new DefaultCallback<ClientConfig>(context) { @Override public void onModel(ClientConfig model) { Session.getInstance().setClientConfig(model); loadUser(); } }); } else { loadUser(); } } private void loadUser() { if (Session.getInstance().getUser() == null) { if (shouldSignIn()) { RequestToken.getRequestToken(new DefaultCallback<RequestToken>(context) { @Override public void onModel(RequestToken model) { if (canceled) return; Session.getInstance().setRequestToken(model); Config config = Session.getInstance().getConfig(); User.findOrCreate(config.getEmail(), config.getName(), config.getGuid(), new DefaultCallback<AccessTokenResult<User>>(context) { public void onModel(AccessTokenResult<User> model) { if (canceled) return; Session.getInstance().setAccessToken(context, model.getAccessToken()); Session.getInstance().setUser(model.getModel()); done(); } ; }); } }); } else { AccessToken accessToken = BaseModel.load(Session.getInstance().getSharedPreferences(), "access_token", "access_token", AccessToken.class); if (accessToken != null) { Session.getInstance().setAccessToken(accessToken); User.loadCurrentUser(new DefaultCallback<User>(context) { @Override public void onModel(User model) { Session.getInstance().setUser(model); done(); } }); } else { done(); } } } else { done(); } } private boolean shouldSignIn() { Config config = Session.getInstance().getConfig(); return config.getEmail() != null; } public void cancel() { canceled = true; } private void done() { callback.run(); } }