/* * Copyright (C) 2014 The CyanogenMod Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.cyanogenmod.wallpapers.photophase.adapters; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import org.cyanogenmod.wallpapers.photophase.R; import org.cyanogenmod.wallpapers.photophase.model.Dispositions; import org.cyanogenmod.wallpapers.photophase.widgets.DispositionView; import org.cyanogenmod.wallpapers.photophase.widgets.DispositionView.OnFrameSelectedListener; import org.cyanogenmod.wallpapers.photophase.widgets.ResizeFrame; import java.util.List; /** * An {@link PagerAdapter} implementation for display all current templates */ public class DispositionAdapter extends PagerAdapter { final List mDispositions; private final ResizeFrame mResizeFrame; private final OnFrameSelectedListener mCallback; private final SparseArray mCurrentViews; private LayoutInflater mInflater; boolean mFirstAnimation; /** * Constructor of DispositionAdapter. * * @param ctx The current context * @param dispositions An array with all dispositions * @param resizeFrame The resize frame * @param callback The callback where return selection events */ public DispositionAdapter(Context ctx, List dispositions, ResizeFrame resizeFrame, OnFrameSelectedListener callback) { super(); mDispositions = dispositions; mResizeFrame = resizeFrame; mCallback = callback; mFirstAnimation = true; mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mCurrentViews = new SparseArray(); } /** * {@inheritDoc} */ @Override public int getCount() { return mDispositions.size(); } /** * {@inheritDoc} */ @Override public Object instantiateItem(ViewGroup container, final int position) { final DispositionView view = (DispositionView)mInflater.inflate( R.layout.disposition_view, null); if (position == 0) { view.setResizeFrame(mResizeFrame); view.setOnFrameSelectedListener(mCallback); } view.post(new Runnable() { @Override public void run() { view.setDispositions(mDispositions.get(position), position == 0 && mFirstAnimation); mFirstAnimation = false; } }); ((ViewPager)container).addView(view, 0); mCurrentViews.put(position, view); return view; } /** * {@inheritDoc} */ @Override public void destroyItem(ViewGroup container, int position, Object object) { mCurrentViews.remove(position); ((ViewPager)container).removeView((View)object); } /** * Method that returns the current view * * @param position The position of the item to return * @return DispositionView The view or null if is not instance */ public DispositionView getView(int position) { return mCurrentViews.get(position); } /** * {@inheritDoc} */ @Override public boolean isViewFromObject(View view, Object object) { return view == ((View)object) || view == mResizeFrame; } }