173e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin/*
273e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin * Copyright (C) 2009 The Android Open Source Project
373e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin *
473e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin * Licensed under the Apache License, Version 2.0 (the "License");
573e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin * you may not use this file except in compliance with the License.
673e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin * You may obtain a copy of the License at
773e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin *
873e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin *      http://www.apache.org/licenses/LICENSE-2.0
973e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin *
1073e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin * Unless required by applicable law or agreed to in writing, software
1173e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin * distributed under the License is distributed on an "AS IS" BASIS,
1273e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1373e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin * See the License for the specific language governing permissions and
1473e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin * limitations under the License.
1573e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin */
1673e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin
1773e782de608cbe2ddffd75c055009ff2e208f78bOwen Linpackage com.android.camera;
1873e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin
1973e782de608cbe2ddffd75c055009ff2e208f78bOwen Linimport android.content.Context;
2073e782de608cbe2ddffd75c055009ff2e208f78bOwen Linimport android.util.AttributeSet;
2173e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin
22892781804513066b68b4a2fa6f846e862dac252aOwen Linimport java.util.ArrayList;
23892781804513066b68b4a2fa6f846e862dac252aOwen Lin
2473e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin/**
2573e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin * A collection of <code>CameraPreference</code>s. It may contain other
2673e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin * <code>PreferenceGroup</code> and form a tree structure.
2773e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin */
2873e782de608cbe2ddffd75c055009ff2e208f78bOwen Linpublic class PreferenceGroup extends CameraPreference {
2973e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    private ArrayList<CameraPreference> list =
3073e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin            new ArrayList<CameraPreference>();
3173e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin
3273e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    public PreferenceGroup(Context context, AttributeSet attrs) {
3373e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin        super(context, attrs);
3473e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    }
3573e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin
3673e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    public void addChild(CameraPreference child) {
3773e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin        list.add(child);
3873e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    }
3973e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin
4073e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    public void removePreference(int index) {
4173e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin        list.remove(index);
4273e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    }
4373e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin
4473e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    public CameraPreference get(int index) {
4573e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin        return list.get(index);
4673e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    }
4773e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin
4873e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    public int size() {
4973e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin        return list.size();
5073e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    }
5173e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin
5252064aa4bacfae605823b99f675649b1786e8c8aOwen Lin    @Override
5352064aa4bacfae605823b99f675649b1786e8c8aOwen Lin    public void reloadValue() {
5452064aa4bacfae605823b99f675649b1786e8c8aOwen Lin        for (CameraPreference pref : list) {
5552064aa4bacfae605823b99f675649b1786e8c8aOwen Lin            pref.reloadValue();
5652064aa4bacfae605823b99f675649b1786e8c8aOwen Lin        }
5752064aa4bacfae605823b99f675649b1786e8c8aOwen Lin    }
5852064aa4bacfae605823b99f675649b1786e8c8aOwen Lin
5973e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    /**
6073e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin     * Finds the preference with the given key recursively. Returns
6173e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin     * <code>null</code> if cannot find.
6273e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin     */
6373e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    public ListPreference findPreference(String key) {
6473e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin        // Find a leaf preference with the given key. Currently, the base
6573e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin        // type of all "leaf" preference is "ListPreference". If we add some
6673e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin        // other types later, we need to change the code.
6773e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin        for (CameraPreference pref : list) {
6873e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin            if (pref instanceof ListPreference) {
6973e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin                ListPreference listPref = (ListPreference) pref;
7073e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin                if(listPref.getKey().equals(key)) return listPref;
7173e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin            } else if(pref instanceof PreferenceGroup) {
7273e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin                ListPreference listPref =
7373e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin                        ((PreferenceGroup) pref).findPreference(key);
7473e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin                if (listPref != null) return listPref;
7573e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin            }
7673e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin        }
7773e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin        return null;
7873e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin    }
7973e782de608cbe2ddffd75c055009ff2e208f78bOwen Lin}
80