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