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