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.annotation.Nullable; 18 import android.content.Context; 19 import android.util.AttributeSet; 20 import android.view.View; 21 import android.widget.AdapterView; 22 import android.widget.Spinner; 23 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 50 @Override setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener)51 public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener) { 52 mListener = listener; 53 } 54 55 @Override getSelectedItem()56 public Object getSelectedItem() { 57 return mCurrentObject; 58 } 59 60 @Override setSelection(int position)61 public void setSelection(int position) { 62 mPosition = position; 63 mCurrentObject = mAdapter.getItem(mPosition); 64 notifyChanged(); 65 } 66 67 @Override onBindViewHolder(PreferenceViewHolder holder)68 public void onBindViewHolder(PreferenceViewHolder holder) { 69 super.onBindViewHolder(holder); 70 mItemView = holder.itemView; 71 mItemView.setVisibility(mItemViewVisible ? View.VISIBLE : View.INVISIBLE); 72 Spinner spinner = (Spinner) holder.findViewById(R.id.cycles_spinner); 73 spinner.setAdapter(mAdapter); 74 spinner.setSelection(mPosition); 75 spinner.setOnItemSelectedListener(mOnSelectedListener); 76 } 77 setHasCycles(boolean hasData)78 void setHasCycles(boolean hasData) { 79 setVisible(hasData); 80 if (hasData) { 81 mItemViewVisible = true; 82 if (mItemView != null) { 83 mItemView.setVisibility(View.VISIBLE); 84 } 85 } 86 } 87 88 @Override performClick(View view)89 protected void performClick(View view) { 90 view.findViewById(R.id.cycles_spinner).performClick(); 91 } 92 93 private final AdapterView.OnItemSelectedListener mOnSelectedListener = 94 new AdapterView.OnItemSelectedListener() { 95 @Override 96 public void onItemSelected( 97 AdapterView<?> parent, View view, int position, long id) { 98 if (mPosition == position) return; 99 mPosition = position; 100 mCurrentObject = mAdapter.getItem(position); 101 if (mListener != null) { 102 mListener.onItemSelected(parent, view, position, id); 103 } 104 } 105 106 @Override 107 public void onNothingSelected(AdapterView<?> parent) { 108 if (mListener != null) { 109 mListener.onNothingSelected(parent); 110 } 111 } 112 }; 113 } 114