replicant-packages_apps_Email/emailcommon/src/com/android/emailcommon/service/PolicyServiceProxy.java

176 lines
5.9 KiB
Java
Executable File

/*
* Copyright (C) 2011 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.emailcommon.service;
import android.content.Context;
import android.os.IBinder;
import android.os.RemoteException;
import com.android.emailcommon.provider.Account;
import com.android.emailcommon.provider.Policy;
import com.android.mail.utils.LogUtils;
public class PolicyServiceProxy extends ServiceProxy implements IPolicyService {
private static final boolean DEBUG_PROXY = false; // DO NOT CHECK THIS IN SET TO TRUE
private static final String TAG = "PolicyServiceProxy";
private IPolicyService mService = null;
private Object mReturn = null;
public PolicyServiceProxy(Context _context) {
super(_context, getIntentForEmailPackage(_context, "POLICY_INTENT"));
}
@Override
public void onConnected(IBinder binder) {
mService = IPolicyService.Stub.asInterface(binder);
}
@Override
public IBinder asBinder() {
return null;
}
@Override
public boolean isActive(final Policy arg0) throws RemoteException {
setTask(new ProxyTask() {
@Override
public void run() throws RemoteException {
mReturn = mService.isActive(arg0);
}
}, "isActive");
waitForCompletion();
if (DEBUG_PROXY) {
LogUtils.v(TAG, "isActive: " + ((mReturn == null) ? "null" : mReturn));
}
if (mReturn == null) {
// This is not a great situation, but it's better to act like the policy isn't enforced
// rather than crash.
LogUtils.e(TAG, "PolicyService unavailable in isActive; assuming false");
return false;
} else {
return (Boolean)mReturn;
}
}
@Override
public void setAccountPolicy(final long accountId, final Policy policy,
final String securityKey) throws RemoteException {
setAccountPolicy2(accountId, policy, securityKey, true /* notify */);
}
@Override
public void setAccountPolicy2(final long accountId, final Policy policy,
final String securityKey, final boolean notify) throws RemoteException {
setTask(new ProxyTask() {
@Override
public void run() throws RemoteException {
mService.setAccountPolicy2(accountId, policy, securityKey, notify);
}
}, "setAccountPolicy2");
waitForCompletion();
}
public boolean canDisableCamera() throws RemoteException {
setTask(new ProxyTask() {
@Override
public void run() throws RemoteException {
mReturn = mService.canDisableCamera();
}
}, "canDisableCamera");
waitForCompletion();
if (mReturn == null) {
// This is not a great situation, but it's better to act like the policy isn't enforced
// rather than crash.
LogUtils.e(TAG, "PolicyService unavailable in canDisableCamera; assuming false");
return false;
} else {
return (Boolean)mReturn;
}
}
@Override
public void remoteWipe() throws RemoteException {
setTask(new ProxyTask() {
@Override
public void run() throws RemoteException {
mService.remoteWipe();
}
}, "remoteWipe");
}
@Override
public void setAccountHoldFlag(final long arg0, final boolean arg1) throws RemoteException {
setTask(new ProxyTask() {
@Override
public void run() throws RemoteException {
mService.setAccountHoldFlag(arg0, arg1);
}
}, "setAccountHoldFlag");
}
// Static methods that encapsulate the proxy calls above
public static boolean isActive(Context context, Policy policies) {
try {
return new PolicyServiceProxy(context).isActive(policies);
} catch (RemoteException e) {
}
return false;
}
public static void setAccountHoldFlag(Context context, Account account, boolean newState) {
try {
new PolicyServiceProxy(context).setAccountHoldFlag(account.mId, newState);
} catch (RemoteException e) {
throw new IllegalStateException("PolicyService transaction failed");
}
}
public static void remoteWipe(Context context) {
try {
new PolicyServiceProxy(context).remoteWipe();
} catch (RemoteException e) {
throw new IllegalStateException("PolicyService transaction failed");
}
}
public static void setAccountPolicy(Context context, long accountId, Policy policy,
String securityKey) {
setAccountPolicy2(context, accountId, policy, securityKey, true /* notify */);
}
public static void setAccountPolicy2(Context context, long accountId, Policy policy,
String securityKey, boolean notify) {
try {
new PolicyServiceProxy(context).setAccountPolicy2(accountId, policy, securityKey,
notify);
return;
} catch (RemoteException e) {
}
throw new IllegalStateException("PolicyService transaction failed");
}
public static boolean canDisableCamera(Context context) {
try {
return new PolicyServiceProxy(context).canDisableCamera();
} catch (RemoteException e) {
}
return false;
}
}