package com.gaiagps.iburn.activity; import android.Manifest; import android.content.ContentValues; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.ImageButton; import com.gaiagps.iburn.AudioTourDownloader; import com.gaiagps.iburn.PrefsHelper; import com.gaiagps.iburn.R; import com.gaiagps.iburn.database.DataProvider; import com.gaiagps.iburn.database.PlayaDatabase; import com.gaiagps.iburn.database.UserPoiTable; import com.gaiagps.iburn.fragment.WelcomeFragment; import permissions.dispatcher.NeedsPermission; import permissions.dispatcher.RuntimePermissions; @RuntimePermissions public class WelcomeActivity extends AppCompatActivity implements WelcomeFragment.HomeCampSelectionListener { static final int NUM_PAGES = 5; private PrefsHelper prefs; private CampSelection homeCampSelection; private ViewPager pager; private PagerAdapter pagerAdapter; private Button skip; private Button done; private ImageButton next; private boolean isOpaque = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = getWindow(); window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); setContentView(R.layout.activity_welcome); skip = Button.class.cast(findViewById(R.id.skip)); skip.setOnClickListener(v -> endTutorial()); next = ImageButton.class.cast(findViewById(R.id.next)); next.setOnClickListener(v -> pager.setCurrentItem(pager.getCurrentItem() + 1, true)); done = Button.class.cast(findViewById(R.id.done)); done.setOnClickListener(v -> endTutorial()); pager = (ViewPager) findViewById(R.id.pager); pagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); pager.setAdapter(pagerAdapter); pager.setPageTransformer(true, new CrossfadePageTransformer()); pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (position == NUM_PAGES - 2 && positionOffset > 0) { if (isOpaque) { pager.setBackgroundColor(Color.TRANSPARENT); isOpaque = false; } } else { if (!isOpaque) { pager.setBackgroundColor(getResources().getColor(R.color.off_blk_2)); isOpaque = true; } } } @Override public void onPageSelected(int position) { if (position == NUM_PAGES - 2) { skip.setVisibility(View.GONE); next.setVisibility(View.GONE); done.setVisibility(View.VISIBLE); } else if (position < NUM_PAGES - 2) { skip.setVisibility(View.VISIBLE); next.setVisibility(View.VISIBLE); done.setVisibility(View.GONE); } else if (position == NUM_PAGES - 1) { endTutorial(); } } @Override public void onPageScrollStateChanged(int state) { } }); prefs = new PrefsHelper(this); } @NeedsPermission(Manifest.permission.ACCESS_FINE_LOCATION) void testPermission() { } @Override protected void onDestroy() { super.onDestroy(); if (pager != null) { pager.clearOnPageChangeListeners(); } } public void endTutorial() { if (homeCampSelection != null) { ContentValues poiValues = new ContentValues(); poiValues.put(UserPoiTable.name, homeCampSelection.name); poiValues.put(UserPoiTable.latitude, homeCampSelection.lat); poiValues.put(UserPoiTable.longitude, homeCampSelection.lon); poiValues.put(UserPoiTable.drawableResId, UserPoiTable.HOME); DataProvider.getInstance(getApplicationContext()) .map(dataProvider -> dataProvider.insert(PlayaDatabase.POIS, poiValues)) .subscribe(); } prefs.setDidShowWelcome(true); Intent mainIntent = new Intent(getApplicationContext(), MainActivity.class); mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(mainIntent); finish(); //overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out); } @Override public void onBackPressed() { if (pager.getCurrentItem() == 0) { super.onBackPressed(); } else { pager.setCurrentItem(pager.getCurrentItem() - 1); } } @Override public void onHomeCampSelected(CampSelection selection) { homeCampSelection = selection; } public void onAudioTourDownloadButtonClicked(View view) { Button downloadButton = (Button) view; downloadButton.setText("Consider it done!"); downloadButton.setEnabled(false); AudioTourDownloader atd = new AudioTourDownloader(); atd.downloadAudioTours(this); } private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { public ScreenSlidePagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { WelcomeFragment tp = null; switch (position) { case 0: tp = WelcomeFragment.newInstance(R.layout.welcome_fragment1); break; case 1: tp = WelcomeFragment.newInstance(R.layout.welcome_fragment2); break; case 2: tp = WelcomeFragment.newInstance(R.layout.welcome_fragment3); break; case 3: tp = WelcomeFragment.newInstance(R.layout.welcome_fragment4); break; case 4: tp = WelcomeFragment.newInstance(R.layout.welcome_fragment5); break; } return tp; } @Override public int getCount() { return NUM_PAGES; } } public class CrossfadePageTransformer implements ViewPager.PageTransformer { @Override public void transformPage(View page, float position) { int pageWidth = page.getWidth(); View brcOutline = page.findViewById(R.id.a000); View welcomeHeader = page.findViewById(R.id.welcomeHeader); View video = page.findViewById(R.id.video); View welcome2 = page.findViewById(R.id.welcome_fragment2); View yurt = page.findViewById(R.id.yurt); if (position <= -1.0f || position >= 1.0f) { // do nothing } else if (position == 0.0f) { // do nothing } else { if (video != null) { video.setAlpha(1.0f - Math.abs(position)); page.setTranslationX(pageWidth * -position); } if (welcomeHeader != null) { welcomeHeader.setAlpha(1.0f - Math.abs(position)); welcomeHeader.setTranslationX(pageWidth * 1.2f * position); } if (welcome2 != null) { welcome2.setAlpha(1.0f - Math.abs(position)); } if (yurt != null) { yurt.setTranslationX(pageWidth * 1.5f * position); yurt.setAlpha(1.0f - Math.abs(position)); } if (brcOutline != null) { brcOutline.setTranslationX(pageWidth * position); brcOutline.setAlpha(1.0f - Math.abs(position)); } } } } }