package org.wheelmap.android.activity;
import android.content.pm.ActivityInfo;
import android.content.res.TypedArray;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import org.wheelmap.android.activity.base.BaseActivity;
import org.wheelmap.android.analytics.AnalyticsTrackingManager;
import org.wheelmap.android.fragment.introduction.IntroductionFragment;
import org.wheelmap.android.online.R;
import java.util.ArrayList;
import java.util.List;
/**
* Created by uwe on 04.11.15.
*/
public class IntroductionActivity extends BaseActivity {
private LinearLayout indicatorContainer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!getResources().getBoolean(R.bool.rotation_support)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
setContentView(R.layout.activity_introduction);
indicatorContainer = (LinearLayout) findViewById(R.id.indicator_container);
List<IntroductionData> introductionDataList = getIntroductionData();
PagerAdapter adapder = new MyPageAdapter(getSupportFragmentManager(), introductionDataList);
ViewPager paper = (ViewPager) findViewById(R.id.viewpager);
paper.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
@Override
public void onPageSelected(int position) {
selectPageIndicator(position);
}
});
paper.setAdapter(adapder);
Button doneButton = (Button) findViewById(R.id.introduction_done);
doneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
initIndicatorIcons(introductionDataList.size());
selectPageIndicator(0);
AnalyticsTrackingManager.trackScreen(AnalyticsTrackingManager.TrackableScreensName.OSMONBORDINGSCREEN);
}
@SuppressWarnings("ResourceType")
private List getIntroductionData(){
ArrayList<IntroductionData> introductionDataList = new ArrayList<>();
TypedArray introductionNames = getResources().obtainTypedArray(R.array.introduction_names);
for(int namesIndex = 0; namesIndex < introductionNames.length(); namesIndex++) {
int arrayId = introductionNames.getResourceId(namesIndex, -1);
if(arrayId > -1){
TypedArray introductionEntryArray = getResources().obtainTypedArray(arrayId);
//IMPORTENT - declaration-order needs to match xml-declaration-order -->
int layoutId = introductionEntryArray.getResourceId(0, -1);
int drawableId = introductionEntryArray.getResourceId(1, -1);
int boldTextId = introductionEntryArray.getResourceId(2, -1);
int defaultTextId = introductionEntryArray.getResourceId(3, -1);
introductionDataList.add(new IntroductionData(layoutId, drawableId, boldTextId, defaultTextId));
introductionEntryArray.recycle();
}
}
introductionNames.recycle();
return introductionDataList;
}
private void initIndicatorIcons(int indicatorNumber){
if(indicatorContainer != null){
for(int position = 0; position < indicatorNumber; position++){
ImageView indicatorImageView = new ImageView(this);
int oneDpInPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
1, getResources().getDisplayMetrics());
LinearLayout.LayoutParams layoutParameter = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParameter.setMargins(oneDpInPx * 2, 0, oneDpInPx * 2, 0);
indicatorImageView.setLayoutParams(layoutParameter);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
indicatorImageView.setImageDrawable(getDrawable(R.drawable.circular_selection_indicator));
} else {
indicatorImageView.setImageDrawable(
ContextCompat.getDrawable(this, R.drawable.circular_selection_indicator));
}
indicatorContainer.addView(indicatorImageView);
}
}
}
private void selectPageIndicator(int position){
if(indicatorContainer != null){
List<ImageView> indicatorImages = getIndicatorImages(indicatorContainer);
for (ImageView indicatorImageView : indicatorImages){
indicatorImageView.setActivated(false);
}
indicatorContainer.getChildAt(position).setActivated(true);
}
}
private List<ImageView> getIndicatorImages(ViewGroup parent){
ArrayList<ImageView> indicatorImageList = new ArrayList<>();
if(parent != null){
for(int childCount = 0; childCount < parent.getChildCount(); childCount++){
View child = parent.getChildAt(childCount);
if(child instanceof ViewGroup){
List<ImageView> deepElements = getIndicatorImages((ViewGroup) child);
if(deepElements.size() > 0){
indicatorImageList.addAll(deepElements);
}
} else if (child instanceof ImageView){
indicatorImageList.add((ImageView) child);
}
}
}
return indicatorImageList;
}
private class MyPageAdapter extends FragmentPagerAdapter{
private final List<IntroductionData> introductionDataList;
public MyPageAdapter(FragmentManager supportFragmentManager, List introductionDataList){
super(supportFragmentManager);
this.introductionDataList = introductionDataList;
}
@Override
public Fragment getItem(int position) {
IntroductionData introductionData = introductionDataList.get(position);
return IntroductionFragment.newInstance(
introductionData.layoutId,
introductionData.drawableId,
introductionData.boldTextId,
introductionData.defaultTextId);
}
@Override
public int getCount() {
return introductionDataList.size();
}
}
public class IntroductionData{
private final int layoutId;
private final int drawableId;
private final int boldTextId;
private final int defaultTextId;
public IntroductionData(int layoutId, int drawableId, int boldTextId, int defaultTextId){
this.layoutId = layoutId;
this.drawableId = drawableId;
this.boldTextId = boldTextId;
this.defaultTextId = defaultTextId;
}
}
}