Merge changes I5a26c853,Ie4ec660a

* changes:
  Implements disableNanoApp
  Implements enableNanoApp
This commit is contained in:
TreeHugger Robot
2017-12-15 16:23:23 +00:00
committed by Android (Google) Code Review
4 changed files with 160 additions and 15 deletions

View File

@@ -271,7 +271,7 @@ public final class ContextHubManager {
throw new UnsupportedOperationException("TODO: Implement this");
}
/*
/**
* Helper function to generate a stub for a non-query transaction callback.
*
* @param transaction the transaction to unblock when complete
@@ -297,7 +297,7 @@ public final class ContextHubManager {
};
}
/*
/**
* Helper function to generate a stub for a query transaction callback.
*
* @param transaction the transaction to unblock when complete
@@ -392,7 +392,17 @@ public final class ContextHubManager {
*/
@RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE)
public ContextHubTransaction<Void> enableNanoApp(ContextHubInfo hubInfo, long nanoAppId) {
throw new UnsupportedOperationException("TODO: Implement this");
ContextHubTransaction<Void> transaction =
new ContextHubTransaction<>(ContextHubTransaction.TYPE_ENABLE_NANOAPP);
IContextHubTransactionCallback callback = createTransactionCallback(transaction);
try {
mService.enableNanoApp(hubInfo.getId(), callback, nanoAppId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
return transaction;
}
/**
@@ -407,7 +417,17 @@ public final class ContextHubManager {
*/
@RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE)
public ContextHubTransaction<Void> disableNanoApp(ContextHubInfo hubInfo, long nanoAppId) {
throw new UnsupportedOperationException("TODO: Implement this");
ContextHubTransaction<Void> transaction =
new ContextHubTransaction<>(ContextHubTransaction.TYPE_DISABLE_NANOAPP);
IContextHubTransactionCallback callback = createTransactionCallback(transaction);
try {
mService.disableNanoApp(hubInfo.getId(), callback, nanoAppId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
return transaction;
}
/**

View File

@@ -70,6 +70,16 @@ interface IContextHubService {
int contextHubId, in IContextHubTransactionCallback transactionCallback,
long nanoAppId);
// Enables a nanoapp at the specified hub
void enableNanoApp(
int contextHubId, in IContextHubTransactionCallback transactionCallback,
long nanoAppId);
// Disables a nanoapp at the specified hub
void disableNanoApp(
int contextHubId, in IContextHubTransactionCallback transactionCallback,
long nanoAppId);
// Queries for a list of nanoapps
void queryNanoApps(int contextHubId, in IContextHubTransactionCallback transactionCallback);
}

View File

@@ -642,11 +642,10 @@ public class ContextHubService extends IContextHubService.Stub {
/**
* Loads a nanoapp binary at the specified Context hub.
*
* @param contextHubId the ID of the hub to load the binary
* @param contextHubId the ID of the hub to load the binary
* @param transactionCallback the client-facing transaction callback interface
* @param nanoAppBinary the binary to load
* @param nanoAppBinary the binary to load
*
* @throws RemoteException
* @throws IllegalStateException if the transaction queue is full
*/
@Override
@@ -673,11 +672,10 @@ public class ContextHubService extends IContextHubService.Stub {
/**
* Unloads a nanoapp from the specified Context Hub.
*
* @param contextHubId the ID of the hub to unload the nanoapp
* @param contextHubId the ID of the hub to unload the nanoapp
* @param transactionCallback the client-facing transaction callback interface
* @param nanoAppId the ID of the nanoapp to unload
* @param nanoAppId the ID of the nanoapp to unload
*
* @throws RemoteException
* @throws IllegalStateException if the transaction queue is full
*/
@Override
@@ -695,13 +693,60 @@ public class ContextHubService extends IContextHubService.Stub {
mTransactionManager.addTransaction(transaction);
}
/**
* Enables a nanoapp at the specified Context Hub.
*
* @param contextHubId the ID of the hub to enable the nanoapp
* @param transactionCallback the client-facing transaction callback interface
* @param nanoAppId the ID of the nanoapp to enable
*
* @throws IllegalStateException if the transaction queue is full
*/
@Override
public void enableNanoApp(
int contextHubId, IContextHubTransactionCallback transactionCallback, long nanoAppId)
throws RemoteException {
checkPermissions();
if (!checkHalProxyAndContextHubId(
contextHubId, transactionCallback, ContextHubTransaction.TYPE_ENABLE_NANOAPP)) {
return;
}
ContextHubServiceTransaction transaction = mTransactionManager.createEnableTransaction(
contextHubId, nanoAppId, transactionCallback);
mTransactionManager.addTransaction(transaction);
}
/**
* Disables a nanoapp at the specified Context Hub.
*
* @param contextHubId the ID of the hub to disable the nanoapp
* @param transactionCallback the client-facing transaction callback interface
* @param nanoAppId the ID of the nanoapp to disable
*
* @throws IllegalStateException if the transaction queue is full
*/
@Override
public void disableNanoApp(
int contextHubId, IContextHubTransactionCallback transactionCallback, long nanoAppId)
throws RemoteException {
checkPermissions();
if (!checkHalProxyAndContextHubId(
contextHubId, transactionCallback, ContextHubTransaction.TYPE_DISABLE_NANOAPP)) {
return;
}
ContextHubServiceTransaction transaction = mTransactionManager.createDisableTransaction(
contextHubId, nanoAppId, transactionCallback);
mTransactionManager.addTransaction(transaction);
}
/**
* Queries for a list of nanoapps from the specified Context hub.
*
* @param contextHubId the ID of the hub to query
* @param contextHubId the ID of the hub to query
* @param transactionCallback the client-facing transaction callback interface
*
* @throws RemoteException
* @throws IllegalStateException if the transaction queue is full
*/
@Override
@@ -713,8 +758,8 @@ public class ContextHubService extends IContextHubService.Stub {
return;
}
ContextHubServiceTransaction transaction =
mTransactionManager.createQueryTransaction(contextHubId, transactionCallback);
ContextHubServiceTransaction transaction = mTransactionManager.createQueryTransaction(
contextHubId, transactionCallback);
mTransactionManager.addTransaction(transaction);
}

View File

@@ -143,7 +143,7 @@ import java.util.concurrent.atomic.AtomicInteger;
/**
* Creates a transaction for unloading a nanoapp.
*
* @param contextHubId the ID of the hub to load the nanoapp to
* @param contextHubId the ID of the hub to unload the nanoapp from
* @param nanoAppId the ID of the nanoapp to unload
* @param onCompleteCallback the client on complete callback
* @return the generated transaction
@@ -181,6 +181,76 @@ import java.util.concurrent.atomic.AtomicInteger;
};
}
/**
* Creates a transaction for enabling a nanoapp.
*
* @param contextHubId the ID of the hub to enable the nanoapp on
* @param nanoAppId the ID of the nanoapp to enable
* @param onCompleteCallback the client on complete callback
* @return the generated transaction
*/
/* package */ ContextHubServiceTransaction createEnableTransaction(
int contextHubId, long nanoAppId, IContextHubTransactionCallback onCompleteCallback) {
return new ContextHubServiceTransaction(
mNextAvailableId.getAndIncrement(), ContextHubTransaction.TYPE_ENABLE_NANOAPP) {
@Override
/* package */ int onTransact() {
try {
return mContextHubProxy.enableNanoApp(
contextHubId, nanoAppId, this.getTransactionId());
} catch (RemoteException e) {
Log.e(TAG, "RemoteException while trying to enable nanoapp with ID 0x" +
Long.toHexString(nanoAppId), e);
return Result.UNKNOWN_FAILURE;
}
}
@Override
/* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
try {
onCompleteCallback.onTransactionComplete(result);
} catch (RemoteException e) {
Log.e(TAG, "RemoteException while calling client onTransactionComplete", e);
}
}
};
}
/**
* Creates a transaction for disabling a nanoapp.
*
* @param contextHubId the ID of the hub to disable the nanoapp on
* @param nanoAppId the ID of the nanoapp to disable
* @param onCompleteCallback the client on complete callback
* @return the generated transaction
*/
/* package */ ContextHubServiceTransaction createDisableTransaction(
int contextHubId, long nanoAppId, IContextHubTransactionCallback onCompleteCallback) {
return new ContextHubServiceTransaction(
mNextAvailableId.getAndIncrement(), ContextHubTransaction.TYPE_DISABLE_NANOAPP) {
@Override
/* package */ int onTransact() {
try {
return mContextHubProxy.disableNanoApp(
contextHubId, nanoAppId, this.getTransactionId());
} catch (RemoteException e) {
Log.e(TAG, "RemoteException while trying to disable nanoapp with ID 0x" +
Long.toHexString(nanoAppId), e);
return Result.UNKNOWN_FAILURE;
}
}
@Override
/* package */ void onTransactionComplete(@ContextHubTransaction.Result int result) {
try {
onCompleteCallback.onTransactionComplete(result);
} catch (RemoteException e) {
Log.e(TAG, "RemoteException while calling client onTransactionComplete", e);
}
}
};
}
/**
* Creates a transaction for querying for a list of nanoapps.
*