19fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki/* 29fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * Copyright (C) 2010 The Android Open Source Project 39fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * 49fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 59fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * you may not use this file except in compliance with the License. 69fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * You may obtain a copy of the License at 79fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * 89fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 99fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * 109fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * Unless required by applicable law or agreed to in writing, software 119fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 129fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * See the License for the specific language governing permissions and 149fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki * limitations under the License. 159fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki */ 169fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki 1766a47b8dac5e97e37c30b928bc5a227d74baada9Marc Blankpackage com.android.email.service; 189fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki 1903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blankimport android.app.Service; 209fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onukiimport android.content.Context; 219fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onukiimport android.content.Intent; 2203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blankimport android.os.Bundle; 2303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blankimport android.os.IBinder; 2403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blankimport android.os.RemoteException; 25e1a6088ee4e3f0e4344dd9bc38029b6d01431eabMarc Blank 2603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blankimport com.android.emailcommon.Api; 27e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blankimport com.android.emailcommon.provider.HostAuth; 2866a47b8dac5e97e37c30b928bc5a227d74baada9Marc Blankimport com.android.emailcommon.service.EmailServiceProxy; 2966a47b8dac5e97e37c30b928bc5a227d74baada9Marc Blankimport com.android.emailcommon.service.IEmailService; 3066a47b8dac5e97e37c30b928bc5a227d74baada9Marc Blankimport com.android.emailcommon.service.IEmailServiceCallback; 3103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blankimport com.android.emailcommon.service.SearchParams; 3266a47b8dac5e97e37c30b928bc5a227d74baada9Marc Blank 339fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki/** 3466a47b8dac5e97e37c30b928bc5a227d74baada9Marc Blank * Utility functions for EmailService support. 359fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki */ 3666a47b8dac5e97e37c30b928bc5a227d74baada9Marc Blankpublic class EmailServiceUtils { 379fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki /** 38bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Starts an EmailService by name 399fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki */ 40bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void startService(Context context, String intentAction) { 41bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook context.startService(new Intent(intentAction)); 429fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki } 439fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki 449fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki /** 45bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Returns an {@link IEmailService} for the service; otherwise returns an empty 46bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * {@link IEmailService} implementation. 47bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 48bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param context 49bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * @param callback Object to get callback, or can be null 509fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki */ 51bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static IEmailService getService(Context context, String intentAction, 52bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook IEmailServiceCallback callback) { 53bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return new EmailServiceProxy(context, intentAction, callback); 54f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 55f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank 56f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank /** 57bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Determine if the EmailService is available 58f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank */ 59bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static boolean isServiceAvailable(Context context, String intentAction) { 60bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return new EmailServiceProxy(context, intentAction, null).test(); 61f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 62f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank 63bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static void startExchangeService(Context context) { 64bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook startService(context, EmailServiceProxy.EXCHANGE_INTENT); 653a5c1fb274a9ce72d708d88509bf2607cb018dddMarc Blank } 663a5c1fb274a9ce72d708d88509bf2607cb018dddMarc Blank 67bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static IEmailService getExchangeService(Context context, 68bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook IEmailServiceCallback callback) { 69bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return getService(context, EmailServiceProxy.EXCHANGE_INTENT, callback); 70f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 71f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank 72bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static boolean isExchangeAvailable(Context context) { 73bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return isServiceAvailable(context, EmailServiceProxy.EXCHANGE_INTENT); 74f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 75f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank 76f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank /** 77bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * An empty {@link IEmailService} implementation which is used instead of 78bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * {@link com.android.exchange.ExchangeService} on the build with no exchange support. 79bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * 80bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * <p>In theory, the service in question isn't used on the no-exchange-support build, 81bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * because we won't have any exchange accounts in that case, so we wouldn't have to have this 82bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * class. However, there are a few places we do use the service even if there's no exchange 83bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * accounts (e.g. setLogging), so this class is added for safety and simplicity. 84f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank */ 85bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static class NullEmailService extends Service implements IEmailService { 86bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public static final NullEmailService INSTANCE = new NullEmailService(); 87f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank 88bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public int getApiLevel() { 89bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return Api.LEVEL; 90f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 9166a47b8dac5e97e37c30b928bc5a227d74baada9Marc Blank 92bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public Bundle autoDiscover(String userName, String password) throws RemoteException { 93bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return Bundle.EMPTY; 94f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 95c18f8f615f134a2b391d06e2d8d49434a8bb94e5Makoto Onuki 96bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public boolean createFolder(long accountId, String name) throws RemoteException { 97bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return false; 9870edcf05387df33f4761b766add6b80999e425e9Marc Blank } 9970edcf05387df33f4761b766add6b80999e425e9Marc Blank 100bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public boolean deleteFolder(long accountId, String name) throws RemoteException { 101bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return false; 102e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank } 103e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank 104bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public void hostChanged(long accountId) throws RemoteException { 105e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank } 106e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank 107bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public void loadAttachment(long attachmentId, boolean background) throws RemoteException { 108e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank } 109e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank 110bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public void loadMore(long messageId) throws RemoteException { 111e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank } 112e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank 113bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public boolean renameFolder(long accountId, String oldName, String newName) 114bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook throws RemoteException { 115bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return false; 11670edcf05387df33f4761b766add6b80999e425e9Marc Blank } 11703cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 118bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public void sendMeetingResponse(long messageId, int response) throws RemoteException { 11903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 120e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank 121bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public void setCallback(IEmailServiceCallback cb) throws RemoteException { 12203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 12303cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 124bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public void setLogging(int flags) throws RemoteException { 12503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 12603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 127f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank public void startSync(long mailboxId, boolean userRequest) throws RemoteException { 12803cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 12903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 130f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank public void stopSync(long mailboxId) throws RemoteException { 13103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 13203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 133f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank public void updateFolderList(long accountId) throws RemoteException { 13403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 13503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 136bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public Bundle validate(HostAuth hostAuth) throws RemoteException { 137f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank return null; 13803cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 13903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 14003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank public void deleteAccountPIMData(long accountId) throws RemoteException { 14103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 14203cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 143bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public int searchMessages(long accountId, SearchParams searchParams, long destMailboxId) { 14403cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank return 0; 14503cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 14603cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 147bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public IBinder asBinder() { 148bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return null; 14903cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank } 15003cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank 15103cd72805dab0379ed255d151f1c17cc60655fc3Marc Blank @Override 152bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public IBinder onBind(Intent intent) { 153bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook return null; 154e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank } 155e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank 156e714bb9d153cfe13a7f0932e7d67ea08fa5a1d98Marc Blank @Override 157bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook public void sendMail(long accountId) throws RemoteException { 158f19f9cf4d3e5229715da77fe05a1a2bbd8da3f41Marc Blank } 1599fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki } 1609fe51f632965f5d085ae45a1089c7c97dcec8881Makoto Onuki} 161