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.hardware.camera2.CameraDevice; 217c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.hardware.camera2.CaptureRequest; 227c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.util.AttributeSet; 237c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.view.LayoutInflater; 247c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.view.Surface; 257c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.view.View; 267c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.widget.ArrayAdapter; 277c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.widget.Button; 283e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunkimport android.widget.ListView; 297c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport android.widget.Spinner; 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 Talvalaimport java.util.ArrayList; 367c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport java.util.List; 377c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalaimport java.util.Locale; 387c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 397c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvalapublic class RequestControlPane extends ControlPane { 407c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala // XML attributes 417c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 427c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala /** Name of pane tag */ 437c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private static final String PANE_NAME = "request_pane"; 447c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 457c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala /** Attribute: ID for pane (integer) */ 467c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private static final String PANE_ID = "id"; 477c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 487c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala // End XML attributes 497c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 507c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private enum TemplateType { 517c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala MANUAL(CameraDevice.TEMPLATE_MANUAL), 527c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala PREVIEW(CameraDevice.TEMPLATE_PREVIEW), 537c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala RECORD(CameraDevice.TEMPLATE_RECORD), 547c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala STILL_CAPTURE(CameraDevice.TEMPLATE_STILL_CAPTURE), 557c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala VIDEO_SNAPSHOT(CameraDevice.TEMPLATE_VIDEO_SNAPSHOT), 567c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala ZERO_SHUTTER_LAG(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG); 577c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 587c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private int mTemplateVal; 597c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 607c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala TemplateType(int templateVal) { 617c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mTemplateVal = templateVal; 627c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 637c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 647c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala int getTemplateValue() { 657c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala return mTemplateVal; 667c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 677c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 687c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 697c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private static int mRequestPaneIdCounter = 0; 707c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 717c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private final int mPaneId; 727c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 737c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private List<CameraControlPane> mCameraPanes; 747c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private final List<TargetControlPane> mTargetPanes = new ArrayList<TargetControlPane>(); 757c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 767c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private Spinner mCameraSpinner; 777c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private Spinner mTemplateSpinner; 783e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk private ListView mOutputListView; 793e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk 803e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk private CheckableListAdapter mOutputAdapter; 817c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 827c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala /** 837c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala * Constructor for tooling only 847c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala */ 857c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala public RequestControlPane(Context context, AttributeSet attrs) { 867c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala super(context, attrs, null, null); 877c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 887c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mPaneId = 0; 897c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala setUpUI(context); 907c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 917c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 927c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala public RequestControlPane(TestingCamera21 tc, AttributeSet attrs, StatusListener listener) { 937c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala super(tc, attrs, listener, tc.getPaneTracker()); 947c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 957c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mPaneId = mRequestPaneIdCounter++; 967c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala setUpUI(tc); 977c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 987c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 997c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala public RequestControlPane(TestingCamera21 tc, XmlPullParser configParser, 1007c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala StatusListener listener) throws XmlPullParserException, IOException { 1017c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala super(tc, null, listener, tc.getPaneTracker()); 1027c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1037c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala this.setName(tc.getResources().getString(R.string.request_pane_title)); 1047c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1057c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala configParser.require(XmlPullParser.START_TAG, XmlPullParser.NO_NAMESPACE, PANE_NAME); 1067c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1077c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala int paneId = getAttributeInt(configParser, PANE_ID, -1); 1087c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (paneId == -1) { 1097c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mPaneId = mRequestPaneIdCounter++; 1107c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } else { 1117c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mPaneId = paneId; 1127c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (mPaneId >= mRequestPaneIdCounter) { 1137c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mRequestPaneIdCounter = mPaneId + 1; 1147c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1157c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1167c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1177c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala configParser.next(); 1187c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala configParser.require(XmlPullParser.END_TAG, XmlPullParser.NO_NAMESPACE, PANE_NAME); 1197c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1207c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala setUpUI(tc); 1217c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1227c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1237c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala public void notifyPaneEvent(ControlPane sourcePane, PaneTracker.PaneEvent event) { 1247c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala switch (event) { 1257c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala case NEW_CAMERA_SELECTED: 1267c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (mCameraPanes.size() > 0 1277c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala && sourcePane == mCameraPanes.get(mCameraSpinner.getSelectedItemPosition())) { 1287c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala updateOutputList(); 1297c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1307c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala break; 1317c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala case CAMERA_CONFIGURED: 1327c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (mCameraPanes.size() > 0 1337c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala && sourcePane == mCameraPanes.get(mCameraSpinner.getSelectedItemPosition())) { 1347c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala updateOutputList(); 1357c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1367c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala break; 1377c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala default: 1387c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala super.notifyPaneEvent(sourcePane, event); 1397c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1407c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1417c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1427c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private void setUpUI(Context context) { 1437c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala String paneName = 1447c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala String.format(Locale.US, "%s %d", 1457c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala context.getResources().getString(R.string.request_pane_title), mPaneId); 1467c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala this.setName(paneName); 1477c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1487c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala LayoutInflater inflater = 1497c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 1507c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1517c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala inflater.inflate(R.layout.request_pane, this); 1527c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1537c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala Button captureButton = (Button) findViewById(R.id.request_pane_capture_button); 1547c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala captureButton.setOnClickListener(mCaptureButtonListener); 1557c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala Button repeatButton = (Button) findViewById(R.id.request_pane_repeat_button); 1567c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala repeatButton.setOnClickListener(mRepeatButtonListener); 1577c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1587c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mCameraSpinner = (Spinner) findViewById(R.id.request_pane_camera_spinner); 1597c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mTemplateSpinner = (Spinner) findViewById(R.id.request_pane_template_spinner); 1603e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk mOutputListView = (ListView) findViewById(R.id.request_pane_output_listview); 1613e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk 1623e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk mOutputAdapter = new CheckableListAdapter(context, R.layout.checkable_list_item, 1633e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk new ArrayList<CheckableListAdapter.CheckableItem>()); 1643e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk mOutputListView.setAdapter(mOutputAdapter); 1657c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1667c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala String[] templateNames = new String[TemplateType.values().length]; 1677c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala for (int i = 0; i < templateNames.length; i++) { 1687c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala templateNames[i] = TemplateType.values()[i].toString(); 1697c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1707c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mTemplateSpinner.setAdapter(new ArrayAdapter<String>(getContext(), R.layout.spinner_item, 1717c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala templateNames)); 1727c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1737c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mPaneTracker.addPaneListener(new CameraPanesListener()); 1747c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mCameraPanes = mPaneTracker.getPanes(CameraControlPane.class); 1757c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala updateCameraPaneList(); 1767c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1777c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1787c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private class CameraPanesListener extends PaneTracker.PaneSetChangedListener<CameraControlPane> { 1797c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala public CameraPanesListener() { 1807c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala super(CameraControlPane.class); 1817c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1827c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1837c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala @Override 1847c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala public void onPaneAdded(ControlPane pane) { 1857c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mCameraPanes.add((CameraControlPane) pane); 1867c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala updateCameraPaneList(); 1877c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1887c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1897c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala @Override 1907c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala public void onPaneRemoved(ControlPane pane) { 1917c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mCameraPanes.remove((CameraControlPane) pane); 1927c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala updateCameraPaneList(); 1937c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1947c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 1957c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 1967c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private OnClickListener mCaptureButtonListener = new OnClickListener() { 1977c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala @Override 1987c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala public void onClick(View v) { 1997c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (mCameraPanes.size() == 0) { 2007c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala TLog.e("No camera selected for request"); 2017c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala return; 2027c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2037c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala CameraControlPane camera = mCameraPanes.get(mCameraSpinner.getSelectedItemPosition()); 2047c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2057c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala CaptureRequest request = createRequest(camera); 2067c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (request != null) { 2077c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala camera.capture(request); 2087c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2097c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2107c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala }; 2117c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2127c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private OnClickListener mRepeatButtonListener = new OnClickListener() { 2137c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala @Override 2147c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala public void onClick(View v) { 2157c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (mCameraPanes.size() == 0) { 2167c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala TLog.e("No camera selected for request"); 2177c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala return; 2187c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2197c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala CameraControlPane camera = mCameraPanes.get(mCameraSpinner.getSelectedItemPosition()); 2207c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2217c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala CaptureRequest request = createRequest(camera); 2227c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (request != null) { 2237c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala camera.repeat(request); 2247c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2257c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2267c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala }; 2277c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2287c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private CaptureRequest createRequest(CameraControlPane camera) { 2297c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (mTargetPanes.size() == 0) { 2307c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala TLog.e("No target(s) selected for request"); 2317c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala return null; 2327c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2337c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2347c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2357c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala TemplateType template = TemplateType.valueOf((String) mTemplateSpinner.getSelectedItem()); 2367c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala CaptureRequest.Builder builder = camera.getRequestBuilder(template.getTemplateValue()); 2377c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala // TODO: Add setting overrides 2383e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk 2393e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk List<Integer> targetPostions = mOutputAdapter.getCheckedPositions(); 2403e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk for (int i : targetPostions) { 2413e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk TargetControlPane target = mTargetPanes.get(i); 2423e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk Surface targetSurface = target.getTargetSurfaceForCameraPane(camera.getPaneName()); 2433e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk if (targetSurface == null) { 2443e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk TLog.e("Target not configured for camera"); 2453e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk return null; 2463e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk } 2473e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk builder.addTarget(targetSurface); 2483e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk } 2493e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk 2507c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala CaptureRequest request = builder.build(); 2517c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala return request; 2527c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2537c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2547c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private void updateCameraPaneList() { 2557c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala String currentSelection = (String) mCameraSpinner.getSelectedItem(); 2567c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala int newSelectionIndex = 0; 2577c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala String[] cameraSpinnerItems = new String[mCameraPanes.size()]; 2587c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala for (int i = 0; i < cameraSpinnerItems.length; i++) { 2597c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala cameraSpinnerItems[i] = mCameraPanes.get(i).getPaneName(); 2607c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (cameraSpinnerItems[i].equals(currentSelection)) { 2617c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala newSelectionIndex = i; 2627c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2637c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2647c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mCameraSpinner.setAdapter(new ArrayAdapter<String>(getContext(), R.layout.spinner_item, 2657c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala cameraSpinnerItems)); 2667c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mCameraSpinner.setSelection(newSelectionIndex); 2677c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2687c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala updateOutputList(); 2697c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2707c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2717c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala private void updateOutputList() { 2727c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (mCameraPanes.size() > 0) { 2737c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala CameraControlPane currentCamera = 2747c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mCameraPanes.get(mCameraSpinner.getSelectedItemPosition()); 2757c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mTargetPanes.clear(); 2767c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala List<TargetControlPane> newPanes = currentCamera.getCurrentConfiguredTargets(); 2777c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala if (newPanes != null) { 2787c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala mTargetPanes.addAll(currentCamera.getCurrentConfiguredTargets()); 2797c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2807c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2817c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala String[] outputSpinnerItems = new String[mTargetPanes.size()]; 2827c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala for (int i = 0; i < outputSpinnerItems.length; i++) { 2837c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala outputSpinnerItems[i] = mTargetPanes.get(i).getPaneName(); 2847c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2853e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk 2863e2b3ad76d90a3fb663c7b04794afe534a1f9066Ruben Brunk mOutputAdapter.updateItems(outputSpinnerItems); 2877c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2887c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2897c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala } 2907c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala 2917c5f2935442e974ce30158e35d142f7e2c3ee1a2Eino-Ville Talvala} 292