Java tutorial
/* * Odoo, Open Source Management Solution * Copyright (C) 2012-today Odoo SA (<http:www.odoo.com>) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http:www.gnu.org/licenses/> * */ package odoo.controls; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.odoo.R; import com.odoo.orm.OColumn; import com.odoo.orm.ODataRow; import com.odoo.orm.OModel; import com.odoo.support.fragment.BaseFragment; import com.odoo.util.drawer.DrawerItem; /** * The Class OViewPager. */ public class OViewPager extends ViewPager implements OViewPagerObjectListener { /** The Constant TAG. */ public static final String TAG = OViewPager.class.getSimpleName(); /** The Constant KEY_MODEL_NAME. */ public static final String KEY_MODEL_NAME = "pagger_model_name"; /** The Constant KEY_VIEW_COLUMN. */ public static final String KEY_VIEW_COLUMN = "view_column_name"; /** The Constant KEY_SHOW_TITLE. */ public static final String KEY_SHOW_TITLE = "show_title"; /** The m context. */ private Context mContext = null; /** The m typed array. */ private TypedArray mTypedArray = null; /** The m attr. */ private OControlAttributes mAttr = new OControlAttributes(); /** The m model. */ private OModel mModel = null; /** The m column. */ private OColumn mColumn = null; /** The m on pagger get view. */ private OnPaggerGetView mOnPaggerGetView = null; /** The m objects. */ private List<ODataRow> mObjects = new ArrayList<ODataRow>(); /** The m pagger adapter. */ private PaggerAdapter mPaggerAdapter = null; /** The m zoom out page transformer. */ private ZoomOutPageTransformer mZoomOutPageTransformer = null; /** * Instantiates a new o view pager. * * @param context * the context */ public OViewPager(Context context) { super(context); init(context, null, 0); } /** * Instantiates a new o view pager. * * @param context * the context * @param attrs * the attrs */ public OViewPager(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs, 0); } /** * Inits the. * * @param context * the context * @param attrs * the attrs * @param defStyle * the def style */ private void init(Context context, AttributeSet attrs, int defStyle) { mContext = context; if (attrs != null) { mTypedArray = mContext.obtainStyledAttributes(attrs, R.styleable.OViewPager); initAttributeValues(); mTypedArray.recycle(); } } /** * Inits the attribute values. */ private void initAttributeValues() { mAttr.put(KEY_MODEL_NAME, mTypedArray.getString(R.styleable.OViewPager_pager_model)); String model = mAttr.getString(KEY_MODEL_NAME, null); if (model != null) { mModel = OModel.get(mContext, model); } mAttr.put(KEY_VIEW_COLUMN, mTypedArray.getString(R.styleable.OViewPager_view_column_name)); String column = mAttr.getString(KEY_VIEW_COLUMN, null); if (column != null) mColumn = mModel.getColumn(column); } /** * Inits the pagger. */ private void initPagger() { Log.v(TAG, "initPagger()"); mObjects = mModel.select(); setBackgroundColor(Color.GRAY); mPaggerAdapter = new PaggerAdapter(this, mOnPaggerGetView.getPaggerFragmentManager(), mOnPaggerGetView, this); mZoomOutPageTransformer = new ZoomOutPageTransformer(); setPageTransformer(true, mZoomOutPageTransformer); setAdapter(mPaggerAdapter); } /** * Sets the on pagger get view. * * @param listener * the new on pagger get view */ public void setOnPaggerGetView(OnPaggerGetView listener) { mOnPaggerGetView = listener; initPagger(); } /** * The Class PaggerAdapter. */ class PaggerAdapter extends FragmentStatePagerAdapter { /** The m pagger get view. */ OnPaggerGetView mPaggerGetView = null; /** The m object listener. */ OViewPagerObjectListener mObjectListener = null; /** The m view pagger. */ OViewPager mViewPagger = null; /** * Instantiates a new pagger adapter. * * @param pagger * the pagger * @param fm * the fm * @param view_listener * the view_listener * @param object_listener * the object_listener */ public PaggerAdapter(OViewPager pagger, FragmentManager fm, OnPaggerGetView view_listener, OViewPagerObjectListener object_listener) { super(fm); mViewPagger = pagger; mPaggerGetView = view_listener; mObjectListener = object_listener; } /* * (non-Javadoc) * * @see android.support.v4.view.PagerAdapter#getPageTitle(int) */ @Override public CharSequence getPageTitle(int position) { return mObjectListener.getObject(position).getString(mObjectListener.getColumn().getName()); } /* * (non-Javadoc) * * @see android.support.v4.app.FragmentStatePagerAdapter#getItem(int) */ @Override public Fragment getItem(int position) { ScreenPageFragment fragment = new ScreenPageFragment(mViewPagger, position, mPaggerGetView, mObjectListener); return fragment; } /* * (non-Javadoc) * * @see android.support.v4.view.PagerAdapter#getCount() */ @Override public int getCount() { return mObjectListener.objectCount(); } } /** * The Class ScreenPageFragment. */ public static class ScreenPageFragment extends BaseFragment { /** The m pagger get view. */ OnPaggerGetView mPaggerGetView = null; /** The m object listener. */ OViewPagerObjectListener mObjectListener = null; /** The m position. */ Integer mPosition = -1; /** The m view pagger. */ OViewPager mViewPagger = null; View mView = null; /** * Instantiates a new screen page fragment. */ public ScreenPageFragment() { } /** * Instantiates a new screen page fragment. * * @param pagger * the pagger * @param position * the position * @param view_listener * the view_listener * @param listener * the listener */ public ScreenPageFragment(OViewPager pagger, int position, OnPaggerGetView view_listener, OViewPagerObjectListener listener) { mViewPagger = pagger; mPosition = position; mPaggerGetView = view_listener; mObjectListener = listener; } /* * (non-Javadoc) * * @see * android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater * , android.view.ViewGroup, android.os.Bundle) */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setRetainInstance(true); if (mPaggerGetView != null) { init(); if (mView != null) return mView; } mView = super.onCreateView(inflater, container, savedInstanceState); return mView; } private void init() { mView = mPaggerGetView.paggerGetView(getActivity(), mViewPagger, mObjectListener.getObject(mPosition), mPosition); } @Override public void onResume() { super.onResume(); init(); } /* * (non-Javadoc) * * @see * com.odoo.support.fragment.OModuleHelper#databaseHelper(android.content * .Context) */ @Override public Object databaseHelper(Context context) { return null; } /* * (non-Javadoc) * * @see * com.odoo.support.fragment.OModuleHelper#drawerMenus(android.content * .Context) */ @Override public List<DrawerItem> drawerMenus(Context context) { return null; } } /** * The Class ZoomOutPageTransformer. */ class ZoomOutPageTransformer implements ViewPager.PageTransformer { /** The Constant MIN_SCALE. */ private static final float MIN_SCALE = 0.85f; /** The Constant MIN_ALPHA. */ private static final float MIN_ALPHA = 0.5f; /* * (non-Javadoc) * * @see * android.support.v4.view.ViewPager.PageTransformer#transformPage(android * .view.View, float) */ public void transformPage(View view, float position) { int pageWidth = view.getWidth(); int pageHeight = view.getHeight(); 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); } } } /** * The Interface OnPaggerGetView. */ public interface OnPaggerGetView { /** * Pagger get view. * * @param context * the context * @param view * the view * @param object * the object * @param position * the position * @return the view */ public View paggerGetView(Context context, View view, ODataRow object, int position); /** * Gets the pagger fragment manager. * * @return the pagger fragment manager */ public FragmentManager getPaggerFragmentManager(); } /* * (non-Javadoc) * * @see odoo.controls.OViewPagerObjectListener#getObject(int) */ @Override public ODataRow getObject(int position) { if (position > mObjects.size() - 1) { return null; } return mObjects.get(position); } /* * (non-Javadoc) * * @see odoo.controls.OViewPagerObjectListener#getColumn() */ @Override public OColumn getColumn() { return mColumn; } /* * (non-Javadoc) * * @see odoo.controls.OViewPagerObjectListener#objectCount() */ @Override public int objectCount() { return mObjects.size(); } }