PolicyService.java revision 95bb350f38d08beeabee68323b8514f3cbfd5db5
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.email.service; 189ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 199ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.app.Service; 209ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.content.Context; 219ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.content.Intent; 229ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankimport android.os.IBinder; 239ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 24f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.email.SecurityPolicy; 25f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.emailcommon.provider.Policy; 26f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.emailcommon.service.IPolicyService; 2795bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrookimport com.android.mail.utils.LogTag; 2895bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrookimport com.android.mail.utils.LogUtils; 29f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank 309ba506c4dd498150555f6c59aa758f7467bf9236Marc Blankpublic class PolicyService extends Service { 3195bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook private static final String LOG_TAG = LogTag.getLogTag(); 329ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 339ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank private SecurityPolicy mSecurityPolicy; 349ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank private Context mContext; 359ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 369ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank private final IPolicyService.Stub mBinder = new IPolicyService.Stub() { 37aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank public boolean isActive(Policy policy) { 3895bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook try { 3995bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook return mSecurityPolicy.isActive(policy); 4095bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook } catch (RuntimeException e) { 4195bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook // Catch, log and rethrow the exception, as otherwise when the exception is 4295bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook // ultimately handled, the complete stack trace is losk 4395bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook LogUtils.e(LOG_TAG, e, "Exception thrown during call to SecurityPolicy#isActive"); 4495bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook throw e; 4595bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook } 469ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 479ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 489ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void setAccountHoldFlag(long accountId, boolean newState) { 499ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank SecurityPolicy.setAccountHoldFlag(mContext, accountId, newState); 509ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 519ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 529ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public void remoteWipe() { 5395bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook try { 5495bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook mSecurityPolicy.remoteWipe(); 5595bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook } catch (RuntimeException e) { 5695bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook // Catch, log and rethrow the exception, as otherwise when the exception is 5795bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook // ultimately handled, the complete stack trace is losk 5895bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook LogUtils.e(LOG_TAG, e, "Exception thrown during call to SecurityPolicy#remoteWipe"); 5995bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook throw e; 6095bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook } 619ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 629ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 63f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank public void setAccountPolicy(long accountId, Policy policy, String securityKey) { 6495bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook try { 6595bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook mSecurityPolicy.setAccountPolicy(accountId, policy, securityKey); 6695bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook } catch (RuntimeException e) { 6795bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook // Catch, log and rethrow the exception, as otherwise when the exception is 6895bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook // ultimately handled, the complete stack trace is losk 6995bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook LogUtils.e(LOG_TAG, e, 7095bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook "Exception thrown from call to SecurityPolicy#setAccountPolicy"); 7195bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook throw e; 7295bb350f38d08beeabee68323b8514f3cbfd5db5Paul Westbrook } 739ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 749ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank }; 759ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank 769ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank @Override 779ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank public IBinder onBind(Intent intent) { 789ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank // When we bind this service, save the context and SecurityPolicy singleton 799ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mContext = this; 809ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank mSecurityPolicy = SecurityPolicy.getInstance(this); 819ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank return mBinder; 829ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank } 839ba506c4dd498150555f6c59aa758f7467bf9236Marc Blank}