package im.actor.tour; import android.content.Context; import android.graphics.drawable.StateListDrawable; import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.WindowManager; import android.view.animation.AccelerateDecelerateInterpolator; import android.widget.RelativeLayout; import android.widget.TextView; import im.actor.sdk.ActorSDK; import im.actor.sdk.R; import im.actor.sdk.controllers.auth.AuthActivity; import im.actor.sdk.util.Screen; import im.actor.sdk.util.Fonts; import im.actor.sdk.view.SelectorFactory; public class TourActivity extends ActionBarActivity { private static final int SIGNIN = 1; private static final int SIGNUP = 3; private static final int SIGNIN_OAUTH = 4; private int lastPageIndex = 3; private int contentTopPadding; @Override protected void onStart() { super.onStart(); ActorSDK.sharedActor().waitForReady(); String authState = getSharedPreferences("properties.ini", Context.MODE_PRIVATE).getString("auth_state", null); if (authState != null && !authState.equals("SIGN_UP") && !authState.equals("AUTH_START")) { ActorSDK.sharedActor().startMessagingApp(this); finish(); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tour_activity); final VerticalViewPager viewPager = (VerticalViewPager) findViewById(R.id.viewpager); final View backToTopText = findViewById(R.id.back_to_top); final View backToTopArrow = findViewById(R.id.back_to_top_arrow); final View paralax = findViewById(R.id.paralax); final View paralaxImage = findViewById(R.id.paralax_image); final View background = findViewById(R.id.background); final View loginHolder = findViewById(R.id.login_holder); final View welcomeImage = findViewById(R.id.welcome_logo); final View welcomeText = findViewById(R.id.welcome_text); background.findViewById(R.id.background_colored).setBackgroundColor(ActorSDK.sharedActor().style.getMainColor()); TextView signupButtonText = (TextView) findViewById(R.id.signUpButtonText); StateListDrawable states = SelectorFactory.get(ActorSDK.sharedActor().style.getPrimaryAltColor(), this); signupButtonText.setBackgroundDrawable(states); signupButtonText.setTextColor(ActorSDK.sharedActor().style.getTextPrimaryInvColor()); signupButtonText.setTypeface(Fonts.medium()); TextView buttonSignUp = (TextView) findViewById(R.id.signIn); buttonSignUp.setTextColor(ActorSDK.sharedActor().style.getTextPrimaryInvColor()); buttonSignUp.setTypeface(Fonts.medium()); ((TextView) findViewById(R.id.app_name)).setTextColor(ActorSDK.sharedActor().style.getTextPrimaryInvColor()); ((TextView) findViewById(R.id.tour_welcome_subtitle)).setTextColor(ActorSDK.sharedActor().style.getTextPrimaryInvColor()); findViewById(R.id.signUpButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Bundle authExtras = new Bundle(); authExtras.putInt(AuthActivity.SIGN_TYPE_KEY, AuthActivity.SIGN_TYPE_UP); ActorSDK.sharedActor().startAuthActivity(TourActivity.this, authExtras); finish(); } }); findViewById(R.id.signIn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Bundle authExtras = new Bundle(); authExtras.putInt(AuthActivity.SIGN_TYPE_KEY, AuthActivity.SIGN_TYPE_IN); ActorSDK.sharedActor().startAuthActivity(TourActivity.this, authExtras); finish(); } }); View.OnClickListener jumpToTopListener = new View.OnClickListener() { @Override public void onClick(View v) { backToTopArrow.animate().alpha(0).setDuration(0).start(); backToTopText.animate().alpha(0).setDuration(0).start(); viewPager.setCurrentItem(0, true); } }; backToTopText.setOnClickListener(jumpToTopListener); backToTopArrow.setOnClickListener(jumpToTopListener); viewPager.setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { if (position == 0 || position == lastPageIndex + 1) return new Fragment(); return TourFragment.getInstance(position); } @Override public int getCount() { return 4;//6; } }); //Necessary or the pager will only have one extra page to show // make this at least however many pages you can see viewPager.setOffscreenPageLimit(3); //A little space between pages viewPager.setPageMargin(-Screen.dp(165)); //If hardware acceleration is enabled, you should also remove // clipping on the pager for its children. viewPager.setClipChildren(false); viewPager.setOnScrollListener(new ScrollListener() { public static final int LOGINHOLDER_STATUS_OUT = 1; public static final int LOGINHOLDER_STATUS_VISIBLE = 2; public int loginHolderStatus; public boolean welcomeShowed = false; public boolean mainContentHidden = false; public boolean loginHolderBackgroundVisible = false; @Override public void onScroll(int y, float page) { if (page < 1) { float alpha = 1 - page * 2; backToTopArrow.animate().alpha(alpha).setDuration(0).start(); //status1.setText("alpha:" + alpha); if (loginHolder.getTop() != 0) { float loginY = (float) loginHolder.getTop() * ((float) 1 - (page)); loginHolder.animate().y(loginY).setDuration(0).setStartDelay(0).start(); background.animate().y(loginY - background.getHeight() + loginHolder.getHeight() + Screen.dp(8)).setDuration(0).start(); /*if(loginHolderBackgroundVisible){ loginHolderBackgroundVisible = false; loginHolderBackground.animate().alpha(0).setDuration(0).start(); } else { }*/ //loginHolderBackground.animate().alpha(page).setDuration(0).start(); background.animate().alpha(page).setDuration(0).start(); loginHolderStatus = LOGINHOLDER_STATUS_VISIBLE; float welcomeImageY = welcomeImage.getTop() - y / 2; float welcomeTextY = welcomeText.getTop() - y / 2; if (alpha > 0) { welcomeImage.animate() //.scaleX(alpha/2+0.5f).scaleY(alpha/2+0.5f) .alpha(alpha).y(welcomeImageY).setDuration(0).start(); welcomeText.animate() //.scaleX(alpha/2+0.5f).scaleY(alpha/2+0.5f) .alpha(alpha).y(welcomeTextY).setDuration(0).start(); } else { welcomeImage.animate().alpha(0).setDuration(0).start(); welcomeText.animate().alpha(0).setDuration(0).start(); } } mainContentHidden = false; } else { if (page >= 1 && page <= lastPageIndex) { // todo freeze? if (!mainContentHidden) { mainContentHidden = true; loginHolderBackgroundVisible = true; //signinLastView.setEnabled(false); //signinView.setEnabled(false); //signupLastView.setEnabled(false); //signupView.setEnabled(false); loginHolder.animate().y(0).setDuration(0).start(); //loginHolderBackground.animate().alpha(1).setDuration(0).start(); background.animate().y(-loginHolder.getTop() + Screen.dp(8)).alpha(1).setDuration(0).start(); welcomeImage.animate().alpha(0).setDuration(0).start(); welcomeText.animate().alpha(0).setDuration(0).start(); backToTopArrow.animate().alpha(0).setDuration(0).start(); backToTopText.animate().alpha(0).setDuration(0).start(); } if (page > lastPageIndex - 1) { float alpha = (page - (lastPageIndex - 1)) * 3 - 2; if (alpha > 0) { backToTopText.animate().scaleX(alpha).scaleY(alpha).alpha(alpha).setDuration(0).start(); } else { backToTopText.animate().scaleX(0).scaleY(0).alpha(0).setDuration(0).start(); } } } else { if (page > lastPageIndex) { float progress = page - lastPageIndex; if (progress > 0.5) { if (loginHolderStatus == LOGINHOLDER_STATUS_VISIBLE) { loginHolderStatus = LOGINHOLDER_STATUS_OUT; loginHolder.animate().y(-loginHolder.getHeight()).setDuration(200).setInterpolator(new AccelerateDecelerateInterpolator()).setStartDelay(0).start(); } mainContentHidden = false; } else { if (loginHolderStatus == LOGINHOLDER_STATUS_OUT) { loginHolderStatus = LOGINHOLDER_STATUS_VISIBLE; loginHolder.animate().y(0).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(200).setStartDelay(0).start(); } if (!mainContentHidden) { backToTopArrow.animate().alpha(0).setDuration(0).start(); backToTopText.animate().alpha(0).setDuration(0).start(); } } } } } int paralaxHolderHeight = paralax.getHeight(); int paralaxImageHeight = paralaxImage.getHeight(); float paralaxY = -(((float) paralaxImageHeight - paralaxHolderHeight) * ((float) page / (lastPageIndex))); paralaxImage.animate().y(paralaxY).setDuration(0).setStartDelay(0).start(); } }); if (Build.VERSION.SDK_INT >= 19) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); contentTopPadding = Screen.getStatusBarHeight(); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) findViewById(R.id.pager_container).getLayoutParams(); params.topMargin = contentTopPadding; findViewById(R.id.pager_container).setLayoutParams(params); params = (RelativeLayout.LayoutParams) backToTopArrow.getLayoutParams(); params.topMargin = contentTopPadding + params.topMargin; backToTopArrow.setLayoutParams(params); params = (RelativeLayout.LayoutParams) welcomeImage.getLayoutParams(); params.topMargin = contentTopPadding + params.topMargin; welcomeImage.setLayoutParams(params); params = (RelativeLayout.LayoutParams) welcomeText.getLayoutParams(); params.topMargin = contentTopPadding + params.topMargin; welcomeText.setLayoutParams(params); params = (RelativeLayout.LayoutParams) backToTopText.getLayoutParams(); params.topMargin = contentTopPadding + params.topMargin; backToTopText.setLayoutParams(params); } } }