17c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala/*
27c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * Copyright (C) 2014 The Android Open Source Project
37c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala *
47c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
57c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * you may not use this file except in compliance with the License.
67c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * You may obtain a copy of the License at
77c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala *
87c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
97c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala *
107c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
117c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
127c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * See the License for the specific language governing permissions and
147c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * limitations under the License.
157c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala */
167c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
177c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalapackage com.android.testingcamera2;
187c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
197c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.content.Context;
207c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.content.res.TypedArray;
217c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.util.AttributeSet;
227c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.view.LayoutInflater;
237c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.view.View;
247c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.widget.LinearLayout;
257c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.widget.TextView;
267c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.widget.ToggleButton;
277c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
287c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport java.util.List;
297c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport java.util.ArrayList;
307c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
317c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport org.xmlpull.v1.XmlPullParser;
327c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport org.xmlpull.v1.XmlPullParserException;
337c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
347c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport java.io.IOException;
357c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
367c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala/**
377c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * A simple linear layout to hold a set of control panes, with the ability to
387c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * add more panes, and to serialize itself in/out of configurations.
397c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala */
407c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalapublic abstract class PaneLayout<T extends ControlPane> extends LinearLayout implements
417c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        ControlPane.StatusListener {
427c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
437c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    private static final String DEFAULT_XML_PANE_NAME = "pane_layout";
447c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
457c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    private List<T> mPanes = new ArrayList<T>();
467c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
477c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    private List<T> mNewPanes = new ArrayList<T>();
487c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
497c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    private final String mPaneXmlName;
507c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    private PaneTracker mPaneTracker;
517c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
527c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    private OnClickListener mCollapseButtonListener = new OnClickListener() {
537c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        private boolean mCollapsed = false;
547c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
557c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        @Override
567c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        public void onClick(View v) {
577c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            if (mCollapsed) {
587c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                mCollapsed = false;
597c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                // Unhide all panes
607c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                for (T pane : mPanes) {
617c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                    pane.setVisibility(VISIBLE);
627c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                }
637c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            } else {
647c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                mCollapsed = true;
657c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                // Hide all panes
667c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                for (T pane : mPanes) {
677c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                    pane.setVisibility(GONE);
687c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                }
697c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            }
707c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
717c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    };
727c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
737c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    public PaneLayout(Context context, AttributeSet attrs) {
747c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        super(context, attrs);
757c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
767c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        mPaneXmlName = DEFAULT_XML_PANE_NAME;
777c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        mPaneTracker = null;
787c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
797c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        setUpUI(context, attrs);
807c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
817c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
827c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    public PaneLayout(Context context, AttributeSet attrs, String paneXmlName) {
837c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        super(context, attrs);
847c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
857c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        mPaneXmlName = paneXmlName;
867c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
877c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        setUpUI(context, attrs);
887c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
897c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
907c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    public void setPaneTracker(PaneTracker tracker) {
917c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        mPaneTracker = tracker;
927c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
937c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
947c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    public String getXmlName() {
957c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        return mPaneXmlName;
967c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
977c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
987c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    private void setUpUI(Context context, AttributeSet attrs) {
997c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1007c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        LayoutInflater inflater =
1017c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
1027c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1037c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        inflater.inflate(R.layout.pane_layout_header, this);
1047c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1057c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        TextView title = (TextView) findViewById(R.id.pane_layout_title_text);
1067c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1077c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        TypedArray a =
1087c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                context.getTheme().obtainStyledAttributes(attrs, R.styleable.PaneLayout, 0, 0);
1097c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1107c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        try {
1117c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            title.setText(a.getString(R.styleable.PaneLayout_headerTitle));
1127c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        } finally {
1137c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            a.recycle();
1147c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
1157c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1167c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        ToggleButton collapseButton = (ToggleButton) findViewById(R.id.pane_layout_collapse_button);
1177c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        collapseButton.setOnClickListener(mCollapseButtonListener);
1187c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
1197c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1207c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    public void readConfig(TestingCamera21 tc, XmlPullParser configParser)
1217c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            throws XmlPullParserException, IOException {
1227c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1237c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        configParser.require(XmlPullParser.START_TAG, XmlPullParser.NO_NAMESPACE, mPaneXmlName);
1247c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        int eventType = configParser.next();
1257c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        while (eventType != XmlPullParser.END_TAG) {
1267c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            switch (eventType) {
1277c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            case XmlPullParser.START_TAG:
1287c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                T pane = readControlPane(tc, configParser);
1297c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                mNewPanes.add(pane);
1307c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                break;
1317c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            }
1327c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            eventType = configParser.next();
1337c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
1347c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        configParser.require(XmlPullParser.END_TAG, XmlPullParser.NO_NAMESPACE, mPaneXmlName);
1357c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
1367c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1377c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    public void clearConfig() {
1387c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        mNewPanes.clear();
1397c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
1407c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1417c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    public void activateConfig() {
1427c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        ArrayList<T> oldPanes = new ArrayList<T>(mPanes);
1437c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        for (T pane : oldPanes) {
1447c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            // This will call back to onRemoveRequested
1457c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            pane.remove();
1467c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
1477c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1487c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        for (T newPane : mNewPanes) {
1497c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            addPane(newPane);
1507c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
1517c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        clearConfig();
1527c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
1537c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1547c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    public void addPane(TestingCamera21 tc) {
1557c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        T newPane = createControlPane(tc, null);
1567c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        addPane(newPane);
1577c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
1587c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1597c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    private void addPane(T newPane) {
1607c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        mPanes.add(newPane);
1617c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        if (mPaneTracker != null) {
1627c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            mPaneTracker.addPane(newPane);
1637c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
1647c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        addView(newPane);
1657c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
1667c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1677c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    public void onRemoveRequested(ControlPane p) {
1687c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        removeView(p);
1697c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        if (mPaneTracker != null) {
1707c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            mPaneTracker.removePane(p);
1717c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
1727c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        mPanes.remove(p);
1737c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
1747c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1757c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    protected abstract T createControlPane(TestingCamera21 tc, AttributeSet attrs);
1767c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1777c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    protected abstract T readControlPane(TestingCamera21 tc, XmlPullParser configParser)
1787c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            throws XmlPullParserException, IOException;
1797c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1807c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    static class TargetPaneLayout extends PaneLayout<TargetControlPane> {
1817c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        private static final String PANE_XML_NAME = "target_panes";
1827c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1837c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        public TargetPaneLayout(Context context, AttributeSet attrs) {
1847c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            super(context, attrs, PANE_XML_NAME);
1857c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
1867c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1877c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        protected TargetControlPane createControlPane(TestingCamera21 tc, AttributeSet attrs) {
1887c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            return new TargetControlPane(tc, attrs, this);
1897c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
1907c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1917c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        protected TargetControlPane readControlPane(TestingCamera21 tc, XmlPullParser configParser)
1927c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                throws XmlPullParserException, IOException {
1937c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            return new TargetControlPane(tc, configParser, this);
1947c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
1957c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
1967c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
1977c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    static class CameraPaneLayout extends PaneLayout<CameraControlPane> {
1987c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        private static final String PANE_XML_NAME = "camera_panes";
1997c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2007c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        public CameraPaneLayout(Context context, AttributeSet attrs) {
2017c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            super(context, attrs, PANE_XML_NAME);
2027c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2037c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2047c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        protected CameraControlPane createControlPane(TestingCamera21 tc, AttributeSet attrs) {
2057c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            return new CameraControlPane(tc, attrs, this);
2067c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2077c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2087c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        protected CameraControlPane readControlPane(TestingCamera21 tc, XmlPullParser configParser)
2097c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                throws XmlPullParserException, IOException {
2107c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            return new CameraControlPane(tc, configParser, this);
2117c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2127c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
2137c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2147c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    static class RequestPaneLayout extends PaneLayout<RequestControlPane> {
2157c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        private static final String PANE_XML_NAME = "request_panes";
2167c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2177c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        public RequestPaneLayout(Context context, AttributeSet attrs) {
2187c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            super(context, attrs, PANE_XML_NAME);
2197c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2207c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2217c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        protected RequestControlPane createControlPane(TestingCamera21 tc, AttributeSet attrs) {
2227c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            return new RequestControlPane(tc, attrs, this);
2237c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2247c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2257c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        protected RequestControlPane readControlPane(TestingCamera21 tc, XmlPullParser configParser)
2267c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                throws XmlPullParserException, IOException {
2277c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            return new RequestControlPane(tc, configParser, this);
2287c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2297c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2307c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
2317c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2327c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    static class BurstPaneLayout extends PaneLayout<BurstControlPane> {
2337c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        private static final String PANE_XML_NAME = "burst_panes";
2347c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2357c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        public BurstPaneLayout(Context context, AttributeSet attrs) {
2367c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            super(context, attrs, PANE_XML_NAME);
2377c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2387c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2397c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        protected BurstControlPane createControlPane(TestingCamera21 tc, AttributeSet attrs) {
2407c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            return new BurstControlPane(tc, attrs, this);
2417c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2427c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2437c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        protected BurstControlPane readControlPane(TestingCamera21 tc, XmlPullParser configParser)
2447c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                throws XmlPullParserException, IOException {
2457c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            return new BurstControlPane(tc, configParser, this);
2467c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2477c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
2487c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2497c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    static class UtilPaneLayout extends PaneLayout<UtilControlPane> {
2507c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        private static final String PANE_XML_NAME = "util_panes";
2517c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2527c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        public UtilPaneLayout(Context context, AttributeSet attrs) {
2537c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            super(context, attrs, PANE_XML_NAME);
2547c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2557c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2567c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        public UtilControlPane createControlPane(TestingCamera21 tc, AttributeSet attrs) {
2577c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            return new UtilControlPane(tc, attrs, this);
2587c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2597c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2607c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        protected UtilControlPane readControlPane(TestingCamera21 tc, XmlPullParser configParser)
2617c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala                throws XmlPullParserException, IOException {
2627c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala            return new UtilControlPane(tc, configParser, this);
2637c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala        }
2647c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala    }
2657c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala
2667c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala}