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

Commit 3c8e3a96 authored by Alan Viverette's avatar Alan Viverette Committed by Android (Google) Code Review
Browse files

Merge "Add popup theme for Spinner, use for actionBarPopupTheme default"

parents 3355414b b9ead4a9
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -32351,6 +32351,7 @@ package android.view {
  public class ContextThemeWrapper extends android.content.ContextWrapper {
    ctor public ContextThemeWrapper();
    ctor public ContextThemeWrapper(android.content.Context, int);
    ctor public ContextThemeWrapper(android.content.Context, android.content.res.Resources.Theme);
    method public void applyOverrideConfiguration(android.content.res.Configuration);
    method protected void onApplyThemeResource(android.content.res.Resources.Theme, int, boolean);
  }
@@ -37210,7 +37211,7 @@ package android.widget {
    ctor public AnalogClock(android.content.Context, android.util.AttributeSet, int, int);
  }
  public class ArrayAdapter extends android.widget.BaseAdapter implements android.widget.Filterable {
  public class ArrayAdapter extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.Spinner.ThemedSpinnerAdapter {
    ctor public ArrayAdapter(android.content.Context, int);
    ctor public ArrayAdapter(android.content.Context, int, int);
    ctor public ArrayAdapter(android.content.Context, int, T[]);
@@ -37224,6 +37225,7 @@ package android.widget {
    method public static android.widget.ArrayAdapter<java.lang.CharSequence> createFromResource(android.content.Context, int, int);
    method public android.content.Context getContext();
    method public int getCount();
    method public android.content.res.Resources.Theme getDropDownViewTheme();
    method public android.widget.Filter getFilter();
    method public T getItem(int);
    method public long getItemId(int);
@@ -37232,6 +37234,7 @@ package android.widget {
    method public void insert(T, int);
    method public void remove(T);
    method public void setDropDownViewResource(int);
    method public void setDropDownViewTheme(android.content.res.Resources.Theme);
    method public void setNotifyOnChange(boolean);
    method public void sort(java.util.Comparator<? super T>);
  }
@@ -37448,7 +37451,7 @@ package android.widget {
    method public abstract void onCheckedChanged(android.widget.CompoundButton, boolean);
  }
  public abstract class CursorAdapter extends android.widget.BaseAdapter implements android.widget.Filterable {
  public abstract class CursorAdapter extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.Spinner.ThemedSpinnerAdapter {
    ctor public deprecated CursorAdapter(android.content.Context, android.database.Cursor);
    ctor public CursorAdapter(android.content.Context, android.database.Cursor, boolean);
    ctor public CursorAdapter(android.content.Context, android.database.Cursor, int);
@@ -37457,6 +37460,7 @@ package android.widget {
    method public java.lang.CharSequence convertToString(android.database.Cursor);
    method public int getCount();
    method public android.database.Cursor getCursor();
    method public android.content.res.Resources.Theme getDropDownViewTheme();
    method public android.widget.Filter getFilter();
    method public android.widget.FilterQueryProvider getFilterQueryProvider();
    method public java.lang.Object getItem(int);
@@ -37467,6 +37471,7 @@ package android.widget {
    method public abstract android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
    method protected void onContentChanged();
    method public android.database.Cursor runQueryOnBackgroundThread(java.lang.CharSequence);
    method public void setDropDownViewTheme(android.content.res.Resources.Theme);
    method public void setFilterQueryProvider(android.widget.FilterQueryProvider);
    method public android.database.Cursor swapCursor(android.database.Cursor);
    field public static final deprecated int FLAG_AUTO_REQUERY = 1; // 0x1
@@ -38709,15 +38714,17 @@ package android.widget {
    method public abstract boolean onShareTargetSelected(android.widget.ShareActionProvider, android.content.Intent);
  }
  public class SimpleAdapter extends android.widget.BaseAdapter implements android.widget.Filterable {
  public class SimpleAdapter extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.Spinner.ThemedSpinnerAdapter {
    ctor public SimpleAdapter(android.content.Context, java.util.List<? extends java.util.Map<java.lang.String, ?>>, int, java.lang.String[], int[]);
    method public int getCount();
    method public android.content.res.Resources.Theme getDropDownViewTheme();
    method public android.widget.Filter getFilter();
    method public java.lang.Object getItem(int);
    method public long getItemId(int);
    method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
    method public android.widget.SimpleAdapter.ViewBinder getViewBinder();
    method public void setDropDownViewResource(int);
    method public void setDropDownViewTheme(android.content.res.Resources.Theme);
    method public void setViewBinder(android.widget.SimpleAdapter.ViewBinder);
    method public void setViewImage(android.widget.ImageView, int);
    method public void setViewImage(android.widget.ImageView, java.lang.String);
@@ -38841,6 +38848,7 @@ package android.widget {
    method public int getDropDownWidth();
    method public int getGravity();
    method public android.graphics.drawable.Drawable getPopupBackground();
    method public android.content.Context getPopupContext();
    method public java.lang.CharSequence getPrompt();
    method public void onClick(android.content.DialogInterface, int);
    method public void setDropDownHorizontalOffset(int);
@@ -38849,12 +38857,18 @@ package android.widget {
    method public void setGravity(int);
    method public void setPopupBackgroundDrawable(android.graphics.drawable.Drawable);
    method public void setPopupBackgroundResource(int);
    method public void setPopupContext(android.content.Context);
    method public void setPrompt(java.lang.CharSequence);
    method public void setPromptId(int);
    field public static final int MODE_DIALOG = 0; // 0x0
    field public static final int MODE_DROPDOWN = 1; // 0x1
  }
  public static abstract interface Spinner.ThemedSpinnerAdapter {
    method public abstract android.content.res.Resources.Theme getDropDownViewTheme();
    method public abstract void setDropDownViewTheme(android.content.res.Resources.Theme);
  }
  public abstract interface SpinnerAdapter implements android.widget.Adapter {
    method public abstract android.view.View getDropDownView(int, android.view.View, android.view.ViewGroup);
  }
+10 −4
Original line number Diff line number Diff line
@@ -36,12 +36,18 @@ public class ContextThemeWrapper extends ContextWrapper {
        super(null);
    }

    public ContextThemeWrapper(Context base, int themeres) {
    public ContextThemeWrapper(Context base, int themeResId) {
        super(base);
        mThemeResource = themeres;
        mThemeResource = themeResId;
    }

    @Override protected void attachBaseContext(Context newBase) {
    public ContextThemeWrapper(Context base, Resources.Theme theme) {
        super(base);
        mTheme = theme;
    }

    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(newBase);
    }

+51 −20
Original line number Diff line number Diff line
@@ -17,7 +17,9 @@
package android.widget;

import android.content.Context;
import android.content.res.Resources;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -44,7 +46,8 @@ import java.util.List;
 * or to have some of data besides toString() results fill the views,
 * override {@link #getView(int, View, ViewGroup)} to return the type of view you want.
 */
public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
public class ArrayAdapter<T> extends BaseAdapter implements Filterable,
        Spinner.ThemedSpinnerAdapter {
    /**
     * Contains the list of objects that represent the data of this ArrayAdapter.
     * The content of this list is referred to as "the array" in the documentation.
@@ -93,6 +96,9 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {

    private LayoutInflater mInflater;

    /** Layout inflater used for {@link #getDropDownView(int, View, ViewGroup)}. */
    private LayoutInflater mDropDownInflater;

    /**
     * Constructor
     *
@@ -101,7 +107,7 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
     *                 instantiating views.
     */
    public ArrayAdapter(Context context, int resource) {
        init(context, resource, 0, new ArrayList<T>());
        this(context, resource, 0, new ArrayList<T>());
    }

    /**
@@ -113,7 +119,7 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
     * @param textViewResourceId The id of the TextView within the layout resource to be populated
     */
    public ArrayAdapter(Context context, int resource, int textViewResourceId) {
        init(context, resource, textViewResourceId, new ArrayList<T>());
        this(context, resource, textViewResourceId, new ArrayList<T>());
    }

    /**
@@ -125,7 +131,7 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
     * @param objects The objects to represent in the ListView.
     */
    public ArrayAdapter(Context context, int resource, T[] objects) {
        init(context, resource, 0, Arrays.asList(objects));
        this(context, resource, 0, Arrays.asList(objects));
    }

    /**
@@ -138,7 +144,7 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
     * @param objects The objects to represent in the ListView.
     */
    public ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) {
        init(context, resource, textViewResourceId, Arrays.asList(objects));
        this(context, resource, textViewResourceId, Arrays.asList(objects));
    }

    /**
@@ -150,7 +156,7 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
     * @param objects The objects to represent in the ListView.
     */
    public ArrayAdapter(Context context, int resource, List<T> objects) {
        init(context, resource, 0, objects);
        this(context, resource, 0, objects);
    }

    /**
@@ -163,7 +169,11 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
     * @param objects The objects to represent in the ListView.
     */
    public ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) {
        init(context, resource, textViewResourceId, objects);
        mContext = context;
        mInflater = LayoutInflater.from(context);
        mResource = mDropDownResource = resource;
        mObjects = objects;
        mFieldId = textViewResourceId;
    }

    /**
@@ -305,14 +315,6 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
        mNotifyOnChange = notifyOnChange;
    }

    private void init(Context context, int resource, int textViewResourceId, List<T> objects) {
        mContext = context;
        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mResource = mDropDownResource = resource;
        mObjects = objects;
        mFieldId = textViewResourceId;
    }

    /**
     * Returns the context associated with this array adapter. The context is used
     * to create views from the resource passed to the constructor.
@@ -359,16 +361,16 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
     * {@inheritDoc}
     */
    public View getView(int position, View convertView, ViewGroup parent) {
        return createViewFromResource(position, convertView, parent, mResource);
        return createViewFromResource(mInflater, position, convertView, parent, mResource);
    }

    private View createViewFromResource(int position, View convertView, ViewGroup parent,
            int resource) {
    private View createViewFromResource(LayoutInflater inflater, int position, View convertView,
            ViewGroup parent, int resource) {
        View view;
        TextView text;

        if (convertView == null) {
            view = mInflater.inflate(resource, parent, false);
            view = inflater.inflate(resource, parent, false);
        } else {
            view = convertView;
        }
@@ -407,12 +409,41 @@ public class ArrayAdapter<T> extends BaseAdapter implements Filterable {
        this.mDropDownResource = resource;
    }

    /**
     * Sets the {@link Resources.Theme} against which drop-down views are
     * inflated.
     * <p>
     * By default, drop-down views are inflated against the theme of the
     * {@link Context} passed to the adapter's constructor.
     *
     * @param theme the theme against which to inflate drop-down views or
     *              {@code null} to use the theme from the adapter's context
     * @see #getDropDownView(int, View, ViewGroup)
     */
    @Override
    public void setDropDownViewTheme(Resources.Theme theme) {
        if (theme == null) {
            mDropDownInflater = null;
        } else if (theme == mInflater.getContext().getTheme()) {
            mDropDownInflater = mInflater;
        } else {
            final Context context = new ContextThemeWrapper(mContext, theme);
            mDropDownInflater = LayoutInflater.from(context);
        }
    }

    @Override
    public Resources.Theme getDropDownViewTheme() {
        return mDropDownInflater == null ? null : mDropDownInflater.getContext().getTheme();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return createViewFromResource(position, convertView, parent, mDropDownResource);
        final LayoutInflater inflater = mDropDownInflater == null ? mInflater : mDropDownInflater;
        return createViewFromResource(inflater, position, convertView, parent, mDropDownResource);
    }

    /**
+41 −5
Original line number Diff line number Diff line
@@ -17,11 +17,14 @@
package android.widget;

import android.content.Context;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.os.Handler;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

@@ -35,7 +38,7 @@ import android.view.ViewGroup;
 * columns.
 */
public abstract class CursorAdapter extends BaseAdapter implements Filterable,
        CursorFilter.CursorFilterClient {
        CursorFilter.CursorFilterClient, Spinner.ThemedSpinnerAdapter {
    /**
     * This field should be made private, so it is hidden from the SDK.
     * {@hide}
@@ -56,6 +59,11 @@ public abstract class CursorAdapter extends BaseAdapter implements Filterable,
     * {@hide}
     */
    protected Context mContext;
    /**
     * Context used for {@link #getDropDownView(int, View, ViewGroup)}.
     * {@hide}
     */
    protected Context mDropDownContext;
    /**
     * This field should be made private, so it is hidden from the SDK.
     * {@hide}
@@ -184,6 +192,33 @@ public abstract class CursorAdapter extends BaseAdapter implements Filterable,
        }
    }

    /**
     * Sets the {@link Resources.Theme} against which drop-down views are
     * inflated.
     * <p>
     * By default, drop-down views are inflated against the theme of the
     * {@link Context} passed to the adapter's constructor.
     *
     * @param theme the theme against which to inflate drop-down views or
     *              {@code null} to use the theme from the adapter's context
     * @see #newDropDownView(Context, Cursor, ViewGroup)
     */
    @Override
    public void setDropDownViewTheme(Resources.Theme theme) {
        if (theme == null) {
            mDropDownContext = null;
        } else if (theme == mContext.getTheme()) {
            mDropDownContext = mContext;
        } else {
            mDropDownContext = new ContextThemeWrapper(mContext, theme);
        }
    }

    @Override
    public Resources.Theme getDropDownViewTheme() {
        return mDropDownContext == null ? null : mDropDownContext.getTheme();
    }

    /**
     * Returns the cursor.
     * @return the cursor.
@@ -258,14 +293,15 @@ public abstract class CursorAdapter extends BaseAdapter implements Filterable,
    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        if (mDataValid) {
            final Context context = mDropDownContext == null ? mContext : mDropDownContext;
            mCursor.moveToPosition(position);
            View v;
            final View v;
            if (convertView == null) {
                v = newDropDownView(mContext, mCursor, parent);
                v = newDropDownView(context, mCursor, parent);
            } else {
                v = convertView;
            }
            bindView(v, mContext, mCursor);
            bindView(v, context, mCursor);
            return v;
        } else {
            return null;
+36 −5
Original line number Diff line number Diff line
@@ -17,7 +17,9 @@
package android.widget;

import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.view.ContextThemeWrapper;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
@@ -33,6 +35,7 @@ public abstract class ResourceCursorAdapter extends CursorAdapter {
    private int mDropDownLayout;

    private LayoutInflater mInflater;
    private LayoutInflater mDropDownInflater;

    /**
     * Constructor the enables auto-requery.
@@ -52,6 +55,7 @@ public abstract class ResourceCursorAdapter extends CursorAdapter {
        super(context, c);
        mLayout = mDropDownLayout = layout;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mDropDownInflater = mInflater;
    }

    /**
@@ -74,6 +78,7 @@ public abstract class ResourceCursorAdapter extends CursorAdapter {
        super(context, c, autoRequery);
        mLayout = mDropDownLayout = layout;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mDropDownInflater = mInflater;
    }

    /**
@@ -91,6 +96,32 @@ public abstract class ResourceCursorAdapter extends CursorAdapter {
        super(context, c, flags);
        mLayout = mDropDownLayout = layout;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mDropDownInflater = mInflater;
    }

    /**
     * Sets the {@link android.content.res.Resources.Theme} against which drop-down views are
     * inflated.
     * <p>
     * By default, drop-down views are inflated against the theme of the
     * {@link Context} passed to the adapter's constructor.
     *
     * @param theme the theme against which to inflate drop-down views or
     *              {@code null} to use the theme from the adapter's context
     * @see #newDropDownView(Context, Cursor, ViewGroup)
     */
    @Override
    public void setDropDownViewTheme(Resources.Theme theme) {
        super.setDropDownViewTheme(theme);

        if (theme == null) {
            mDropDownInflater = null;
        } else if (theme == mInflater.getContext().getTheme()) {
            mDropDownInflater = mInflater;
        } else {
            final Context context = new ContextThemeWrapper(mContext, theme);
            mDropDownInflater = LayoutInflater.from(context);
        }
    }

    /**
@@ -106,7 +137,7 @@ public abstract class ResourceCursorAdapter extends CursorAdapter {

    @Override
    public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {
        return mInflater.inflate(mDropDownLayout, parent, false);
        return mDropDownInflater.inflate(mDropDownLayout, parent, false);
    }

    /**
Loading