PolicyServiceProxy.java revision eb190a8d9d42ab9e4c063babc14d3b0094008bf7
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) { 61eb190a8d9d42ab9e4c063babc14d3b0094008bf7Yu Ping Hu // This is not a great situation, but it's better to act like the policy isn't enforced 62eb190a8d9d42ab9e4c063babc14d3b0094008bf7Yu Ping Hu // rather than crash. 63eb190a8d9d42ab9e4c063babc14d3b0094008bf7Yu Ping Hu LogUtils.e(TAG, "PolicyService unavailable in isActive; assuming false"); 64eb190a8d9d42ab9e4c063babc14d3b0094008bf7Yu Ping Hu return false; 659ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } else { 669ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return (Boolean)mReturn; 679ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 689ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 699ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 709ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 71f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank public void setAccountPolicy(final long accountId, final Policy policy, 72f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank final String securityKey) throws RemoteException { 739ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 74560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 759ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 76f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank mService.setAccountPolicy(accountId, policy, securityKey); 779ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 78f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank }, "setAccountPolicy"); 799ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank waitForCompletion(); 809ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 819ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 829ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 839ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void remoteWipe() throws RemoteException { 849ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 85560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 869ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 879ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService.remoteWipe(); 889ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 899ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "remoteWipe"); 909ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 919ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 929ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 939ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void setAccountHoldFlag(final long arg0, final boolean arg1) throws RemoteException { 949ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 95560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 969ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 979ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService.setAccountHoldFlag(arg0, arg1); 989ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 999ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "setAccountHoldFlag"); 1009ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1019ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1029ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank // Static methods that encapsulate the proxy calls above 103aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public static boolean isActive(Context context, Policy policies) { 1049ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1059ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return new PolicyServiceProxy(context).isActive(policies); 1069ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1079ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1089ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return false; 1099ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1109ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1119ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static void setAccountHoldFlag(Context context, Account account, boolean newState) { 1129ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1139ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank new PolicyServiceProxy(context).setAccountHoldFlag(account.mId, newState); 1149ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1159ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1169ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1179ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1189ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1199ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static void remoteWipe(Context context) { 1209ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1219ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank new PolicyServiceProxy(context).remoteWipe(); 1229ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1239ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1249ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1259ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1269ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 127f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank public static void setAccountPolicy(Context context, long accountId, Policy policy, 128f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank String securityKey) { 1299ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 130f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank new PolicyServiceProxy(context).setAccountPolicy(accountId, policy, securityKey); 131f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank return; 1329ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1339ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1349ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1359ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1369ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank} 1379ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 138