1fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean/*
2fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * Copyright (C) 2017 The Android Open Source Project
3fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean *
4fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * Licensed under the Apache License, Version 2.0 (the "License");
5fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * you may not use this file except in compliance with the License.
6fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * You may obtain a copy of the License at
7fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean *
8fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean *      http://www.apache.org/licenses/LICENSE-2.0
9fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean *
10fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * Unless required by applicable law or agreed to in writing, software
11fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * distributed under the License is distributed on an "AS IS" BASIS,
12fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * See the License for the specific language governing permissions and
14fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * limitations under the License.
15fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean */
16fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLeanpackage com.android.server.usb.descriptors.tree;
17fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean
18fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLeanimport com.android.server.usb.descriptors.UsbDeviceDescriptor;
19fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLeanimport com.android.server.usb.descriptors.report.ReportCanvas;
20fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean
21fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLeanimport java.util.ArrayList;
22fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean
23fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean/**
24fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * @hide
25fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * A class to contain THE device descriptor at the root of the tree.
26fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean */
27fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLeanpublic final class UsbDescriptorsDeviceNode extends UsbDescriptorsTreeNode {
28fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    private static final String TAG = "UsbDescriptorsDeviceNode";
29fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean
30fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    private final UsbDeviceDescriptor mDeviceDescriptor;
31fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean
32fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    private final ArrayList<UsbDescriptorsConfigNode> mConfigNodes = new ArrayList<>();
33fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean
34fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    /**
35fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean     * Constructor.
36fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean     * @param deviceDescriptor   The Device Descriptor object wrapped by this tree node.
37fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean     */
38fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    public UsbDescriptorsDeviceNode(UsbDeviceDescriptor deviceDescriptor) {
39fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        mDeviceDescriptor = deviceDescriptor;
40fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    }
41fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean
42fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    /**
43fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean     * Adds a Configuration node to the assocated device node.
44fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean     */
45fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    public void addConfigDescriptorNode(UsbDescriptorsConfigNode configNode) {
46fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        mConfigNodes.add(configNode);
47fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    }
48fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean
49fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    @Override
50fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    public void report(ReportCanvas canvas) {
51fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        mDeviceDescriptor.report(canvas);
52fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        for (UsbDescriptorsConfigNode node : mConfigNodes) {
53fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean            node.report(canvas);
54fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        }
55fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    }
56fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean}
57