1c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu/* 2c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * Copyright (C) 2013 The Android Open Source Project 3c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * 4c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * Licensed under the Apache License, Version 2.0 (the "License"); 5c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * you may not use this file except in compliance with the License. 6c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * You may obtain a copy of the License at 7c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * 8c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * http://www.apache.org/licenses/LICENSE-2.0 9c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * 10c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * Unless required by applicable law or agreed to in writing, software 11c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * distributed under the License is distributed on an "AS IS" BASIS, 12c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * See the License for the specific language governing permissions and 14c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu * limitations under the License. 15c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu */ 16c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 17c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescupackage com.android.gallery3d.ingest.adapter; 18c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 19f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescuimport android.annotation.TargetApi; 20f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescuimport android.os.Build; 21f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu 22c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport java.util.ArrayList; 23c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport java.util.Collection; 24c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 25f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu/** 26f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu * Helper to keep checked state in sync. 27f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu */ 28f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) 29c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescupublic abstract class CheckBroker { 30f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu private Collection<OnCheckedChangedListener> mListeners = 31f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu new ArrayList<OnCheckedChangedListener>(); 32c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 33f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu /** 34f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu * Listener for item checked state changes. 35f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu */ 36f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu public interface OnCheckedChangedListener { 37f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu public void onCheckedChanged(int position, boolean isChecked); 38c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 39f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu public void onBulkCheckedChanged(); 40f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu } 41c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 42f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu public abstract void setItemChecked(int position, boolean checked); 43f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu 44f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu public void onCheckedChange(int position, boolean checked) { 45f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu if (isItemChecked(position) != checked) { 46f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu for (OnCheckedChangedListener l : mListeners) { 47f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu l.onCheckedChanged(position, checked); 48f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu } 49c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu } 50f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu } 51c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 52f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu public void onBulkCheckedChange() { 53f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu for (OnCheckedChangedListener l : mListeners) { 54f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu l.onBulkCheckedChanged(); 55c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu } 56f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu } 57c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 58f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu public abstract boolean isItemChecked(int position); 59c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 60f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu public void registerOnCheckedChangeListener(OnCheckedChangedListener l) { 61f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu mListeners.add(l); 62f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu } 63c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 64f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu public void unregisterOnCheckedChangeListener(OnCheckedChangedListener l) { 65f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu mListeners.remove(l); 66f640d379259bb114a50e3200f49961b89d60f2c2Bobby Georgescu } 67c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu} 68