package com.yahala.ui;


import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Messenger;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.animation.Interpolator;
import android.widget.ImageView;
import android.widget.Scroller;
import android.widget.TextView;


import com.yahala.android.OSUtilities;
import com.yahala.messenger.R;
import com.yahala.messenger.FileLog;
import com.yahala.android.LocaleController;
import com.yahala.messenger.NotificationCenter;
import com.yahala.ui.Views.BaseFragment;
import com.yahala.ui.Views.PagerSlidingTabStripEmoji;
import com.yahala.xmpp.MessagesStorage;
import com.yahala.xmpp.XMPPManager;

import java.util.ArrayList;

public class MainActivity extends BaseFragment implements PasswordActivity.PasswordDelegate, NotificationCenter.NotificationCenterDelegate, ViewPager.OnPageChangeListener {
    private View backStatusButton;
    private View statusBackground;
    private TextView statusText;
    private TextView unreadCount;
    private View statusView;
    private int currentConnectionState;
    private Messenger activityMessenger;
    private View background_view;
    View homeView;
    TextView titleText;
    ImageView home_button;
    Dialog dialog;
    Toolbar mToolbar;
    private android.support.design.widget.TabLayout tabs;
    private ViewPager pager;
    private MyPagerAdapter adapter;


    private Drawable oldBackground = null;
    private int currentColor = 0xFF3F9FE0;
    private float CurrentAlpha = 0;

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        FileLog.e("onOptionsItemSelected", "itemId:" + itemId);
        FragmentActivity inflaterActivity = parentActivity;


        switch (itemId) {
            case R.id.contacts_list_menu_settings: {


                ((LaunchActivity) inflaterActivity).presentFragment(new SettingsActivity(), "settings", false);


                return true;
            }

            case R.id.InviteFriends: {
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.setType("text/plain");
                intent.putExtra(Intent.EXTRA_TEXT, LocaleController.getString("InviteText", R.string.InviteText));
                startActivity(intent);
                return true;
            }
            case R.id.NewGroup: {
                ((LaunchActivity) inflaterActivity).presentFragment(new GroupCreateActivity(), "Group", false);
                return true;
            }
            case R.id.Online: {
                XMPPManager.getInstance().setPresence(XMPPManager.Available, true);
                ((LaunchActivity) (parentActivity)).updatePresenceMenuIcon();
                return true;
            }
            case R.id.Away: {
                XMPPManager.getInstance().setPresence(XMPPManager.Away, true);
                ((LaunchActivity) (parentActivity)).updatePresenceMenuIcon();
                return true;
            }
            case R.id.DoNotDisturb: {
                XMPPManager.getInstance().setPresence(XMPPManager.DoNotDisturb, true);
                ((LaunchActivity) (parentActivity)).updatePresenceMenuIcon();
                return true;
            }
            case R.id.FreeToChat: {
                XMPPManager.getInstance().setPresence(XMPPManager.FreeToChat, true);
                ((LaunchActivity) (parentActivity)).updatePresenceMenuIcon();
                return true;
            }
            case R.id.Offline: {

                XMPPManager.getInstance().setPresence(5, true);
                ((LaunchActivity) (parentActivity)).updatePresenceMenuIcon();

                return true;
            }
        }
       /* ((LaunchActivity)(parentActivity)).invalidateOptionsMenu();
        ((LaunchActivity)(parentActivity)).menu.clear();
        ((LaunchActivity)(parentActivity)).getMenuInflater().inflate(R.menu.contacts, ((LaunchActivity)(parentActivity)).menu);

        ((LaunchActivity)(parentActivity)).updatePresenceMenuIcon();*/
        return false;

    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        mToolbar.getMenu().clear();
        menu.clear();
        mToolbar.removeView(homeView);
        inflater.inflate(R.menu.contacts, menu);

