1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.email.service; 18 19import android.app.Service; 20import android.content.Context; 21import android.content.Intent; 22import android.os.Bundle; 23import android.os.IBinder; 24import android.os.RemoteException; 25 26import com.android.emailcommon.Api; 27import com.android.emailcommon.provider.HostAuth; 28import com.android.emailcommon.service.EmailServiceProxy; 29import com.android.emailcommon.service.IEmailService; 30import com.android.emailcommon.service.IEmailServiceCallback; 31import com.android.emailcommon.service.SearchParams; 32 33/** 34 * Utility functions for EmailService support. 35 */ 36public class EmailServiceUtils { 37 /** 38 * Starts an EmailService by name 39 */ 40 public static void startService(Context context, String intentAction) { 41 context.startService(new Intent(intentAction)); 42 } 43 44 /** 45 * Returns an {@link IEmailService} for the service; otherwise returns an empty 46 * {@link IEmailService} implementation. 47 * 48 * @param context 49 * @param callback Object to get callback, or can be null 50 */ 51 public static IEmailService getService(Context context, String intentAction, 52 IEmailServiceCallback callback) { 53 return new EmailServiceProxy(context, intentAction, callback); 54 } 55 56 /** 57 * Determine if the EmailService is available 58 */ 59 public static boolean isServiceAvailable(Context context, String intentAction) { 60 return new EmailServiceProxy(context, intentAction, null).test(); 61 } 62 63 public static void startExchangeService(Context context) { 64 startService(context, EmailServiceProxy.EXCHANGE_INTENT); 65 } 66 67 public static IEmailService getExchangeService(Context context, 68 IEmailServiceCallback callback) { 69 return getService(context, EmailServiceProxy.EXCHANGE_INTENT, callback); 70 } 71 72 public static boolean isExchangeAvailable(Context context) { 73 return isServiceAvailable(context, EmailServiceProxy.EXCHANGE_INTENT); 74 } 75 76 /** 77 * An empty {@link IEmailService} implementation which is used instead of 78 * {@link com.android.exchange.ExchangeService} on the build with no exchange support. 79 * 80 * <p>In theory, the service in question isn't used on the no-exchange-support build, 81 * because we won't have any exchange accounts in that case, so we wouldn't have to have this 82 * class. However, there are a few places we do use the service even if there's no exchange 83 * accounts (e.g. setLogging), so this class is added for safety and simplicity. 84 */ 85 public static class NullEmailService extends Service implements IEmailService { 86 public static final NullEmailService INSTANCE = new NullEmailService(); 87 88 public int getApiLevel() { 89 return Api.LEVEL; 90 } 91 92 public Bundle autoDiscover(String userName, String password) throws RemoteException { 93 return Bundle.EMPTY; 94 } 95 96 public boolean createFolder(long accountId, String name) throws RemoteException { 97 return false; 98 } 99 100 public boolean deleteFolder(long accountId, String name) throws RemoteException { 101 return false; 102 } 103 104 public void hostChanged(long accountId) throws RemoteException { 105 } 106 107 public void loadAttachment(long attachmentId, boolean background) throws RemoteException { 108 } 109 110 public void loadMore(long messageId) throws RemoteException { 111 } 112 113 public boolean renameFolder(long accountId, String oldName, String newName) 114 throws RemoteException { 115 return false; 116 } 117 118 public void sendMeetingResponse(long messageId, int response) throws RemoteException { 119 } 120 121 public void setCallback(IEmailServiceCallback cb) throws RemoteException { 122 } 123 124 public void setLogging(int flags) throws RemoteException { 125 } 126 127 public void startSync(long mailboxId, boolean userRequest) throws RemoteException { 128 } 129 130 public void stopSync(long mailboxId) throws RemoteException { 131 } 132 133 public void updateFolderList(long accountId) throws RemoteException { 134 } 135 136 public Bundle validate(HostAuth hostAuth) throws RemoteException { 137 return null; 138 } 139 140 public void deleteAccountPIMData(long accountId) throws RemoteException { 141 } 142 143 public int searchMessages(long accountId, SearchParams searchParams, long destMailboxId) { 144 return 0; 145 } 146 147 public IBinder asBinder() { 148 return null; 149 } 150 151 @Override 152 public IBinder onBind(Intent intent) { 153 return null; 154 } 155 156 @Override 157 public void sendMail(long accountId) throws RemoteException { 158 } 159 } 160} 161