1 /*
2  * Copyright (C) 2009 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 
17 package android.content;
18 
19 import android.accounts.Account;
20 import android.content.ComponentName;
21 import android.content.SyncInfo;
22 import android.content.ISyncStatusObserver;
23 import android.content.SyncAdapterType;
24 import android.content.SyncRequest;
25 import android.content.SyncStatusInfo;
26 import android.content.PeriodicSync;
27 import android.net.Uri;
28 import android.os.Bundle;
29 import android.database.IContentObserver;
30 
31 /**
32  * @hide
33  */
34 interface IContentService {
unregisterContentObserver(IContentObserver observer)35     void unregisterContentObserver(IContentObserver observer);
36 
37     /**
38      * Register a content observer tied to a specific user's view of the provider.
39      * @param userHandle the user whose view of the provider is to be observed.  May be
40      *     the calling user without requiring any permission, otherwise the caller needs to
41      *     hold the INTERACT_ACROSS_USERS_FULL permission.  Pseudousers USER_ALL and
42      *     USER_CURRENT are properly handled.
43      */
registerContentObserver(in Uri uri, boolean notifyForDescendants, IContentObserver observer, int userHandle)44     void registerContentObserver(in Uri uri, boolean notifyForDescendants,
45             IContentObserver observer, int userHandle);
46 
47     /**
48      * Notify observers of a particular user's view of the provider.
49      * @param userHandle the user whose view of the provider is to be notified.  May be
50      *     the calling user without requiring any permission, otherwise the caller needs to
51      *     hold the INTERACT_ACROSS_USERS_FULL permission.  Pseudousers USER_ALL
52      *     USER_CURRENT are properly interpreted.
53      */
notifyChange(in Uri uri, IContentObserver observer, boolean observerWantsSelfNotifications, boolean syncToNetwork, int userHandle)54     void notifyChange(in Uri uri, IContentObserver observer,
55             boolean observerWantsSelfNotifications, boolean syncToNetwork,
56             int userHandle);
57 
requestSync(in Account account, String authority, in Bundle extras)58     void requestSync(in Account account, String authority, in Bundle extras);
59     /**
60      * Start a sync given a request.
61      */
sync(in SyncRequest request)62     void sync(in SyncRequest request);
syncAsUser(in SyncRequest request, int userId)63     void syncAsUser(in SyncRequest request, int userId);
cancelSync(in Account account, String authority, in ComponentName cname)64     void cancelSync(in Account account, String authority, in ComponentName cname);
cancelSyncAsUser(in Account account, String authority, in ComponentName cname, int userId)65     void cancelSyncAsUser(in Account account, String authority, in ComponentName cname, int userId);
66 
67     /** Cancel a sync, providing information about the sync to be cancelled. */
cancelRequest(in SyncRequest request)68      void cancelRequest(in SyncRequest request);
69 
70     /**
71      * Check if the provider should be synced when a network tickle is received
72      * @param providerName the provider whose setting we are querying
73      * @return true if the provider should be synced when a network tickle is received
74      */
getSyncAutomatically(in Account account, String providerName)75     boolean getSyncAutomatically(in Account account, String providerName);
getSyncAutomaticallyAsUser(in Account account, String providerName, int userId)76     boolean getSyncAutomaticallyAsUser(in Account account, String providerName, int userId);
77 
78     /**
79      * Set whether or not the provider is synced when it receives a network tickle.
80      *
81      * @param providerName the provider whose behavior is being controlled
82      * @param sync true if the provider should be synced when tickles are received for it
83      */
setSyncAutomatically(in Account account, String providerName, boolean sync)84     void setSyncAutomatically(in Account account, String providerName, boolean sync);
setSyncAutomaticallyAsUser(in Account account, String providerName, boolean sync, int userId)85     void setSyncAutomaticallyAsUser(in Account account, String providerName, boolean sync,
86             int userId);
87 
88     /**
89      * Get a list of periodic operations for a specified authority, or service.
90      * @param account account for authority, must be null if cname is non-null.
91      * @param providerName name of provider, must be null if cname is non-null.
92      * @param cname component to identify sync service, must be null if account/providerName are
93      * non-null.
94      */
getPeriodicSyncs(in Account account, String providerName, in ComponentName cname)95     List<PeriodicSync> getPeriodicSyncs(in Account account, String providerName,
96         in ComponentName cname);
97 
98     /**
99      * Set whether or not the provider is to be synced on a periodic basis.
100      *
101      * @param providerName the provider whose behavior is being controlled
102      * @param pollFrequency the period that a sync should be performed, in seconds. If this is
103      * zero or less then no periodic syncs will be performed.
104      */
addPeriodicSync(in Account account, String providerName, in Bundle extras, long pollFrequency)105     void addPeriodicSync(in Account account, String providerName, in Bundle extras,
106       long pollFrequency);
107 
108     /**
109      * Set whether or not the provider is to be synced on a periodic basis.
110      *
111      * @param providerName the provider whose behavior is being controlled
112      * @param pollFrequency the period that a sync should be performed, in seconds. If this is
113      * zero or less then no periodic syncs will be performed.
114      */
removePeriodicSync(in Account account, String providerName, in Bundle extras)115     void removePeriodicSync(in Account account, String providerName, in Bundle extras);
116 
117     /**
118      * Check if this account/provider is syncable.
119      * @return >0 if it is syncable, 0 if not, and <0 if the state isn't known yet.
120      */
getIsSyncable(in Account account, String providerName)121     int getIsSyncable(in Account account, String providerName);
getIsSyncableAsUser(in Account account, String providerName, int userId)122     int getIsSyncableAsUser(in Account account, String providerName, int userId);
123 
124     /**
125      * Set whether this account/provider is syncable.
126      * @param syncable, >0 denotes syncable, 0 means not syncable, <0 means unknown
127      */
setIsSyncable(in Account account, String providerName, int syncable)128     void setIsSyncable(in Account account, String providerName, int syncable);
129 
setMasterSyncAutomatically(boolean flag)130     void setMasterSyncAutomatically(boolean flag);
setMasterSyncAutomaticallyAsUser(boolean flag, int userId)131     void setMasterSyncAutomaticallyAsUser(boolean flag, int userId);
132 
getMasterSyncAutomatically()133     boolean getMasterSyncAutomatically();
getMasterSyncAutomaticallyAsUser(int userId)134     boolean getMasterSyncAutomaticallyAsUser(int userId);
135 
getCurrentSyncs()136     List<SyncInfo> getCurrentSyncs();
getCurrentSyncsAsUser(int userId)137     List<SyncInfo> getCurrentSyncsAsUser(int userId);
138 
139     /**
140      * Returns the types of the SyncAdapters that are registered with the system.
141      * @return Returns the types of the SyncAdapters that are registered with the system.
142      */
getSyncAdapterTypes()143     SyncAdapterType[] getSyncAdapterTypes();
getSyncAdapterTypesAsUser(int userId)144     SyncAdapterType[] getSyncAdapterTypesAsUser(int userId);
145 
getSyncAdapterPackagesForAuthorityAsUser(String authority, int userId)146     String[] getSyncAdapterPackagesForAuthorityAsUser(String authority, int userId);
147 
148     /**
149      * Returns true if there is currently a operation for the given account/authority or service
150      * actively being processed.
151      * @param account account for authority, must be null if cname is non-null.
152      * @param providerName name of provider, must be null if cname is non-null.
153      * @param cname component to identify sync service, must be null if account/providerName are
154      * non-null.
155      */
isSyncActive(in Account account, String authority, in ComponentName cname)156     boolean isSyncActive(in Account account, String authority, in ComponentName cname);
157 
158     /**
159      * Returns the status that matches the authority. If there are multiples accounts for
160      * the authority, the one with the latest "lastSuccessTime" status is returned.
161      * @param account account for authority, must be null if cname is non-null.
162      * @param providerName name of provider, must be null if cname is non-null.
163      * @param cname component to identify sync service, must be null if account/providerName are
164      * non-null.
165      */
getSyncStatus(in Account account, String authority, in ComponentName cname)166     SyncStatusInfo getSyncStatus(in Account account, String authority, in ComponentName cname);
getSyncStatusAsUser(in Account account, String authority, in ComponentName cname, int userId)167     SyncStatusInfo getSyncStatusAsUser(in Account account, String authority, in ComponentName cname,
168             int userId);
169 
170     /**
171      * Return true if the pending status is true of any matching authorities.
172      * @param account account for authority, must be null if cname is non-null.
173      * @param providerName name of provider, must be null if cname is non-null.
174      * @param cname component to identify sync service, must be null if account/providerName are
175      * non-null.
176      */
isSyncPending(in Account account, String authority, in ComponentName cname)177     boolean isSyncPending(in Account account, String authority, in ComponentName cname);
isSyncPendingAsUser(in Account account, String authority, in ComponentName cname, int userId)178     boolean isSyncPendingAsUser(in Account account, String authority, in ComponentName cname,
179             int userId);
180 
addStatusChangeListener(int mask, ISyncStatusObserver callback)181     void addStatusChangeListener(int mask, ISyncStatusObserver callback);
182 
removeStatusChangeListener(ISyncStatusObserver callback)183     void removeStatusChangeListener(ISyncStatusObserver callback);
184 }
185