125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb/*
225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * Copyright (C) 2011 The Android Open Source Project
325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb *
425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * Licensed under the Apache License, Version 2.0 (the "License");
525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * you may not use this file except in compliance with the License.
625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * You may obtain a copy of the License at
725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb *
825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb *      http://www.apache.org/licenses/LICENSE-2.0
925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb *
1025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * Unless required by applicable law or agreed to in writing, software
1125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * distributed under the License is distributed on an "AS IS" BASIS,
1225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * See the License for the specific language governing permissions and
1425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * limitations under the License.
1525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb */
1625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
1725668cd6ed661c59295cb65348a126fb245757d4Michael Kolbpackage com.android.camera.ui;
1825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
1925668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport android.content.Context;
2025668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport android.util.AttributeSet;
2125668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport android.view.accessibility.AccessibilityEvent;
2225668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport android.widget.LinearLayout;
2325668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport android.widget.TextView;
2425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
2525668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport com.android.camera.ListPreference;
26a3dc2c0dd75f4659146fcd257ce32acc3800ae5fJohn Reckimport com.android.gallery3d.R;
2725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
2825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb/**
2925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * A one-line camera setting could be one of three types: knob, switch or restore
3025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * preference button. The setting includes a title for showing the preference
3125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * title which is initialized in the SimpleAdapter. A knob also includes
3225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * (ex: Picture size), a previous button, the current value (ex: 5MP),
3325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * and a next button. A switch, i.e. the preference RecordLocationPreference,
3425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * has only two values on and off which will be controlled in a switch button.
3525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * Other setting popup window includes several InLineSettingItem items with
3625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * different types if possible.
3725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb */
3825668cd6ed661c59295cb65348a126fb245757d4Michael Kolbpublic abstract class InLineSettingItem extends LinearLayout {
3925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    private Listener mListener;
4025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    protected ListPreference mPreference;
4125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    protected int mIndex;
4225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    // Scene mode can override the original preference value.
4325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    protected String mOverrideValue;
4425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    protected TextView mTitle;
4525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
4625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    static public interface Listener {
4725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        public void onSettingChanged(ListPreference pref);
4825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    }
4925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
5025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    public InLineSettingItem(Context context, AttributeSet attrs) {
5125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        super(context, attrs);
5225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    }
5325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
5425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    protected void setTitle(ListPreference preference) {
5525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        mTitle = ((TextView) findViewById(R.id.title));
5625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        mTitle.setText(preference.getTitle());
5725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    }
5825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
5925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    public void initialize(ListPreference preference) {
6025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        setTitle(preference);
6125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        if (preference == null) return;
6225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        mPreference = preference;
6325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        reloadPreference();
6425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    }
6525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
6625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    protected abstract void updateView();
6725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
6825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    protected boolean changeIndex(int index) {
6925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        if (index >= mPreference.getEntryValues().length || index < 0) return false;
7025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        mIndex = index;
7125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        mPreference.setValueIndex(mIndex);
7225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        if (mListener != null) {
7325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb            mListener.onSettingChanged(mPreference);
7425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        }
7525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        updateView();
7625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
7725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        return true;
7825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    }
7925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
8025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    // The value of the preference may have changed. Update the UI.
8125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    public void reloadPreference() {
8225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        mIndex = mPreference.findIndexOfValue(mPreference.getValue());
8325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        updateView();
8425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    }
8525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
8625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    public void setSettingChangedListener(Listener listener) {
8725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        mListener = listener;
8825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    }
8925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb
9025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    public void overrideSettings(String value) {
9125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        mOverrideValue = value;
9225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb        updateView();
9325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb    }
9425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb}
95