1/*
2 * Copyright 2014, 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
17#define LOG_TAG "ActivityRecognitionHardware"
18
19#include <jni.h>
20#include <JNIHelp.h>
21
22#include <android_runtime/AndroidRuntime.h>
23#include <android_runtime/Log.h>
24
25// #include "activity_recognition.h"
26// The activity recognition HAL is being deprecated. This means -
27//    i) Android framework code shall not depend on activity recognition
28//       being provided through the activity_recognition.h interface.
29//   ii) activity recognition HAL will not be binderized as the other HALs.
30//
31
32/**
33 * Initializes the ActivityRecognitionHardware class from the native side.
34 */
35static void class_init(JNIEnv* /*env*/, jclass /*clazz*/) {
36    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
37          __FUNCTION__);
38}
39
40/**
41 * Initializes and connect the callbacks handlers in the HAL.
42 */
43static void initialize(JNIEnv* /*env*/, jobject /*obj*/) {
44    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
45          __FUNCTION__);
46}
47
48/**
49 * De-initializes the ActivityRecognitionHardware from the native side.
50 */
51static void release(JNIEnv* /*env*/, jobject /*obj*/) {
52    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
53          __FUNCTION__);
54}
55
56/**
57 * Returns true if ActivityRecognition HAL is supported, false otherwise.
58 */
59static jboolean is_supported(JNIEnv* /*env*/, jclass /*clazz*/) {
60    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
61          __FUNCTION__);
62    return JNI_FALSE;
63}
64
65/**
66 * Gets an array representing the supported activities.
67 */
68static jobjectArray get_supported_activities(JNIEnv* /*env*/, jobject /*obj*/) {
69    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
70          __FUNCTION__);
71    return NULL;
72}
73
74/**
75 * Enables a given activity event to be actively monitored.
76 */
77static int enable_activity_event(
78        JNIEnv* /*env*/,
79        jobject /*obj*/,
80        jint /*activity_handle*/,
81        jint /*event_type*/,
82        jlong /*report_latency_ns*/) {
83    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
84          __FUNCTION__);
85    return android::NO_INIT;
86}
87
88/**
89 * Disables a given activity event from being actively monitored.
90 */
91static int disable_activity_event(
92        JNIEnv* /*env*/,
93        jobject /*obj*/,
94        jint /*activity_handle*/,
95        jint /*event_type*/) {
96    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
97          __FUNCTION__);
98    return android::NO_INIT;
99}
100
101/**
102 * Request flush for al batch buffers.
103 */
104static int flush(JNIEnv* /*env*/, jobject /*obj*/) {
105    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
106          __FUNCTION__);
107    return android::NO_INIT;
108}
109
110
111static const JNINativeMethod sMethods[] = {
112    // {"name", "signature", (void*) functionPointer },
113    { "nativeClassInit", "()V", (void*) class_init },
114    { "nativeInitialize", "()V", (void*) initialize },
115    { "nativeRelease", "()V", (void*) release },
116    { "nativeIsSupported", "()Z", (void*) is_supported },
117    { "nativeGetSupportedActivities", "()[Ljava/lang/String;", (void*) get_supported_activities },
118    { "nativeEnableActivityEvent", "(IIJ)I", (void*) enable_activity_event },
119    { "nativeDisableActivityEvent", "(II)I", (void*) disable_activity_event },
120    { "nativeFlush", "()I", (void*) flush },
121};
122
123/**
124 * Registration method invoked in JNI load.
125 */
126int register_android_hardware_location_ActivityRecognitionHardware(JNIEnv* env) {
127    return jniRegisterNativeMethods(
128            env,
129            "android/hardware/location/ActivityRecognitionHardware",
130            sMethods,
131            NELEM(sMethods));
132}
133