1b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon/* 2b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * Copyright (C) 2017 The Android Open Source Project 3b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * 4b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * Licensed under the Apache License, Version 2.0 (the "License"); 5b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * you may not use this file except in compliance with the License. 6b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * You may obtain a copy of the License at 7b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * 8b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * http://www.apache.org/licenses/LICENSE-2.0 9b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * 10b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * Unless required by applicable law or agreed to in writing, software 11b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * distributed under the License is distributed on an "AS IS" BASIS, 12b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * See the License for the specific language governing permissions and 14b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon * limitations under the License. 15b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon */ 16b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 17b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon#define LOG_TAG "DisplayViewport-JNI" 18b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 19b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon#include "JNIHelp.h" 20b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon#include "core_jni_helpers.h" 21b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 22b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon#include <android_hardware_display_DisplayViewport.h> 23b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon#include <android_runtime/AndroidRuntime.h> 24b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon#include <android_runtime/Log.h> 25b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon#include <utils/Log.h> 26b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 27b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon#include <ScopedUtfChars.h> 28b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 29b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordonnamespace android { 30b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 31b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon// ---------------------------------------------------------------------------- 32b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 33b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordonstatic struct { 34b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jclass clazz; 35b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 36b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jfieldID displayId; 37b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jfieldID orientation; 38b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jfieldID logicalFrame; 39b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jfieldID physicalFrame; 40b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jfieldID deviceWidth; 41b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jfieldID deviceHeight; 42b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jfieldID uniqueId; 43b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon} gDisplayViewportClassInfo; 44b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 45b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordonstatic struct { 46b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jfieldID left; 47b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jfieldID top; 48b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jfieldID right; 49b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jfieldID bottom; 50b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon} gRectClassInfo; 51b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 52b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon// ---------------------------------------------------------------------------- 53b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 54b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordonstatus_t android_hardware_display_DisplayViewport_toNative(JNIEnv* env, jobject viewportObj, 55b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon DisplayViewport* viewport) { 56b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->displayId = env->GetIntField(viewportObj, gDisplayViewportClassInfo.displayId); 57b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->orientation = env->GetIntField(viewportObj, gDisplayViewportClassInfo.orientation); 58b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->deviceWidth = env->GetIntField(viewportObj, gDisplayViewportClassInfo.deviceWidth); 59b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->deviceHeight = env->GetIntField(viewportObj, gDisplayViewportClassInfo.deviceHeight); 60b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 61b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jstring uniqueId = 62b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jstring(env->GetObjectField(viewportObj, gDisplayViewportClassInfo.uniqueId)); 63b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon if (uniqueId != nullptr) { 64b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->uniqueId.setTo(ScopedUtfChars(env, uniqueId).c_str()); 65b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon } 66b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 67b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jobject logicalFrameObj = 68b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon env->GetObjectField(viewportObj, gDisplayViewportClassInfo.logicalFrame); 69b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->logicalLeft = env->GetIntField(logicalFrameObj, gRectClassInfo.left); 70b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->logicalTop = env->GetIntField(logicalFrameObj, gRectClassInfo.top); 71b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->logicalRight = env->GetIntField(logicalFrameObj, gRectClassInfo.right); 72b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->logicalBottom = env->GetIntField(logicalFrameObj, gRectClassInfo.bottom); 73b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 74b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jobject physicalFrameObj = 75b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon env->GetObjectField(viewportObj, gDisplayViewportClassInfo.physicalFrame); 76b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->physicalLeft = env->GetIntField(physicalFrameObj, gRectClassInfo.left); 77b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->physicalTop = env->GetIntField(physicalFrameObj, gRectClassInfo.top); 78b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->physicalRight = env->GetIntField(physicalFrameObj, gRectClassInfo.right); 79b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon viewport->physicalBottom = env->GetIntField(physicalFrameObj, gRectClassInfo.bottom); 80b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 81b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon return OK; 82b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon} 83b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 84b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon// ---------------------------------------------------------------------------- 85b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 86b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordonint register_android_hardware_display_DisplayViewport(JNIEnv* env) { 87b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon jclass clazz = FindClassOrDie(env, "android/hardware/display/DisplayViewport"); 88b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); 89b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 90b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.displayId = GetFieldIDOrDie(env, 91b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.clazz, "displayId", "I"); 92b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 93b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.orientation = GetFieldIDOrDie(env, 94b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.clazz, "orientation", "I"); 95b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 96b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.deviceWidth = GetFieldIDOrDie(env, 97b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.clazz, "deviceWidth", "I"); 98b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 99b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.deviceHeight = GetFieldIDOrDie(env, 100b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.clazz, "deviceHeight", "I"); 101b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 102b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.logicalFrame = GetFieldIDOrDie(env, 103b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.clazz, "logicalFrame", "Landroid/graphics/Rect;"); 104b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 105b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.physicalFrame = GetFieldIDOrDie(env, 106b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.clazz, "physicalFrame", "Landroid/graphics/Rect;"); 107b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 108b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.uniqueId = GetFieldIDOrDie(env, 109b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gDisplayViewportClassInfo.clazz, "uniqueId", "Ljava/lang/String;"); 110b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 111b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon clazz = FindClassOrDie(env, "android/graphics/Rect"); 112b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gRectClassInfo.left = GetFieldIDOrDie(env, clazz, "left", "I"); 113b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gRectClassInfo.top = GetFieldIDOrDie(env, clazz, "top", "I"); 114b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gRectClassInfo.right = GetFieldIDOrDie(env, clazz, "right", "I"); 115b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon gRectClassInfo.bottom = GetFieldIDOrDie(env, clazz, "bottom", "I"); 116b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 117b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon return 0; 118b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon} 119b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon 120b0608636a29bcec8ecb4391cd50f29f68b3e7e81Santos Cordon} // namespace android 121