| /* |
| * Copyright 2017 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.server.location; |
| |
| import android.hardware.location.ContextHubTransaction; |
| import android.hardware.location.NanoAppState; |
| |
| import java.util.List; |
| import java.util.concurrent.TimeUnit; |
| |
| /** |
| * An abstract class representing transactions requested to the Context Hub Service. |
| * |
| * @hide |
| */ |
| /* package */ abstract class ContextHubServiceTransaction { |
| private final int mTransactionId; |
| @ContextHubTransaction.Type |
| private final int mTransactionType; |
| |
| /* |
| * true if the transaction has already completed, false otherwise |
| */ |
| private boolean mIsComplete = false; |
| |
| /* package */ ContextHubServiceTransaction(int id, int type) { |
| mTransactionId = id; |
| mTransactionType = type; |
| } |
| |
| /** |
| * Starts this transaction with a Context Hub. |
| * |
| * All instances of this class must implement this method by making an asynchronous request to |
| * a hub. |
| * |
| * @return the synchronous error code of the transaction start |
| */ |
| /* package */ |
| abstract int onTransact(); |
| |
| /** |
| * A function to invoke when the transaction completes. |
| * |
| * For transactions with expected contents (such as a query), the class instance should |
| * implement the appropriate behavior (e.g. invoke onQueryResponse with an empty list). |
| * |
| * @param result the result of the transaction |
| */ |
| /* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) { |
| } |
| |
| /** |
| * A function to invoke when a query transaction completes. |
| * |
| * Only relevant for query transactions. |
| * |
| * @param result the result of the query |
| * @param nanoAppStateList the list of nanoapps given by the query response |
| */ |
| /* package */ void onQueryResponse( |
| @ContextHubTransaction.Result int result, List<NanoAppState> nanoAppStateList) { |
| } |
| |
| /** |
| * @return the ID of this transaction |
| */ |
| /* package */ int getTransactionId() { |
| return mTransactionId; |
| } |
| |
| /** |
| * @return the type of this transaction |
| * @see ContextHubTransaction.Type |
| */ |
| @ContextHubTransaction.Type |
| /* package */ int getTransactionType() { |
| return mTransactionType; |
| } |
| |
| /** |
| * Gets the timeout period as defined in IContexthub.hal |
| * |
| * @return the timeout of this transaction in the specified time unit |
| */ |
| /* package */ long getTimeout(TimeUnit unit) { |
| switch (mTransactionType) { |
| case ContextHubTransaction.TYPE_LOAD_NANOAPP: |
| return unit.convert(30L, TimeUnit.SECONDS); |
| case ContextHubTransaction.TYPE_UNLOAD_NANOAPP: |
| case ContextHubTransaction.TYPE_ENABLE_NANOAPP: |
| case ContextHubTransaction.TYPE_DISABLE_NANOAPP: |
| case ContextHubTransaction.TYPE_QUERY_NANOAPPS: |
| // Note: query timeout is not specified at the HAL |
| default: /* fall through */ |
| return unit.convert(5L, TimeUnit.SECONDS); |
| } |
| } |
| |
| /** |
| * Marks the transaction as complete. |
| * |
| * Should only be called as a result of a response from a Context Hub callback |
| */ |
| /* package */ void setComplete() { |
| mIsComplete = true; |
| } |
| |
| /** |
| * @return true if the transaction has already completed, false otherwise |
| */ |
| /* package */ boolean isComplete() { |
| return mIsComplete; |
| } |
| |
| @Override |
| public String toString() { |
| return ContextHubTransaction.typeToString(mTransactionType, true /* upperCase */) |
| + " transaction (ID = " + mTransactionId + ")"; |
| } |
| } |