1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5 * except in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the 10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11 * KIND, either express or implied. See the License for the specific language governing 12 * permissions and limitations under the License. 13 */ 14 15 package com.android.settings.datausage; 16 17 import android.content.Context; 18 import android.util.AttributeSet; 19 import android.view.View; 20 import android.widget.AdapterView; 21 import android.widget.Spinner; 22 23 import androidx.annotation.Nullable; 24 import androidx.preference.Preference; 25 import androidx.preference.PreferenceViewHolder; 26 27 import com.android.settings.R; 28 29 public class SpinnerPreference extends Preference implements CycleAdapter.SpinnerInterface { 30 31 private CycleAdapter mAdapter; 32 @Nullable 33 private AdapterView.OnItemSelectedListener mListener; 34 private Object mCurrentObject; 35 private int mPosition; 36 private View mItemView; 37 private boolean mItemViewVisible = false; 38 SpinnerPreference(Context context, AttributeSet attrs)39 public SpinnerPreference(Context context, AttributeSet attrs) { 40 super(context, attrs); 41 setLayoutResource(R.layout.data_usage_cycles); 42 } 43 44 @Override setAdapter(CycleAdapter cycleAdapter)45 public void setAdapter(CycleAdapter cycleAdapter) { 46 mAdapter = cycleAdapter; 47 notifyChanged(); 48 } 49 setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener)50 public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener) { 51 mListener = listener; 52 } 53 54 @Override getSelectedItem()55 public Object getSelectedItem() { 56 return mCurrentObject; 57 } 58 59 @Override setSelection(int position)60 public void setSelection(int position) { 61 mPosition = position; 62 mCurrentObject = mAdapter.getItem(mPosition); 63 notifyChanged(); 64 } 65 66 @Override onBindViewHolder(PreferenceViewHolder holder)67 public void onBindViewHolder(PreferenceViewHolder holder) { 68 super.onBindViewHolder(holder); 69 mItemView = holder.itemView; 70 mItemView.setVisibility(mItemViewVisible ? View.VISIBLE : View.INVISIBLE); 71 Spinner spinner = (Spinner) holder.findViewById(R.id.cycles_spinner); 72 spinner.setAdapter(mAdapter); 73 spinner.setSelection(mPosition); 74 spinner.setOnItemSelectedListener(mOnSelectedListener); 75 } 76 setHasCycles(boolean hasData)77 void setHasCycles(boolean hasData) { 78 setVisible(hasData); 79 if (hasData) { 80 mItemViewVisible = true; 81 if (mItemView != null) { 82 mItemView.setVisibility(View.VISIBLE); 83 } 84 } 85 } 86 87 @Override performClick(View view)88 protected void performClick(View view) { 89 view.findViewById(R.id.cycles_spinner).performClick(); 90 } 91 92 private final AdapterView.OnItemSelectedListener mOnSelectedListener = 93 new AdapterView.OnItemSelectedListener() { 94 @Override 95 public void onItemSelected( 96 AdapterView<?> parent, View view, int position, long id) { 97 mPosition = position; 98 mCurrentObject = mAdapter.getItem(position); 99 if (mListener != null) { 100 mListener.onItemSelected(parent, view, position, id); 101 } 102 } 103 104 @Override 105 public void onNothingSelected(AdapterView<?> parent) { 106 if (mListener != null) { 107 mListener.onNothingSelected(parent); 108 } 109 } 110 }; 111 } 112