package com.duckduckgo.mobile.android.fragment;
import android.graphics.Point;
import android.os.Bundle;
import android.support.annotation.ColorInt;
import android.support.annotation.DrawableRes;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.duckduckgo.mobile.android.R;
import com.duckduckgo.mobile.android.util.CompatUtils;
import com.duckduckgo.mobile.android.util.OnboardingPageConfiguration;
/**
* Created by fgei on 4/4/17.
*/
public class OnboardingPageFragment extends Fragment {
private static final String EXTRA_INDEX_POSITION = "index_position";
private static final String EXTRA_PAGE_CONFIGURATION = "page_configuration";
private static final float BOTTOM_MARGIN_CONSTRAINT_PORTRAIT = 3.819f;
private static final float BOTTOM_MARGIN_CONSTRAINT_LANDSCAPE = 4.228f;
public static OnboardingPageFragment newInstance(OnboardingPageConfiguration onboardingPageConfiguration, int indexPosition) {
OnboardingPageFragment f = new OnboardingPageFragment();
Bundle args = new Bundle();
args.putParcelable(EXTRA_PAGE_CONFIGURATION, onboardingPageConfiguration);
args.putInt(EXTRA_INDEX_POSITION, indexPosition);
f.setArguments(args);
return f;
}
private OnboardingPageConfiguration onboardingPageConfiguration;
private ViewGroup backgroundFrameLayout;
private TextView titleTextView;
private TextView subtitleTextView;
private ImageView iconImageView;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
onboardingPageConfiguration = getOnboardingPageConfiguration();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(
R.layout.fragment_onboarding,
container,
false);
backgroundFrameLayout = (ViewGroup) rootView;
titleTextView = (TextView) rootView.findViewById(R.id.title_text_view);
subtitleTextView = (TextView) rootView.findViewById(R.id.subtitle_text_view);
iconImageView = (ImageView) rootView.findViewById(R.id.icon_image_view);
return rootView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
backgroundFrameLayout.setTag(getIndexPosition());
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
backgroundFrameLayout.setBackgroundColor(getBackgroundColor());
if(!onboardingPageConfiguration.hasContent) return;
String title = getTitle();
titleTextView.setText(title);
String subtitle = getSubtitle();
subtitleTextView.setText(subtitle);
iconImageView.setImageResource(getIcon());
initLayout();
}
private int getIndexPosition() {
return getArguments().getInt(EXTRA_INDEX_POSITION);
}
private OnboardingPageConfiguration getOnboardingPageConfiguration() {
return getArguments().getParcelable(EXTRA_PAGE_CONFIGURATION);
}
private void initLayout() {
Display display = getActivity().getWindowManager().getDefaultDisplay();
Point size = new Point();
CompatUtils.getDisplaySize(display, size);
int width = size.x;
int height = size.y;
final FrameLayout containerLayout = (FrameLayout) backgroundFrameLayout.findViewById(R.id.container_layout);
final FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) containerLayout.getLayoutParams();
boolean isPortrait = width < height;
//float portraitBottomRatio = 3.819f;
//float landscapeBottomRatio = 4.228f;
float bottomMarginConstraint = isPortrait ? BOTTOM_MARGIN_CONSTRAINT_PORTRAIT : BOTTOM_MARGIN_CONSTRAINT_LANDSCAPE;
final int bottomMargin = (int) (height / bottomMarginConstraint);
final int topMargin = height - (int) (height / 1.278);
containerLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
CompatUtils.removeOnGlobalLayoutListener(containerLayout.getViewTreeObserver(), this);
params.bottomMargin = bottomMargin;
containerLayout.setLayoutParams(params);
}
});
}
public String getTitle() {
if(!onboardingPageConfiguration.hasContent) return "";
return getString(onboardingPageConfiguration.title);
}
public String getSubtitle() {
if(!onboardingPageConfiguration.hasContent) return "";
return getString(onboardingPageConfiguration.subtitle);
}
@DrawableRes
public int getIcon() {
if(!onboardingPageConfiguration.hasContent) return 0;
return onboardingPageConfiguration.icon;
}
@ColorInt
public int getBackgroundColor() {
return ContextCompat.getColor(getContext(), onboardingPageConfiguration.backgroundColor);
}
}