Home | History | Annotate | Download | only in deviceinfo
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.android.compatibility.common.deviceinfo;
     17 
     18 import android.os.Build;
     19 import android.os.VintfObject;
     20 import android.os.VintfRuntimeInfo;
     21 
     22 import java.util.Arrays;
     23 import java.util.Collections;
     24 import java.util.Map;
     25 
     26 import com.android.compatibility.common.util.DeviceInfoStore;
     27 
     28 /**
     29  * VINTF device info collector.
     30  */
     31 public final class VintfDeviceInfo extends DeviceInfo {
     32 
     33     private static final String[] sEmptyStringArray = new String[0];
     34 
     35     @Override
     36     protected void collectDeviceInfo(DeviceInfoStore store) throws Exception {
     37         // VintfRuntimeInfo is available Android O onward.
     38         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
     39            return;
     40         }
     41         store.addResult("cpu_info", VintfRuntimeInfo.getCpuInfo());
     42         store.addResult("os_name", VintfRuntimeInfo.getOsName());
     43         store.addResult("node_name", VintfRuntimeInfo.getNodeName());
     44         store.addResult("os_release", VintfRuntimeInfo.getOsRelease());
     45         store.addResult("os_version", VintfRuntimeInfo.getOsVersion());
     46         store.addResult("hardware_id", VintfRuntimeInfo.getHardwareId());
     47         store.addResult("kernel_version", VintfRuntimeInfo.getKernelVersion());
     48         store.addResult("sepolicy_version", VintfObject.getSepolicyVersion());
     49 
     50         String[] hals = VintfObject.getHalNamesAndVersions();
     51         store.addListResult("hals", hals == null
     52                 ? Collections.emptyList() : Arrays.<String>asList(hals));
     53 
     54         Map<String, String[]> vndks = VintfObject.getVndkSnapshots();
     55         if (vndks == null) vndks = Collections.emptyMap();
     56         store.startArray("vndk_snapshots");
     57         for (Map.Entry<String, String[]> e : vndks.entrySet()) {
     58             store.startGroup();
     59             store.addResult("version", e.getKey());
     60             String[] libraries = e.getValue();
     61             store.addListResult("libraries", libraries == null
     62                     ? Collections.emptyList() : Arrays.<String>asList(libraries));
     63             store.endGroup();
     64         }
     65         store.endArray();
     66 
     67         // getTargetFrameworkCompatibilityMatrixVersion is available Android P onward.
     68         // (Use O_MR1 until P is released.)
     69         if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O_MR1) {
     70            return;
     71         }
     72         Long version = VintfObject.getTargetFrameworkCompatibilityMatrixVersion();
     73         if (version != null) {
     74             store.addResult("target_fcm_version", version);
     75         }
     76     }
     77 }
     78