PolicyServiceProxy.java revision c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521
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.content.Intent; 219ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.os.IBinder; 229ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.os.RemoteException; 239ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.util.Log; 249ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 25c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521Marc Blankimport com.android.emailcommon.provider.Account; 26c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521Marc Blankimport com.android.emailcommon.provider.Policy; 27c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521Marc 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) { 63c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521Marc Blank throw new ServiceUnavailableException("clearUnsupportedPolicies"); 649ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } else { 65aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank return (Policy)mReturn; 669ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 679ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 689ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 699ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 70aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public boolean isActive(final Policy 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) { 81c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521Marc Blank throw new ServiceUnavailableException("isActive"); 829ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } else { 839ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return (Boolean)mReturn; 849ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 859ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 869ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 879ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 889ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public boolean isActiveAdmin() throws RemoteException { 899ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 909ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 919ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mReturn = mService.isActiveAdmin(); 929ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 939ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "isActiveAdmin"); 949ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank waitForCompletion(); 959ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (DEBUG_PROXY) { 969ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank Log.v(TAG, "isActiveAdmin: " + ((mReturn == null) ? "null" : mReturn)); 979ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 989ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (mReturn == null) { 99c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521Marc Blank throw new ServiceUnavailableException("isActiveAdmin"); 1009ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } else { 1019ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return (Boolean)mReturn; 1029ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1039ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1049ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1059ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 106aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public boolean isSupported(final Policy arg0) throws RemoteException { 1079ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 1089ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 1099ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mReturn = mService.isSupported(arg0); 1109ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1119ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "isSupported"); 1129ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank waitForCompletion(); 1139ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (DEBUG_PROXY) { 1149ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank Log.v(TAG, "isSupported: " + ((mReturn == null) ? "null" : mReturn)); 1159ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1169ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank if (mReturn == null) { 117c28fdfeaaddbd7d3f3b8f78895303f7a9ae5a521Marc Blank throw new ServiceUnavailableException("isSupported"); 1189ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } else { 1199ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return (Boolean)mReturn; 1209ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1219ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1229ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1239ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 1249ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void policiesRequired(final long arg0) throws RemoteException { 1259ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 1269ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 1279ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService.policiesRequired(arg0); 1289ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1299ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "policiesRequired"); 1309ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1319ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1329ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 1339ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void remoteWipe() throws RemoteException { 1349ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 1359ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 1369ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService.remoteWipe(); 1379ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1389ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "remoteWipe"); 1399ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1409ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1419ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 1429ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void setAccountHoldFlag(final long arg0, final boolean arg1) throws RemoteException { 1439ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 1449ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 1459ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mService.setAccountHoldFlag(arg0, arg1); 1469ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1479ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }, "setAccountHoldFlag"); 1489ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1499ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1509ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 151aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public void policiesUpdated(final long arg0) throws RemoteException { 1529ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank setTask(new ProxyTask() { 1539ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void run() throws RemoteException { 154aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank mService.policiesUpdated(arg0); 1559ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 156aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank }, "policiesUpdated"); 1579ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1589ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1599ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank // Static methods that encapsulate the proxy calls above 160aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public static boolean isActive(Context context, Policy policies) { 1619ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1629ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return new PolicyServiceProxy(context).isActive(policies); 1639ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1649ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1659ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return false; 1669ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1679ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1689ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static void policiesRequired(Context context, long accountId) { 1699ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1709ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank new PolicyServiceProxy(context).policiesRequired(accountId); 1719ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1729ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1739ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1749ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1759ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 176aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public static void policiesUpdated(Context context, long accountId) { 1779ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 178aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank new PolicyServiceProxy(context).policiesUpdated(accountId); 1799ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1809ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1819ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1829ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1839ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1849ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static void setAccountHoldFlag(Context context, Account account, boolean newState) { 1859ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1869ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank new PolicyServiceProxy(context).setAccountHoldFlag(account.mId, newState); 1879ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1889ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 1899ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1909ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1919ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 1929ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static boolean isActiveAdmin(Context context) { 1939ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 1949ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return new PolicyServiceProxy(context).isActiveAdmin(); 1959ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 1969ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1979ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return false; 1989ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 1999ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 2009ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public static void remoteWipe(Context context) { 2019ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 2029ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank new PolicyServiceProxy(context).remoteWipe(); 2039ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 2049ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 2059ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2069ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2079ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 208aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public static boolean isSupported(Context context, Policy policy) { 2099ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 210aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank return new PolicyServiceProxy(context).isSupported(policy); 2119ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 2129ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2139ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return false; 2149ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2159ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 216aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public static Policy clearUnsupportedPolicies(Context context, Policy policy) { 2179ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank try { 218aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank return new PolicyServiceProxy(context).clearUnsupportedPolicies(policy); 2199ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } catch (RemoteException e) { 2209ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2219ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank throw new IllegalStateException("PolicyService transaction failed"); 2229ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 2239ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank} 2249ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 225