        ActionBar actionBar = parentActivity.getSupportActionBar();
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayShowHomeEnabled(false);
        actionBar.setDisplayHomeAsUpEnabled(false);
        // actionBar.setHomeAsUpIndicator(R.drawable.ab_icon_fixed2);
        actionBar.setDisplayUseLogoEnabled(false);
        actionBar.setDisplayShowCustomEnabled(true);

        LayoutInflater inflator = (LayoutInflater) getParentActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        homeView = inflator.inflate(R.layout.home_actionbar, null);
        statusBackground = homeView.findViewById(R.id.back_button_background);
        home_button = (ImageView) homeView.findViewById(R.id.home_button);
        titleText = (TextView) homeView.findViewById(R.id.title_text);
        titleText.setText("");
        titleText.setText(LocaleController.getString("AppName", R.string.AppName));
        //actionBar.setCustomView(homeView);

        mToolbar.addView(homeView);

        actionBar.setSubtitle(null);
        homeView.setVisibility(View.VISIBLE);

        homeView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LayoutInflater inflator = (LayoutInflater) getParentActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);


                //  passwordGrid.setAtt();

                PasswordActivity passwordActivity = new PasswordActivity(ApplicationLoader.applicationContext, null);
                passwordActivity.setDelegate(MainActivity.this);

                dialog = new Dialog(parentActivity, R.style.PatternLoackDialogStyle);
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialog.setContentView(passwordActivity);

                //dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
                //dialog.setContentView(R.layout.lock_pattern);
                //dialog.setTitle("Lock Pattern");
                OSUtilities.changeOrientation(getParentActivity());
                //Utilities.lockOrientation(getParentActivity());
                dialog.show();
            }
        });

        // actionBar.setTitle(LocaleController.getString("AppName", R.string.AppName));

        // ((LaunchActivity) (parentActivity)).menu = menu;
        // ((LaunchActivity) (parentActivity)).updatePresenceMenuIcon();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public boolean onFragmentCreate() {
        super.onFragmentCreate();
        NotificationCenter.getInstance().addObserver(this, XMPPManager.updateInterfaces);
        return true;
    }

    @Override
    public void onFragmentDestroy() {
        super.onFragmentDestroy();
        NotificationCenter.getInstance().removeObserver(this, XMPPManager.updateInterfaces);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        try {
            setHasOptionsMenu(true);
            /*if(!XmppManager.getInstance().isConnected()){
                XmppManager.getInstance().xmppRequestStateChange(ConnectionState.ONLINE);
            }*/

            //FileLog.e("MainActivity", "onCreateView");
            if (fragmentView == null) {
                fragmentView = inflater.inflate(R.layout.activity_main, container, false);
                background_view = (View) fragmentView.findViewById(R.id.background_view);
                mToolbar = (Toolbar) fragmentView.findViewById(R.id.toolbar);

                parentActivity.setSupportActionBar(mToolbar);
                tabs = (TabLayout) fragmentView.findViewById(R.id.tabs);


                // tabs = (android.support.design.widget.TabLayout) fragmentView.findViewById(R.id.tabs);
                // tabs.setIndicatorHeight(5);
                // tabs.setTabBackground(Color.parseColor("#FF3f9fe0"));
                // tabs.setTabBackground(R.drawable.bar_selector_main);
                /*

                tabs.setTextSize(OSUtilities.dp(16));
                tabs.setSelectedTabIndicatorColor(Color.parseColor("#FFffffff"));
                tabs.setDividerColor(Color.parseColor("#ff2289ce"));
                tabs.setTabTextColors(getResources().getColorStateList(R.color.White));
                tabs.setSelectedTabIndicatorHeight(2);
                tabs.setUnderlineColor(Color.parseColor("#2180bf"));
                //tabs.setShouldExpand(true);

                if (LocaleController.isRTL) {
                    tabs.setTextSize(OSUtilities.dp(15));
                } else {
                    tabs.setTextSize(OSUtilities.dp(13));
                }
                tabs.setOnTabSelectedListener(this);
                tabs.setOnPageChangeListener(this);*/

                /*Typeface font = Typeface.createFromAsset(ApplicationLoader.applicationContext.getAssets(), "Roboto-Bold.ttf");

                tabs.setTypeface(font,Typeface.BOLD);*/

                tabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                    @Override
                    public void onTabSelected(TabLayout.Tab tab) {
                        try {
                            CoordinatorLayout coordinator = (CoordinatorLayout) parentActivity.findViewById(R.id.coordinator);
                            AppBarLayout appbar = (AppBarLayout) parentActivity.findViewById(R.id.AppBarLayout);
                            CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
                            AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
                            if (tab.getPosition() == 1 || tab.getPosition() == 2 || tab.getPosition() == 3) {
                                behavior.onNestedFling(coordinator, appbar, null, 0, -1000, true);

                            }
                        } catch (Exception ex) {
                            ex.printStackTrace();
                        }

                    }

                    @Override
                    public void onTabUnselected(TabLayout.Tab tab) {

                    }

                    @Override
                    public void onTabReselected(TabLayout.Tab tab) {

                    }
                });

                pager = (ViewPager) fragmentView.findViewById(R.id.pager);
                pager.setOffscreenPageLimit(4);
                //pager.setAnimationCacheEnabled(true);
                //  pager.setPersistentDrawingCache(ViewGroup.PERSISTENT_SCROLLING_CACHE);
                //pager.setAlwaysDrawnWithCacheEnabled(true);
                // pager.setPageTransformer(true, new bgPageTransformer());
                // pager.setOnPageChangeListener(this);


                //Typeface font =Typeface.create("Roboto",Typeface.BOLD);
                adapter = new MyPagerAdapter(parentActivity.getSupportFragmentManager());
                tabs.setTabsFromPagerAdapter(adapter);

                pager.setAdapter(adapter);
                pager.setCurrentItem(1);

                final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, getResources()
                        .getDisplayMetrics());

                pager.setPageMargin(pageMargin);

                tabs.setupWithViewPager(pager);

                /* try {
                    Field mScroller;
                    mScroller = ViewPager.class.getDeclaredField("mScroller");
                    mScroller.setAccessible(true);
                    Interpolator sInterpolator = new DecelerateInterpolator();
                    FixedSpeedScroller scroller = new FixedSpeedScroller(pager.getContext(), sInterpolator);
                    // scroller.setFixedDuration(5000);
                    mScroller.set(pager, scroller);
                } catch (NoSuchFieldException e) {
                } catch (IllegalArgumentException e) {
                } catch (IllegalAccessException e) {
                }
                */

                int unreadMsgs = MessagesStorage.getInstance().getUnreadUpdatesCount();
                unreadCount = (TextView) fragmentView.findViewById(R.id.unreadCount);

                if (unreadMsgs > 0) {
                    unreadCount.setText(unreadMsgs + "");
                    unreadCount.setVisibility(View.VISIBLE);
                    // tabs.setUnreadIconVisibility(View.VISIBLE, 1);
                } else {
                    unreadCount.setVisibility(View.GONE);
                }

            } else {
                ViewGroup parent = (ViewGroup) fragmentView.getParent();
                if (parent != null) {
                    parent.removeView(fragmentView);
                }
            }

            // containerView = findViewById(R.id.container);
            //statusText = (TextView)statusView.findViewById(R.id.status_text);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return fragmentView;

    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        try {
            super.onSaveInstanceState(outState);
        } catch (Exception e) {
            FileLog.e("yahala", e);
        }
    }

    @Override
    public void didReceivedNotification(int id, Object... args) {
        if (id == XMPPManager.updateInterfaces) {
            try {

                int unreadMsgs = MessagesStorage.getInstance().getUnreadUpdatesCount();
                if (unreadMsgs > 0) {
                    unreadCount.setText(unreadMsgs + "");
                    unreadCount.setVisibility(View.VISIBLE);
                    // tabs.setUnreadIconVisibility(View.VISIBLE, 1);
                } else {
                    unreadCount.setVisibility(View.GONE);
                }

              /*  if (MessagesStorage.getInstance().getUnreadUpdatesCount() > 0) {
                   // tabs.setUnreadIconVisibility(View.VISIBLE, 1);
                } else {
                  //  tabs.setUnreadIconVisibility(View.GONE, 1);
                }*/
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void applySelfActionBar() {
        try {
            if (parentActivity == null) {
                return;
            }
            final ActionBar actionBar = parentActivity.getSupportActionBar();
            //  actionBar.hide();
            //ImageView view = (ImageView) fragmentView.findViewById(16908332);
            // if (view == null) {
            ImageView view = (ImageView) fragmentView.findViewById(R.id.home);
            // }
            if (view != null) {
                view.setPadding(OSUtilities.dp(6), 0, OSUtilities.dp(6), 0);
            }
            actionBar.setDisplayShowTitleEnabled(true);
            actionBar.setDisplayShowHomeEnabled(true);
            actionBar.setDisplayHomeAsUpEnabled(false);
            actionBar.setDisplayUseLogoEnabled(false);

            actionBar.setCustomView(null);
            actionBar.setSubtitle(null);
            actionBar.setTitle(LocaleController.getString("AppName", R.string.AppName));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        // FileLog.e("setOnPageChangeListener","position:"+position+"  positionOffset:" + positionOffset);
        // fragmentView.setAlpha(1 - position);
        // background_view.setAlpha(1);


        if (LocaleController.isRTL) {
            if (position == 1) {

                background_view.setAlpha(positionOffset);
                CurrentAlpha = positionOffset;
                //  FileLog.e("setOnPageChangeListener position == 1",position+" CurrentAlpha:"+CurrentAlpha);
            } else if (position == 0 && CurrentAlpha > 0.5F) {
                background_view.setAlpha(0);
                CurrentAlpha = positionOffset;
                //   FileLog.e("setOnPageChangeListener position == 0",position +"CurrentAlpha:"+CurrentAlpha);
            } else if (position == 2 && CurrentAlpha > 0.5F) {
                background_view.setAlpha(0);
                CurrentAlpha = 0;
                //  FileLog.e("setOnPageChangeListener position == 2",position + "CurrentAlpha:"+CurrentAlpha);
            }
        } else {
            if (position == 0) {
                //FileLog.e("setOnPageChangeListener","position:"+(1 - positionOffset));
                background_view.setAlpha(1 - positionOffset);
                CurrentAlpha = 1 - positionOffset;
            } else if (position == 1 /*&& CurrentAlpha > 0.50F*/) {
                background_view.setAlpha(0);
                //FileLog.e("setOnPageChangeListener","ALPHA:"+(1 - positionOffset));
                // background_view.setAlpha(1 - positionOffset);
                //CurrentAlpha = 1 - positionOffset;
                CurrentAlpha = 0;

            } else if (position == 2 /*&& CurrentAlpha > 0.50F*/) {
                //FileLog.e("setOnPageChangeListener","position:"+(CurrentAlpha));

                background_view.setAlpha(0);
                CurrentAlpha = 0;

            } else if (position == 3) {

            }
        }
    }


    @Override
    public void onPageSelected(int position) {
        //   FileLog.e("setOnPageChangeListener","position:" + position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {
         /*if(state==ViewPager.SCROLL_STATE_IDLE){
           if(pager.getCurrentItem()==INDEX_OF_ANIMATED_VIEW){
                pager.setOffscreenPageLimit(1);
            }else{
                pager.setOffscreenPageLimit(OLD_PAGE_LENGTH);
            }
        }*/
    }

    @Override
    public void needFinish() { //Utilities.unlockOrientation(getParentActivity());
        dialog.hide();
    }

    @Override
    public void onPasswordComplete(ArrayList<String> photos) {

    }


    @Override
    public void onContinueClicked() {

    }

    public class MyPagerAdapter extends FragmentPagerAdapter /*implements PagerSlidingTabStripEmoji.IconTabProvider */ {

        private String[] TITLES;
        private int[] Icons;

        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
            //  Configuration config = getResources().getConfiguration();
            //FileLog.e("config.getLayoutDirection()",View.LAYOUT_DIRECTION_RTL+"");
            // FileLog.e("config.getLayoutDirection()", config.getLayoutDirection()+"");
         /*   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                getWindow().getDecorView().setLayoutDirection(
                        View.LAYOUT_DIRECTION_RTL);
            }*/
            // if(config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
            if (LocaleController.isRTL) {
                TITLES = new String[]{/*LocaleController.getString("Settings", R.string.Settings),*/
                        LocaleController.getString("Contacts", R.string.Contacts),
                        LocaleController.getString("Chats", R.string.Chats),
                        LocaleController.getString("Updates", R.string.Updates)};
                Icons = new int[]{R.drawable.ic_main_settings, R.drawable.ic_main_users, R.drawable.ic_main_conversation, R.drawable.ic_updates_unselected};

            } else {
                TITLES = new String[]{LocaleController.getString("Updates", R.string.Updates),
                        LocaleController.getString("Chats", R.string.Chats),
                        LocaleController.getString("Contacts", R.string.Contacts)/*,
                        LocaleController.getString("Settings", R.string.Settings)*/};
                Icons = new int[]{R.drawable.ic_main_updates, R.drawable.ic_main_conversation, R.drawable.ic_main_users, R.drawable.ic_main_settings};
            }
        }

        /*
            @Override
            public CharSequence getPageTitle(int position) {
                return TITLES[position];
            }
        */

        @Override
        public int getCount() {
            return TITLES.length;
        }


        @Override
        public Fragment getItem(int position) {
            //Configuration config = getResources().getConfiguration();

            // if(config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
            if (LocaleController.isRTL) {
                switch (position) {
                   /* case 0:
                        // Top Rated fragment activity

                        BaseFragment fragment4 = new SettingsActivity();
                        fragment4.onFragmentCreate();

                        return fragment4;*/
                    case 0:
                        // Movies fragment activity
                        BaseFragment fragment3 = new ContactsActivity();
                        fragment3.onFragmentCreate();
                        return fragment3;
                    case 1:
                        // Games fragment activity
                        BaseFragment fragment2 = new ChatsActivity();
                        fragment2.onFragmentCreate();
                        return fragment2;

                    case 2:
                        // Top Rated fragment activity

                        BaseFragment fragment = new UpdatesActivity();
                        fragment.onFragmentCreate();

                        return fragment;


                }
            } else {
                switch (position) {
                    case 0:
                        // Top Rated fragment activity

                        BaseFragment fragment = new UpdatesActivity();
                        fragment.onFragmentCreate();
                        //  fragment.applySelfActionBar();
                        return fragment;
                    case 1:
                        // Games fragment activity
                        BaseFragment fragment2 = new ChatsActivity();
                        fragment2.onFragmentCreate();
                        return fragment2;
                    case 2:
                        // Movies fragment activity
                        BaseFragment fragment3 = new ContactsActivity();
                        fragment3.onFragmentCreate();
                        return fragment3;
                    /*case 3:
                        // Top Rated fragment activity

                        BaseFragment fragment4 = new SettingsActivity();
                        fragment4.onFragmentCreate();

                        return fragment4;*/
                }
            }
            return null;
            //return CardFragment.newInstance(position);
        }

        @Override
        public String getPageTitle(int position) {
            return TITLES[position];
        }
        /*@Override
        public int getPageIconResId(int position) {
            return Icons[position];
        }*/
    }


    @Override
    public void onResume() {
        super.onResume();
        final ActionBar actionBar = parentActivity.getSupportActionBar();

        parentActivity.setSupportActionBar(mToolbar);
        // ((LaunchActivity) parentActivity).updateActionBar();
        //// actionBar.hide();
    }

    public class DepthPageTransformer implements ViewPager.PageTransformer {
        private static final float MIN_SCALE = 0.93f;

        public void transformPage(View view, float position) {
            int pageWidth = view.getWidth();

            if (position < -1) { // [-Infinity,-1)
                // This page is way off-screen to the left.
                view.setAlpha(0);

            } else if (position <= 0) { // [-1,0]
                // Use the default slide transition when moving to the left page
                view.setAlpha(1);
                view.setTranslationX(0);
                view.setScaleX(1);
                view.setScaleY(1);

            } else if (position <= 1) { // (0,1]
                // Fade the page out.
                view.setAlpha(1 - position);

                // Counteract the default slide transition
                view.setTranslationX(pageWidth * -position);

                // Scale the page down (between MIN_SCALE and 1)
                float scaleFactor = MIN_SCALE
                        + (1 - MIN_SCALE) * (1 - Math.abs(position));
                view.setScaleX(scaleFactor);
                view.setScaleY(scaleFactor);

            } else { // (1,+Infinity]
                // This page is way off-screen to the right.
                view.setAlpha(0);
            }
        }
    }

    public class bgPageTransformer implements ViewPager.PageTransformer {
        private static final float MIN_SCALE = 0.94f;
        private static final float MIN_ALPHA = 0.7f;
        private boolean animating = false;

        public void transformPage(View view, float position) {
            int pageWidth = view.getWidth();
            int pageHeight = view.getHeight();

           /* if (position >= 1) {

                background_view.setAlpha(1 * position);
                //fragmentView.setBackgroundColor(0xFFcecece);
            }else{
                background_view.setAlpha(0);
                //fragmentView.setBackgroundColor(0xFFffffff);

            }*/
            if (position < -1) { // [-Infinity,-1)
                // This page is way off-screen to the left.
                view.setAlpha(0);

            } else if (position <= 1) { // [-1,1]
                // Modify the default slide transition to shrink the page as well
                float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
                float vertMargin = pageHeight * (1 - scaleFactor) / 2;
                float horzMargin = pageWidth * (1 - scaleFactor) / 2;
                if (position < 0) {
                    view.setTranslationX(horzMargin - vertMargin / 2);
                } else {
                    view.setTranslationX(-horzMargin + vertMargin / 2);
                }

                // Scale the page down (between MIN_SCALE and 1)
                view.setScaleX(scaleFactor);
                view.setScaleY(scaleFactor);

                // Fade the page relative to its size.

                view.setAlpha(MIN_ALPHA +
                        (scaleFactor - MIN_SCALE) /
                                (1 - MIN_SCALE) * (1 - MIN_ALPHA));

            } else { // (1,+Infinity]
                // This page is way off-screen to the right.
                view.setAlpha(0);
            }
        }
    }

    public class FixedSpeedScroller extends Scroller {

        private int mDuration = 200;

        public FixedSpeedScroller(Context context) {
            super(context);
        }

        public FixedSpeedScroller(Context context, Interpolator interpolator) {
            super(context, interpolator);
        }

        public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {
            super(context, interpolator, flywheel);
        }


        @Override
        public void startScroll(int startX, int startY, int dx, int dy, int duration) {
            // Ignore received duration, use fixed one instead
            super.startScroll(startX, startY, dx, dy, mDuration);
        }

        @Override
        public void startScroll(int startX, int startY, int dx, int dy) {
            // Ignore received duration, use fixed one instead
            super.startScroll(startX, startY, dx, dy, mDuration);
        }
    }


}