PedometerActivity.java 8.95 KB
package com.dinhcv.lifelogpedometer.activity;

import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.PermissionChecker;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;

import com.dinhcv.lifelogpedometer.R;
import com.dinhcv.lifelogpedometer.feature.SensorListener;
import com.dinhcv.lifelogpedometer.utils.Debug;
import com.dinhcv.lifelogpedometer.utils.Utils;

import java.util.ArrayList;
import java.util.List;

public class PedometerActivity extends ActivityBase {
    private Toolbar mToolBar;
    private ViewPager mViewPager;
    private int mCurrentTab = 0;
    private TabLayout mTabLayout;
    private TextView tvPageTitle;
    private ImageView ivHome;

    private HistoryFragment mHistoryFragment;
    private SnsFragment mSnsFragment;

    private int[] tabIcons = {
            com.dinhcv.lifelogpedometer.R.drawable.ic_date,
            R.drawable.ic_history,
            R.drawable.ic_rank,
            R.drawable.ic_map,
            R.drawable.ic_sns
    };

    public enum TAB {
        DATE_TAB(0),
        HISTORY_TAB(1),
        RANK_TAB(2),
        MAP_TAB(3),
        SNS_TAB(4);

        private final int index;

        TAB(int index) {
            this.index = index;
        }

        public int getValue() {
            return index;
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // start service
        startService(new Intent(this, SensorListener.class));

        setContentView(R.layout.activity_pedometer);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

        initView();

        if (android.support.v4.BuildConfig.DEBUG && Build.VERSION.SDK_INT >= 23 && PermissionChecker
                .checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
                PermissionChecker.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
        }
    }

    private void initView() {

        tvPageTitle = (TextView) findViewById(R.id.tv_pageTitle);
        ivHome = (ImageView) findViewById(R.id.iv_home);

        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        mViewPager.setOffscreenPageLimit(5);
        setupViewPager(mViewPager);
        mTabLayout = (TabLayout) findViewById(R.id.tabs);
        mTabLayout.setupWithViewPager(mViewPager);
        //Set tab selected
        TabLayout.Tab tab = mTabLayout.getTabAt(mCurrentTab);
        if (tab != null) {
            tab.select();
        }

        changeColorStatusBar();
        setupTabIcons();

        //SonLT Add
        ivHome.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (mCurrentTab){
                    case 1: mHistoryFragment.clickBackToHome(); break;
                    case 4: mSnsFragment.handleToolbarClick(0); break;
                    default: break;
                }
            }
        });
    }

    private void setupTabIcons() {
        mTabLayout.getTabAt(0).setIcon(tabIcons[0]);
        mTabLayout.getTabAt(1).setIcon(tabIcons[1]);
        mTabLayout.getTabAt(2).setIcon(tabIcons[2]);
        mTabLayout.getTabAt(3).setIcon(tabIcons[3]);
        mTabLayout.getTabAt(4).setIcon(tabIcons[4]);
    }


    private void setTabView() {

        for (int i = 0; i < mTabLayout.getTabCount(); i++) {
            TextView tv = (TextView) mTabLayout.getChildAt(0).findViewById(android.R.id.title);
            //tv.setTextColor(Color.BLACK);
            tv.setPadding(10, 10, 10, 15);
            tv.setTextSize((float) 20.0);
            //tv.setTypeface(null, Typeface.BOLD);
            //tv.setBackgroundResource(R.drawable.icon);
            tv.setHeight(100);
            tv.setWidth(100);
        }

    }

    private void changeColorStatusBar() {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
            Window window = this.getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.setStatusBarColor(Utils.getColorWrapper(this, R.color.white));
        }
    }

//    @Override
//    public boolean onCreateOptionsMenu(Menu menu) {
//        getMenuInflater().inflate(R.menu.setting_menu, menu);
//        return true;
//    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }

    /**
     * Setup pager
     *
     * @param viewPager: view pager
     */
    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new DateFragment(), getString(R.string.date));
        mHistoryFragment = new HistoryFragment();
        adapter.addFragment(mHistoryFragment, getString(R.string.history));
        adapter.addFragment(new RankFragment(), getString(R.string.ranking));
        adapter.addFragment(new MapFragment(), getString(R.string.map));
        mSnsFragment = new SnsFragment();
        adapter.addFragment(mSnsFragment, getString(R.string.sns));
        viewPager.setAdapter(adapter);
    }

    /**
     * Class FragmentPagerAdapter
     */
    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        private void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        mViewPager.addOnPageChangeListener(mPageChangeListener);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mViewPager.removeOnPageChangeListener(mPageChangeListener);
    }

    private int mLastTab = 0;
    private final ViewPager.OnPageChangeListener mPageChangeListener = new ViewPager
            .OnPageChangeListener
            () {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            //Nothing here
        }

        @Override
        public void onPageSelected(int position) {
            ViewPagerAdapter adapter = (ViewPagerAdapter) mViewPager.getAdapter();
            SettingFragmentPresenter presenter = (SettingFragmentPresenter) adapter.getItem
                    (position);
            presenter.onInvalidate(false);

            switch (position) {
                case 4:
                    tvPageTitle.setText(getString(R.string.sns_fragment));
                    ivHome.setVisibility(View.VISIBLE);
                    break;
                case 1:
                    tvPageTitle.setText(getString(R.string.today));
                    ivHome.setVisibility(View.VISIBLE);
                    break;
                default:
                    tvPageTitle.setText(getString(R.string.home));
                    ivHome.setVisibility(View.GONE);
                    break;
            }
//            if (position == 1){
//                tvPageTitle.setText(getString(R.string.today));
//                ivHome.setVisibility(View.VISIBLE);
//            }else {
//                tvPageTitle.setText(getString(R.string.home));
//                ivHome.setVisibility(View.GONE);
//            }

            mLastTab = position;
            mCurrentTab = position;
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            //Nothing here
            if (state == ViewPager.SCROLL_STATE_SETTLING) {
                if (mLastTab >= 0) {
                    ViewPagerAdapter adapter = (ViewPagerAdapter) mViewPager.getAdapter();
                    SettingFragmentPresenter presenter = (SettingFragmentPresenter) adapter
                            .getItem(mLastTab);

                    Debug.normal("Save data in tab:" + mLastTab);
                    presenter.onSaveData();
                }
            }
        }
    };

}