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