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