PolicyServiceProxy.java revision aeee10e57ef4d931e7708fde218d590453a82aea
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 19a7bc0319a75184ad706bb35c049af107ac3688e6Marc Blankimport com.android.emailcommon.provider.EmailContent.Account; 20aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blankimport com.android.emailcommon.provider.Policy; 219ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 229ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.content.Context; 239ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.content.Intent; 249ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.os.IBinder; 259ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.os.RemoteException; 269ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.util.Log; 279ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 289ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankpublic class PolicyServiceProxy extends ServiceProxy implements IPolicyService { 29da3c4b8261825063ddf081e9335823569b813bd3Marc Blank private static final boolean DEBUG_PROXY = false; // DO NOT CHECK THIS IN SET TO TRUE 309ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank private static final String TAG = "PolicyServiceProxy"; 319ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 329ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank // The intent used by sync adapter services to connect to the PolicyService 339ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static final String POLICY_INTENT = "com.android.email.POLICY_INTENT"; 349ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 359ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank private IPolicyService mService = null; 369ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank private Object mReturn = null; 379ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 389ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public PolicyServiceProxy(Context _context) { 399ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank super(_context, new Intent(POLICY_INTENT)); 409ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 419ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 429ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 439ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void onConnected(IBinder binder) { 449ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService = IPolicyService.Stub.asInterface(binder); 459ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 469ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 479ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public IBinder asBinder() { 489ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return null; 499ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 509ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 519ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 52aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public Policy clearUnsupportedPolicies(final Policy arg0) throws RemoteException { 539ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 549ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 559ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mReturn = mService.clearUnsupportedPolicies(arg0); 569ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 579ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "clearUnsupportedPolicies"); 589ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank waitForCompletion(); 599ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (DEBUG_PROXY) { 609ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank Log.v(TAG, "clearUnsupportedPolicies: " + ((mReturn == null) ? "null" : mReturn)); 619ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 629ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (mReturn == null) { 639ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank // Can this happen? 649ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return null; 659ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } else { 66aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank return (Policy)mReturn; 679ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 689ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 699ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 709ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 71aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public boolean isActive(final Policy arg0) throws RemoteException { 729ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 739ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 749ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mReturn = mService.isActive(arg0); 759ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 769ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "isActive"); 779ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank waitForCompletion(); 789ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (DEBUG_PROXY) { 799ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank Log.v(TAG, "isActive: " + ((mReturn == null) ? "null" : mReturn)); 809ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 819ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (mReturn == null) { 829ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank // Can this happen? 839ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return false; 849ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } else { 859ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return (Boolean)mReturn; 869ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 879ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 889ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 899ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 909ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public boolean isActiveAdmin() throws RemoteException { 919ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 929ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 939ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mReturn = mService.isActiveAdmin(); 949ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 959ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "isActiveAdmin"); 969ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank waitForCompletion(); 979ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (DEBUG_PROXY) { 989ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank Log.v(TAG, "isActiveAdmin: " + ((mReturn == null) ? "null" : mReturn)); 999ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1009ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (mReturn == null) { 1019ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank // Can this happen? 1029ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return false; 1039ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } else { 1049ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return (Boolean)mReturn; 1059ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1069ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1079ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1089ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 109aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public boolean isSupported(final Policy arg0) throws RemoteException { 1109ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 1119ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 1129ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mReturn = mService.isSupported(arg0); 1139ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1149ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "isSupported"); 1159ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank waitForCompletion(); 1169ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (DEBUG_PROXY) { 1179ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank Log.v(TAG, "isSupported: " + ((mReturn == null) ? "null" : mReturn)); 1189ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1199ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (mReturn == null) { 1209ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank // Can this happen? 1219ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return false; 1229ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } else { 1239ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return (Boolean)mReturn; 1249ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1259ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1269ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1279ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 1289ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void policiesRequired(final long arg0) throws RemoteException { 1299ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 1309ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 1319ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService.policiesRequired(arg0); 1329ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1339ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "policiesRequired"); 1349ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1359ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1369ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 1379ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void remoteWipe() throws RemoteException { 1389ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 1399ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 1409ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService.remoteWipe(); 1419ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1429ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "remoteWipe"); 1439ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1449ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1459ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 1469ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void setAccountHoldFlag(final long arg0, final boolean arg1) throws RemoteException { 1479ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 1489ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 1499ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService.setAccountHoldFlag(arg0, arg1); 1509ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1519ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "setAccountHoldFlag"); 1529ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1539ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1549ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 155aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public void policiesUpdated(final long arg0) throws RemoteException { 1569ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 1579ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 158aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank mService.policiesUpdated(arg0); 1599ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 160aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank }, "policiesUpdated"); 1619ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1629ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1639ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank // Static methods that encapsulate the proxy calls above 164aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public static boolean isActive(Context context, Policy policies) { 1659ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1669ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return new PolicyServiceProxy(context).isActive(policies); 1679ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1689ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1699ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return false; 1709ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1719ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1729ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static void policiesRequired(Context context, long accountId) { 1739ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1749ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank new PolicyServiceProxy(context).policiesRequired(accountId); 1759ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1769ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1779ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1789ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1799ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 180aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public static void policiesUpdated(Context context, long accountId) { 1819ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 182aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank new PolicyServiceProxy(context).policiesUpdated(accountId); 1839ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1849ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1859ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1869ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1879ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1889ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static void setAccountHoldFlag(Context context, Account account, boolean newState) { 1899ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1909ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank new PolicyServiceProxy(context).setAccountHoldFlag(account.mId, newState); 1919ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1929ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1939ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1949ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1959ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1969ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static boolean isActiveAdmin(Context context) { 1979ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1989ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return new PolicyServiceProxy(context).isActiveAdmin(); 1999ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 2009ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2019ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return false; 2029ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2039ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 2049ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static void remoteWipe(Context context) { 2059ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 2069ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank new PolicyServiceProxy(context).remoteWipe(); 2079ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 2089ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 2099ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2109ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2119ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 212aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public static boolean isSupported(Context context, Policy policy) { 2139ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 214aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank return new PolicyServiceProxy(context).isSupported(policy); 2159ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 2169ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2179ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return false; 2189ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2199ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 220aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public static Policy clearUnsupportedPolicies(Context context, Policy policy) { 2219ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 222aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank return new PolicyServiceProxy(context).clearUnsupportedPolicies(policy); 2239ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 2249ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2259ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 2269ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2279ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank} 2289ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 229