package com.duckduckgo.mobile.android.activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Point;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.transition.Fade;
import android.view.Display;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.duckduckgo.mobile.android.R;
import com.duckduckgo.mobile.android.adapters.OnboardingPageAdapter;
import com.duckduckgo.mobile.android.dialogs.InstructionDialogFragment;
import com.duckduckgo.mobile.android.util.CompatUtils;
import com.duckduckgo.mobile.android.util.OnboardingHelper;
import com.duckduckgo.mobile.android.util.OnboardingTransformer;
import com.duckduckgo.mobile.android.views.pageindicator.OnboardingPageIndicator;
import java.util.Arrays;
public class OnboardingActivity extends AppCompatActivity {
public static Intent getStartIntent(Context context) {
return new Intent(context, OnboardingActivity.class);
}
private FrameLayout activityContainer;
private LinearLayout containerLayout;
private ViewPager viewPager;
private OnboardingPageAdapter adapter;
private OnboardingPageIndicator pageIndicator;
private Button addToHomeScreenButton;
private OnboardingHelper onboardingHelper;
private InstructionDialogFragment instructionDialogFragment = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Fade fade = new Fade();
fade.setDuration(400);
getWindow().setReturnTransition(fade);
}
setContentView(R.layout.activity_onboarding);
initUI();
}
@Override
public void finish() {
if(viewPager.getCurrentItem() >= adapter.getCount() -1)
onboardingHelper.setOnboardingDismissed();
super.finish();
}
@Override
public void onBackPressed() {
if(viewPager.getCurrentItem() > 0) {
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
}
}
private void initUI() {
onboardingHelper = new OnboardingHelper(this);
activityContainer = (FrameLayout) findViewById(R.id.activity_onboarding);
containerLayout = (LinearLayout) findViewById(R.id.container_layout);
boolean isFirefoxDefault = onboardingHelper.isDefaultBrowserFirefox();
addToHomeScreenButton = (Button) findViewById(R.id.add_to_home_screen_button);
addToHomeScreenButton.setText(
String.format(getString(R.string.add_to),
getString(isFirefoxDefault ? R.string.browser_firefox : R.string.browser_chrome))
);
addToHomeScreenButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addTo();
}
});
adapter = new OnboardingPageAdapter(this, getSupportFragmentManager());
viewPager = (ViewPager) findViewById(R.id.view_pager);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(position == 4) {
ActivityCompat.finishAfterTransition(OnboardingActivity.this);
}
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
viewPager.setAdapter(adapter);
pageIndicator = (OnboardingPageIndicator) findViewById(R.id.page_indicator);
pageIndicator.setViewPager(viewPager, adapter.getCount() - 1);
viewPager.setPageTransformer(false, new OnboardingTransformer(adapter, pageIndicator, Arrays.asList(pageIndicator, addToHomeScreenButton)));
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
CompatUtils.getDisplaySize(display, size);
int width = size.x;
int height = size.y;
if(width > height) return;
final float bottomRatio = 13.6f;
final int bottomMargin = (int) (height / bottomRatio);
containerLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) containerLayout.getLayoutParams();
params.bottomMargin = bottomMargin;
containerLayout.setLayoutParams(params);
CompatUtils.removeOnGlobalLayoutListener(containerLayout.getViewTreeObserver(), this);
}
});
if(instructionDialogFragment == null) {
instructionDialogFragment = InstructionDialogFragment.newInstance(
onboardingHelper.isDefaultBrowserFirefox()
? InstructionDialogFragment.EXTRA_INSTRUCTION_FIREFOX
: InstructionDialogFragment.EXTRA_INSTRUCTION_CHROME,
true);
instructionDialogFragment.show(getSupportFragmentManager(), InstructionDialogFragment.TAG);
}
}
private void addTo() {
InstructionDialogFragment.newInstance(
onboardingHelper.isDefaultBrowserFirefox() ? InstructionDialogFragment.EXTRA_INSTRUCTION_FIREFOX : InstructionDialogFragment.EXTRA_INSTRUCTION_CHROME)
.show(getSupportFragmentManager(), InstructionDialogFragment.TAG);
}
}