Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29fe4970 authored by Josh Guilfoyle's avatar Josh Guilfoyle
Browse files

Added simple Filmstrip widget which will eventually be made red-line compliant.

parent 5b124222
Loading
Loading
Loading
Loading
+123 −0
Original line number Diff line number Diff line
package com.tmobile.widget;

import com.android.internal.R;

import android.content.Context;
import android.content.res.TypedArray;
import android.database.DataSetObserver;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.SpinnerAdapter;

public class Filmstrip extends Gallery {
    private Drawable mSelector;

    public Filmstrip(Context context) {
        this(context, null);
    }

    public Filmstrip(Context context, AttributeSet attrs) {
        this(context, attrs, R.attr.filmstripStyle);
    }

    public Filmstrip(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        TypedArray a = context.obtainStyledAttributes(attrs,
                R.styleable.AbsListView, defStyle, 0);

        Drawable selector = a.getDrawableWithContext(context, R.styleable.AbsListView_listSelector);
        if (selector != null) {
            setSelector(selector);
        }

        a.recycle();
    }

    public void setSelector(Drawable selector) {
        if (mSelector != selector) {
            if (mSelector == null) {
                if (getAdapter() != null) {
                    throw new UnsupportedOperationException("Cannot currently set selector after an adapter has been assigned.  Please fix.");
                }
            }
            mSelector = selector;
            requestLayout();
        }
    }

    @Override
    public void setAdapter(SpinnerAdapter adapter) {
        if (mSelector != null && adapter != null) {
            super.setAdapter(new FilmstripAdapter(adapter));
        } else {
            super.setAdapter(adapter);
        }
    }

    private class FilmstripAdapter extends BaseAdapter {
        private final SpinnerAdapter mBase;

        public FilmstripAdapter(SpinnerAdapter adapter) {
            mBase = adapter;
        }
        
        SpinnerAdapter getBaseAdapter() {
            return mBase;
        }

        public int getCount() {
            return mBase.getCount();
        }

        public Object getItem(int position) {
            return mBase.getItem(position);
        }

        public long getItemId(int position) {
            return mBase.getItemId(position);
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            View view = mBase.getView(position, convertView, parent);

            if (convertView == null && view.getBackground() == null && mSelector != null) {
                view.setBackgroundDrawable(mSelector);
            }

            return view; 
        }

        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            return mBase.getDropDownView(position, convertView, parent);
        }

        public int getItemViewType(int position) {
            return mBase.getItemViewType(position);
        }

        public int getViewTypeCount() {
            return mBase.getViewTypeCount();
        }

        public boolean hasStableIds() {
            return mBase.hasStableIds();
        }

        public boolean isEmpty() {
            return mBase.isEmpty();
        }

        public void registerDataSetObserver(DataSetObserver observer) {
            mBase.registerDataSetObserver(observer);
        }

        public void unregisterDataSetObserver(DataSetObserver observer) {
            mBase.unregisterDataSetObserver(observer);
        }
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -358,8 +358,10 @@
        <attr name="horizontalScrollViewStyle" format="reference" />
        <!-- Default Spinner style. -->
        <attr name="spinnerStyle" format="reference" />
        <!-- Default carouselWidget style. -->
        <!-- Default CarouselWidget style. -->
        <attr name="carouselWidgetStyle" format="reference" />
        <!-- Default Filmstrip style. -->
        <attr name="filmstripStyle" format="reference" />
        <!-- Default Star style. -->
        <attr name="starStyle" format="reference" />
        <!-- Default TabWidget style. -->
+4 −0
Original line number Diff line number Diff line
@@ -385,6 +385,10 @@
        <item name="android:frameSelectedBackground">@color/black</item>
    </style>

    <style name="Widget.Filmstrip" parent="Widget.Gallery">
        <item name="android:spacing">0px</item>
    </style>

    <style name="Widget.TextView.PopupMenu">
        <item name="android:clickable">true</item>
        <item name="android:textAppearance">@style/TextAppearance.Widget.TextView.PopupMenu</item>
+1 −0
Original line number Diff line number Diff line
@@ -157,6 +157,7 @@
        <item name="horizontalScrollViewStyle">@android:style/Widget.HorizontalScrollView</item>
        <item name="spinnerStyle">@android:style/Widget.Spinner</item>
        <item name="carouselWidgetStyle">@android:style/Widget.CarouselWidget</item>
        <item name="filmstripStyle">@android:style/Widget.Filmstrip</item>
        <item name="starStyle">@android:style/Widget.CompoundButton.Star</item>
        <item name="tabWidgetStyle">@android:style/Widget.TabWidget</item>
        <item name="textViewStyle">@android:style/Widget.TextView</item>