1dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins/* 2dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * Copyright (C) 2011 The Android Open Source Project 3dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * 4dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * Licensed under the Apache License, Version 2.0 (the "License"); 5dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * you may not use this file except in compliance with the License. 6dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * You may obtain a copy of the License at 7dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * 8dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * http://www.apache.org/licenses/LICENSE-2.0 9dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * 10dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * Unless required by applicable law or agreed to in writing, software 11dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * distributed under the License is distributed on an "AS IS" BASIS, 12dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * See the License for the specific language governing permissions and 14dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins * limitations under the License. 15dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins */ 16dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins 17dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scrogginspackage com.android.browser.addbookmark; 18dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins 19dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scrogginsimport android.content.Context; 20dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scrogginsimport android.view.View; 21dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scrogginsimport android.util.AttributeSet; 22504433a185c3e60110590ce2aacd9b76b204b129Leon Scrogginsimport android.widget.AdapterView; 23dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scrogginsimport android.widget.Spinner; 24dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins 25dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins/** 26504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins * Special Spinner class with its own callback for when the selection is set, which 27504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins * can be ignored by calling setSelectionIgnoringSelectionChange 28dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins */ 29504433a185c3e60110590ce2aacd9b76b204b129Leon Scrogginspublic class FolderSpinner extends Spinner 30504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins implements AdapterView.OnItemSelectedListener { 31504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins private OnSetSelectionListener mOnSetSelectionListener; 32504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins private boolean mFireSetSelection; 33504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins 34504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins /** 35504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins * Callback for knowing when the selection has been manually set. Does not 36504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins * get called until the selected view has changed. 37504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins */ 38504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins public interface OnSetSelectionListener { 39504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins public void onSetSelection(long id); 40504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins } 41504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins 42dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins public FolderSpinner(Context context, AttributeSet attrs) { 43dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins super(context, attrs); 44504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins super.setOnItemSelectedListener(this); 45504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins } 46504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins 47504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins @Override 48504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener l) { 49504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins // Disallow setting an OnItemSelectedListener, since it is used by us 50504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins // to fire onSetSelection. 51504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins throw new RuntimeException("Cannot set an OnItemSelectedListener on a FolderSpinner"); 52504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins } 53504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins 54504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins public void setOnSetSelectionListener(OnSetSelectionListener l) { 55504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins mOnSetSelectionListener = l; 56504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins } 57504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins 58504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins /** 59504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins * Call setSelection, without firing the callback 60504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins * @param position New position to select. 61504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins */ 62504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins public void setSelectionIgnoringSelectionChange(int position) { 63504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins super.setSelection(position); 64dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins } 65dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins 66dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins @Override 67dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins public void setSelection(int position) { 68504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins mFireSetSelection = true; 69dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins int oldPosition = getSelectedItemPosition(); 70dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins super.setSelection(position); 71504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins if (mOnSetSelectionListener != null) { 72504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins if (oldPosition == position) { 73504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins long id = getAdapter().getItemId(position); 74504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins // Normally this is not called because the item did not actually 75504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins // change, but in this case, we still want it to be called. 76504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins onItemSelected(this, null, position, id); 77504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins } 78504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins } 79504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins } 80504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins 81504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins @Override 82504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 83504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins if (mFireSetSelection) { 84504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins mOnSetSelectionListener.onSetSelection(id); 85504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins mFireSetSelection = false; 86dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins } 87dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins } 88504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins 89504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins @Override 90504433a185c3e60110590ce2aacd9b76b204b129Leon Scroggins public void onNothingSelected(AdapterView<?> parent) {} 91dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins} 92dd13bad0ea5e01b6689a61145327febea4bfde8aLeon Scroggins 93