PolicyServiceProxy.java revision 560bfadc3151f7a06f3b06e9a6c92cfa534c63ec
19ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank/* 29ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * Copyright (C) 2011 The Android Open Source Project 39ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * 49ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * Licensed under the Apache License, Version 2.0 (the "License"); 59ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * you may not use this file except in compliance with the License. 69ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * You may obtain a copy of the License at 79ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * 89ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * http://www.apache.org/licenses/LICENSE-2.0 99ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * 109ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * Unless required by applicable law or agreed to in writing, software 119ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * distributed under the License is distributed on an "AS IS" BASIS, 129ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * See the License for the specific language governing permissions and 149ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank * limitations under the License. 159ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank */ 169ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 179ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankpackage com.android.emailcommon.service; 189ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 199ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.content.Context; 209ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.os.IBinder; 219ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.os.RemoteException; 229ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 23c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521Marc Blankimport com.android.emailcommon.provider.Account; 24c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521Marc Blankimport com.android.emailcommon.provider.Policy; 25560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedyimport com.android.mail.utils.LogUtils; 26c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521Marc Blank 279ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankpublic class PolicyServiceProxy extends ServiceProxy implements IPolicyService { 28da3c4b8261825063ddf081e9335823569b813bd3Marc Blank private static final boolean DEBUG_PROXY = false; // DO NOT CHECK THIS IN SET TO TRUE 299ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank private static final String TAG = "PolicyServiceProxy"; 309ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 319ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank private IPolicyService mService = null; 329ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank private Object mReturn = null; 339ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 349ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public PolicyServiceProxy(Context _context) { 35e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank super(_context, getIntentForEmailPackage(_context, "POLICY_INTENT")); 369ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 379ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 389ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 399ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void onConnected(IBinder binder) { 409ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService = IPolicyService.Stub.asInterface(binder); 419ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 429ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 43560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 449ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public IBinder asBinder() { 459ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return null; 469ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 479ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 489ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 49aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public boolean isActive(final Policy arg0) throws RemoteException { 509ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 51560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 529ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 539ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mReturn = mService.isActive(arg0); 549ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 559ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "isActive"); 569ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank waitForCompletion(); 579ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (DEBUG_PROXY) { 58560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy LogUtils.v(TAG, "isActive: " + ((mReturn == null) ? "null" : mReturn)); 599ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 609ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (mReturn == null) { 61c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521Marc Blank throw new ServiceUnavailableException("isActive"); 629ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } else { 639ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return (Boolean)mReturn; 649ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 659ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 669ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 679ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 68f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank public void setAccountPolicy(final long accountId, final Policy policy, 69f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank final String securityKey) throws RemoteException { 709ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 71560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 729ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 73f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank mService.setAccountPolicy(accountId, policy, securityKey); 749ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 75f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank }, "setAccountPolicy"); 769ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank waitForCompletion(); 779ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 789ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 799ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 809ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void remoteWipe() throws RemoteException { 819ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 82560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 839ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 849ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService.remoteWipe(); 859ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 869ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "remoteWipe"); 879ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 889ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 899ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 909ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void setAccountHoldFlag(final long arg0, final boolean arg1) throws RemoteException { 919ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 92560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 939ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 949ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService.setAccountHoldFlag(arg0, arg1); 959ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 969ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "setAccountHoldFlag"); 979ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 989ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 999ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank // Static methods that encapsulate the proxy calls above 100aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public static boolean isActive(Context context, Policy policies) { 1019ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1029ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return new PolicyServiceProxy(context).isActive(policies); 1039ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1049ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1059ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return false; 1069ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1079ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1089ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static void setAccountHoldFlag(Context context, Account account, boolean newState) { 1099ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1109ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank new PolicyServiceProxy(context).setAccountHoldFlag(account.mId, newState); 1119ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1129ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1139ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1149ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1159ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1169ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static void remoteWipe(Context context) { 1179ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1189ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank new PolicyServiceProxy(context).remoteWipe(); 1199ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1209ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1219ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1229ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1239ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 124f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank public static void setAccountPolicy(Context context, long accountId, Policy policy, 125f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank String securityKey) { 1269ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 127f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank new PolicyServiceProxy(context).setAccountPolicy(accountId, policy, securityKey); 128f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank return; 1299ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1309ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1319ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1329ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1339ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank} 1349ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 135