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