package org.azavea.otm.ui; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.webkit.WebView; import org.azavea.otm.App; import org.azavea.otm.R; import org.azavea.otm.rest.handlers.RestHandler; import org.jdeferred.Deferred; import org.jdeferred.Promise; import org.jdeferred.impl.DeferredObject; public class SplashScreenActivity extends Activity { private static final int SPLASH_SCREEN_DELAY_MILLIS = 2000; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // render the splash screen setContentView(R.layout.activity_splash_screen); WebView wv = (WebView) findViewById(R.id.splash_webview); wv.loadUrl("file:///android_asset/splash_content.html"); // The 2nd and 3rd type parameters are required but unused // (They would be the arguments for promise.reject and promise.progress) final Deferred<Bundle, Throwable, Integer> autoLoginDeferred = new DeferredObject<>(); final Promise<Bundle, Throwable, Integer> autoLogin = autoLoginDeferred.promise(); App.getLoginManager().autoLogin(msg -> { autoLoginDeferred.resolve(msg.getData()); return true; }); Handler splashHandler = new Handler() { @Override public void handleMessage(Message msg) { autoLogin.done(args -> { // Only skip the instance switcher for a skinned app // or if the login succeeded on a non-skinned app if (args != null && args.getBoolean(RestHandler.SUCCESS_KEY)) { redirect(App.hasInstanceCode()); } else { redirect(App.hasSkinCode()); } }); } }; splashHandler.sendMessageDelayed(Message.obtain(), SPLASH_SCREEN_DELAY_MILLIS); } private void redirect(final boolean skipInstanceSwitcher) { App app = App.getAppInstance(); Intent intent = new Intent(app, skipInstanceSwitcher ? TabLayout.class : InstanceSwitcherActivity.class ); startActivity(intent); finish(); } }