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 import com.android.settingslib.widget.GroupSectionDividerMixin; 29 30 public class SpinnerPreference extends Preference implements CycleAdapter.SpinnerInterface, 31 GroupSectionDividerMixin { 32 33 private CycleAdapter mAdapter; 34 @Nullable 35 private AdapterView.OnItemSelectedListener mListener; 36 private Object mCurrentObject; 37 private int mPosition; 38 private View mItemView; 39 private boolean mItemViewVisible = false; 40 SpinnerPreference(Context context, AttributeSet attrs)41 public SpinnerPreference(Context context, AttributeSet attrs) { 42 super(context, attrs); 43 setLayoutResource(R.layout.data_usage_cycles); 44 } 45 46 @Override setAdapter(CycleAdapter cycleAdapter)47 public void setAdapter(CycleAdapter cycleAdapter) { 48 mAdapter = cycleAdapter; 49 notifyChanged(); 50 } 51 setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener)52 public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener) { 53 mListener = listener; 54 } 55 56 @Override getSelectedItem()57 public Object getSelectedItem() { 58 return mCurrentObject; 59 } 60 61 @Override setSelection(int position)62 public void setSelection(int position) { 63 mPosition = position; 64 mCurrentObject = mAdapter.getItem(mPosition); 65 notifyChanged(); 66 } 67 68 @Override onBindViewHolder(PreferenceViewHolder holder)69 public void onBindViewHolder(PreferenceViewHolder holder) { 70 super.onBindViewHolder(holder); 71 mItemView = holder.itemView; 72 mItemView.setVisibility(mItemViewVisible ? View.VISIBLE : View.INVISIBLE); 73 Spinner spinner = (Spinner) holder.findViewById(R.id.cycles_spinner); 74 spinner.setAdapter(mAdapter); 75 spinner.setSelection(mPosition); 76 spinner.setOnItemSelectedListener(mOnSelectedListener); 77 } 78 setHasCycles(boolean hasData)79 void setHasCycles(boolean hasData) { 80 setVisible(hasData); 81 if (hasData) { 82 mItemViewVisible = true; 83 if (mItemView != null) { 84 mItemView.setVisibility(View.VISIBLE); 85 } 86 } 87 } 88 89 @Override performClick(View view)90 protected void performClick(View view) { 91 view.findViewById(R.id.cycles_spinner).performClick(); 92 } 93 94 private final AdapterView.OnItemSelectedListener mOnSelectedListener = 95 new AdapterView.OnItemSelectedListener() { 96 @Override 97 public void onItemSelected( 98 AdapterView<?> parent, View view, int position, long id) { 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