1a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa/*
2a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * Copyright 2014, The Android Open Source Project
3a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa *
4a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * Licensed under the Apache License, Version 2.0 (the "License");
5a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * you may not use this file except in compliance with the License.
6a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * You may obtain a copy of the License at
7a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa *
8a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa *     http://www.apache.org/licenses/LICENSE-2.0
9a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa *
10a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * Unless required by applicable law or agreed to in writing, software
11a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * distributed under the License is distributed on an "AS IS" BASIS,
12a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * See the License for the specific language governing permissions and
14a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * limitations under the License.
15a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa */
16a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
17a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa#define LOG_TAG "ActivityRecognitionHardware"
18a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
19a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa#include <jni.h>
202279b2534272282a5b5152723235da397e49195cSteven Moreland#include <nativehelper/JNIHelp.h>
21a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
22a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa#include <android_runtime/AndroidRuntime.h>
23a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa#include <android_runtime/Log.h>
24a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
25af737306f943570dd3d6c8a74681622bdb7ca275Colin Cross// #include <hardware/activity_recognition.h>
26c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi// The activity recognition HAL is being deprecated. This means -
27c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi//    i) Android framework code shall not depend on activity recognition
28c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi//       being provided through the activity_recognition.h interface.
29c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi//   ii) activity recognition HAL will not be binderized as the other HALs.
30c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi//
31a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
32a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa/**
33a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * Initializes the ActivityRecognitionHardware class from the native side.
34a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa */
35c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshistatic void class_init(JNIEnv* /*env*/, jclass /*clazz*/) {
36c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
37c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi          __FUNCTION__);
38a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa}
39a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
40a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa/**
41a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * Initializes and connect the callbacks handlers in the HAL.
42a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa */
43c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshistatic void initialize(JNIEnv* /*env*/, jobject /*obj*/) {
44c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
45c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi          __FUNCTION__);
46a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa}
47a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
48a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa/**
49a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * De-initializes the ActivityRecognitionHardware from the native side.
50a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa */
51c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshistatic void release(JNIEnv* /*env*/, jobject /*obj*/) {
52c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
53c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi          __FUNCTION__);
54a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa}
55a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
56a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa/**
57a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * Returns true if ActivityRecognition HAL is supported, false otherwise.
58a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa */
59c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshistatic jboolean is_supported(JNIEnv* /*env*/, jclass /*clazz*/) {
60c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
61c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi          __FUNCTION__);
62a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa    return JNI_FALSE;
63a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa}
64a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
65a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa/**
66a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * Gets an array representing the supported activities.
67a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa */
68c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshistatic jobjectArray get_supported_activities(JNIEnv* /*env*/, jobject /*obj*/) {
69c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
70c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi          __FUNCTION__);
71c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    return NULL;
72a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa}
73a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
74a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa/**
75a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * Enables a given activity event to be actively monitored.
76a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa */
77a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaastatic int enable_activity_event(
78c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi        JNIEnv* /*env*/,
79c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi        jobject /*obj*/,
80c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi        jint /*activity_handle*/,
81c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi        jint /*event_type*/,
82c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi        jlong /*report_latency_ns*/) {
83c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
84c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi          __FUNCTION__);
85c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    return android::NO_INIT;
86a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa}
87a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
88a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa/**
89a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * Disables a given activity event from being actively monitored.
90a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa */
91a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaastatic int disable_activity_event(
92c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi        JNIEnv* /*env*/,
93c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi        jobject /*obj*/,
94c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi        jint /*activity_handle*/,
95c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi        jint /*event_type*/) {
96c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
97c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi          __FUNCTION__);
98c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    return android::NO_INIT;
99a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa}
100a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
101a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa/**
102a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * Request flush for al batch buffers.
103a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa */
104c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshistatic int flush(JNIEnv* /*env*/, jobject /*obj*/) {
105c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    ALOGE("activity_recognition HAL is deprecated. %s is effectively a no-op",
106c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi          __FUNCTION__);
107c02b3b5bc23b848e6e64f35fdbbbbc9dd79b7da5Ashutosh Joshi    return android::NO_INIT;
108a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa}
109a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
110a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
11176f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod sMethods[] = {
112a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa    // {"name", "signature", (void*) functionPointer },
113a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa    { "nativeClassInit", "()V", (void*) class_init },
114a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa    { "nativeInitialize", "()V", (void*) initialize },
115a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa    { "nativeRelease", "()V", (void*) release },
116a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa    { "nativeIsSupported", "()Z", (void*) is_supported },
117a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa    { "nativeGetSupportedActivities", "()[Ljava/lang/String;", (void*) get_supported_activities },
118a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa    { "nativeEnableActivityEvent", "(IIJ)I", (void*) enable_activity_event },
119a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa    { "nativeDisableActivityEvent", "(II)I", (void*) disable_activity_event },
120a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa    { "nativeFlush", "()I", (void*) flush },
121a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa};
122a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa
123a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa/**
124a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa * Registration method invoked in JNI load.
125a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa */
126a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaaint register_android_hardware_location_ActivityRecognitionHardware(JNIEnv* env) {
127a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa    return jniRegisterNativeMethods(
128a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa            env,
129a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa            "android/hardware/location/ActivityRecognitionHardware",
130a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa            sMethods,
131a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa            NELEM(sMethods));
132a4fa3b5aa53cf677b623fe346c585cb8a0c1ce26destradaa}
133