PedometerActivity.java 12.1 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.PopupMenu;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;

import com.dinhcv.lifelogpedometer.R;
import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting;
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 ImageView imvMenu;

    private TopFragment mTopFragment;
    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);

        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);
        imvMenu = (ImageView) findViewById(R.id.imv_menu);

        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 0: mTopFragment.clickBackToHome(); break;
                    case 1: mHistoryFragment.clickBackToHome(); break;
                    case 4: mSnsFragment.handleToolbarClick(0); break;
                    default: break;
                }
            }
        });

        imvMenu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Creating the instance of PopupMenu
                PopupMenu popup = new PopupMenu(PedometerActivity.this, imvMenu);
                //Inflating the Popup using xml file
                popup.getMenuInflater().inflate(R.menu.main, popup.getMenu());

                //registering popup with OnMenuItemClickListener
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()){
                            case R.id.action_setting:
                                Toast.makeText(
                                        PedometerActivity.this,
                                        "Have not spec : " + item.getTitle(),
                                        Toast.LENGTH_SHORT
                                ).show();
                                break;
                            case R.id.action_profile:
                                Toast.makeText(
                                        PedometerActivity.this,
                                        "Have not spec : " + item.getTitle(),
                                        Toast.LENGTH_SHORT
                                ).show();
                                break;
                            case R.id.action_logout:
                                logout();
                                break;
                            default:
                                Debug.warn("Not run here");
                                break;
                        }

                        return true;
                    }
                });

                popup.show(); //showing popup menu
            }
        }); //closing the setOnClickListener method
    }

    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());
        mTopFragment = new TopFragment();
        adapter.addFragment(mTopFragment, 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);

            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;

                case 0:
                    tvPageTitle.setText(getString(R.string.home));
                    ivHome.setVisibility(View.GONE);
                    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);
//            }

            presenter.onInvalidate(false);
            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();
                }
            }
        }
    };

    public void setVisibleIconHome(boolean isVisible){
        if (isVisible) {
            ivHome.setVisibility(View.VISIBLE);
        }else {
            ivHome.setVisibility(View.GONE);
        }

        setTitleTop(isVisible);
    }

    public void setTitleTop(boolean isVisible){
        if (isVisible) {
            tvPageTitle.setText(getString(R.string.today));
        }else {
            tvPageTitle.setText(getString(R.string.home));
        }
    }



    private void logout(){
        // clear data
        Setting.clearUserIdSharepre(PedometerActivity.this);
        // go to login
        Intent intent  =  new Intent(PedometerActivity.this, LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

}