1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386
|
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.content.pm;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageManager.ApplicationInfoFlags;
import android.content.pm.PackageManager.ComponentInfoFlags;
import android.content.pm.PackageManager.PackageInfoFlags;
import android.content.pm.PackageManager.ResolveInfoFlags;
import android.os.Bundle;
import android.util.SparseArray;
import java.util.List;
/**
* Package manager local system service interface.
*
* @hide Only for use within the system server.
*/
public abstract class PackageManagerInternal {
/**
* Provider for package names.
*/
public interface PackagesProvider {
/**
* Gets the packages for a given user.
* @param userId The user id.
* @return The package names.
*/
public String[] getPackages(int userId);
}
/**
* Provider for package names.
*/
public interface SyncAdapterPackagesProvider {
/**
* Gets the sync adapter packages for given authority and user.
* @param authority The authority.
* @param userId The user id.
* @return The package names.
*/
public String[] getPackages(String authority, int userId);
}
/**
* Sets the location provider packages provider.
* @param provider The packages provider.
*/
public abstract void setLocationPackagesProvider(PackagesProvider provider);
/**
* Sets the voice interaction packages provider.
* @param provider The packages provider.
*/
public abstract void setVoiceInteractionPackagesProvider(PackagesProvider provider);
/**
* Sets the SMS packages provider.
* @param provider The packages provider.
*/
public abstract void setSmsAppPackagesProvider(PackagesProvider provider);
/**
* Sets the dialer packages provider.
* @param provider The packages provider.
*/
public abstract void setDialerAppPackagesProvider(PackagesProvider provider);
/**
* Sets the sim call manager packages provider.
* @param provider The packages provider.
*/
public abstract void setSimCallManagerPackagesProvider(PackagesProvider provider);
/**
* Sets the sync adapter packages provider.
* @param provider The provider.
*/
public abstract void setSyncAdapterPackagesprovider(SyncAdapterPackagesProvider provider);
/**
* Requests granting of the default permissions to the current default SMS app.
* @param packageName The default SMS package name.
* @param userId The user for which to grant the permissions.
*/
public abstract void grantDefaultPermissionsToDefaultSmsApp(String packageName, int userId);
/**
* Requests granting of the default permissions to the current default dialer app.
* @param packageName The default dialer package name.
* @param userId The user for which to grant the permissions.
*/
public abstract void grantDefaultPermissionsToDefaultDialerApp(String packageName, int userId);
/**
* Requests granting of the default permissions to the current default sim call manager.
* @param packageName The default sim call manager package name.
* @param userId The user for which to grant the permissions.
*/
public abstract void grantDefaultPermissionsToDefaultSimCallManager(String packageName,
int userId);
/**
* Sets a list of apps to keep in PM's internal data structures and as APKs even if no user has
* currently installed it. The apps are not preloaded.
* @param packageList List of package names to keep cached.
*/
public abstract void setKeepUninstalledPackages(List<String> packageList);
/**
* Gets whether some of the permissions used by this package require a user
* review before any of the app components can run.
* @param packageName The package name for which to check.
* @param userId The user under which to check.
* @return True a permissions review is required.
*/
public abstract boolean isPermissionsReviewRequired(String packageName, int userId);
/**
* Retrieve all of the information we know about a particular package/application.
* @param filterCallingUid The results will be filtered in the context of this UID instead
* of the calling UID.
* @see PackageManager#getPackageInfo(String, int)
*/
public abstract PackageInfo getPackageInfo(String packageName,
@PackageInfoFlags int flags, int filterCallingUid, int userId);
/**
* Retrieve all of the information we know about a particular package/application.
* @param filterCallingUid The results will be filtered in the context of this UID instead
* of the calling UID.
* @see PackageManager#getApplicationInfo(String, int)
*/
public abstract ApplicationInfo getApplicationInfo(String packageName,
@ApplicationInfoFlags int flags, int filterCallingUid, int userId);
/**
* Retrieve all of the information we know about a particular activity class.
* @param filterCallingUid The results will be filtered in the context of this UID instead
* of the calling UID.
* @see PackageManager#getActivityInfo(ComponentName, int)
*/
public abstract ActivityInfo getActivityInfo(ComponentName component,
@ComponentInfoFlags int flags, int filterCallingUid, int userId);
/**
* Retrieve all activities that can be performed for the given intent.
* @param filterCallingUid The results will be filtered in the context of this UID instead
* of the calling UID.
* @see PackageManager#queryIntentActivities(Intent, int)
*/
public abstract List<ResolveInfo> queryIntentActivities(Intent intent,
@ResolveInfoFlags int flags, int filterCallingUid, int userId);
/**
* Interface to {@link com.android.server.pm.PackageManagerService#getHomeActivitiesAsUser}.
*/
public abstract ComponentName getHomeActivitiesAsUser(List<ResolveInfo> allHomeCandidates,
int userId);
/**
* Called by DeviceOwnerManagerService to set the package names of device owner and profile
* owners.
*/
public abstract void setDeviceAndProfileOwnerPackages(
int deviceOwnerUserId, String deviceOwner, SparseArray<String> profileOwners);
/**
* Returns {@code true} if a given package can't be wiped. Otherwise, returns {@code false}.
*/
public abstract boolean isPackageDataProtected(int userId, String packageName);
/**
* Returns {@code true} if a given package is installed as ephemeral. Otherwise, returns
* {@code false}.
*/
public abstract boolean isPackageEphemeral(int userId, String packageName);
/**
* Gets whether the package was ever launched.
* @param packageName The package name.
* @param userId The user for which to check.
* @return Whether was launched.
* @throws IllegalArgumentException if the package is not found
*/
public abstract boolean wasPackageEverLaunched(String packageName, int userId);
/**
* Grants a runtime permission
* @param packageName The package name.
* @param name The name of the permission.
* @param userId The userId for which to grant the permission.
* @param overridePolicy If true, grant this permission even if it is fixed by policy.
*/
public abstract void grantRuntimePermission(String packageName, String name, int userId,
boolean overridePolicy);
/**
* Revokes a runtime permission
* @param packageName The package name.
* @param name The name of the permission.
* @param userId The userId for which to revoke the permission.
* @param overridePolicy If true, revoke this permission even if it is fixed by policy.
*/
public abstract void revokeRuntimePermission(String packageName, String name, int userId,
boolean overridePolicy);
/**
* Retrieve the official name associated with a uid. This name is
* guaranteed to never change, though it is possible for the underlying
* uid to be changed. That is, if you are storing information about
* uids in persistent storage, you should use the string returned
* by this function instead of the raw uid.
*
* @param uid The uid for which you would like to retrieve a name.
* @return Returns a unique name for the given uid, or null if the
* uid is not currently assigned.
*/
public abstract String getNameForUid(int uid);
/**
* Request to perform the second phase of ephemeral resolution.
* @param responseObj The response of the first phase of ephemeral resolution
* @param origIntent The original intent that triggered ephemeral resolution
* @param resolvedType The resolved type of the intent
* @param callingPackage The name of the package requesting the ephemeral application
* @param verificationBundle Optional bundle to pass to the installer for additional
* verification
* @param userId The ID of the user that triggered ephemeral resolution
*/
public abstract void requestInstantAppResolutionPhaseTwo(AuxiliaryResolveInfo responseObj,
Intent origIntent, String resolvedType, String callingPackage,
Bundle verificationBundle, int userId);
/**
* Grants access to the package metadata for an ephemeral application.
* <p>
* When an ephemeral application explicitly tries to interact with a full
* install application [via an activity, service or provider that has been
* exposed using the {@code visibleToInstantApp} attribute], the normal
* application must be able to see metadata about the connecting ephemeral
* app. If the ephemeral application uses an implicit intent [ie action VIEW,
* category BROWSABLE], it remains hidden from the launched activity.
* <p>
* If the {@code sourceUid} is not for an ephemeral app or {@code targetUid}
* is not for a fully installed app, this method will be a no-op.
*
* @param userId the user
* @param intent the intent that triggered the grant
* @param targetAppId The app ID of the fully installed application
* @param ephemeralAppId The app ID of the ephemeral application
*/
public abstract void grantEphemeralAccess(int userId, Intent intent,
int targetAppId, int ephemeralAppId);
public abstract boolean isInstantAppInstallerComponent(ComponentName component);
/**
* Prunes instant apps and state associated with uninstalled
* instant apps according to the current platform policy.
*/
public abstract void pruneInstantApps();
/**
* @return The SetupWizard package name.
*/
public abstract String getSetupWizardPackageName();
public interface ExternalSourcesPolicy {
int USER_TRUSTED = 0; // User has trusted the package to install apps
int USER_BLOCKED = 1; // User has blocked the package to install apps
int USER_DEFAULT = 2; // Default code to use when user response is unavailable
/**
* Checks the user preference for whether a package is trusted to request installs through
* package installer
*
* @param packageName The package to check for
* @param uid the uid in which the package is running
* @return {@link USER_TRUSTED} if the user has trusted the package, {@link USER_BLOCKED}
* if user has blocked requests from the package, {@link USER_DEFAULT} if the user response
* is not yet available
*/
int getPackageTrustedToInstallApps(String packageName, int uid);
}
public abstract void setExternalSourcesPolicy(ExternalSourcesPolicy policy);
/**
* Return true if the given package is a persistent app process.
*/
public abstract boolean isPackagePersistent(String packageName);
/**
* Get all overlay packages for a user.
* @param userId The user for which to get the overlays.
* @return A list of overlay packages. An empty list is returned if the
* user has no installed overlay packages.
*/
public abstract List<PackageInfo> getOverlayPackages(int userId);
/**
* Get the names of all target packages for a user.
* @param userId The user for which to get the package names.
* @return A list of target package names. This list includes the "android" package.
*/
public abstract List<String> getTargetPackageNames(int userId);
/**
* Set which overlay to use for a package.
* @param userId The user for which to update the overlays.
* @param targetPackageName The package name of the package for which to update the overlays.
* @param overlayPackageNames The complete list of overlay packages that should be enabled for
* the target. Previously enabled overlays not specified in the list
* will be disabled. Pass in null or an empty list to disable
* all overlays. The order of the items is significant if several
* overlays modify the same resource.
* @return true if all packages names were known by the package manager, false otherwise
*/
public abstract boolean setEnabledOverlayPackages(int userId, String targetPackageName,
List<String> overlayPackageNames);
/**
* Resolves an activity intent, allowing instant apps to be resolved.
*/
public abstract ResolveInfo resolveIntent(Intent intent, String resolvedType,
int flags, int userId);
/**
* Resolves a service intent, allowing instant apps to be resolved.
*/
public abstract ResolveInfo resolveService(Intent intent, String resolvedType,
int flags, int userId, int callingUid);
/**
* Track the creator of a new isolated uid.
* @param isolatedUid The newly created isolated uid.
* @param ownerUid The uid of the app that created the isolated process.
*/
public abstract void addIsolatedUid(int isolatedUid, int ownerUid);
/**
* Track removal of an isolated uid.
* @param isolatedUid isolated uid that is no longer being used.
*/
public abstract void removeIsolatedUid(int isolatedUid);
/**
* Return the taget SDK version for the app with the given UID.
*/
public abstract int getUidTargetSdkVersion(int uid);
/** Whether the binder caller can access instant apps. */
public abstract boolean canAccessInstantApps(int callingUid, int userId);
/**
* Returns {@code true} if a given package has instant application meta-data.
* Otherwise, returns {@code false}. Meta-data is state (eg. cookie, app icon, etc)
* associated with an instant app. It may be kept after the instant app has been uninstalled.
*/
public abstract boolean hasInstantApplicationMetadata(String packageName, int userId);
/**
* Updates a package last used time.
*/
public abstract void notifyPackageUse(String packageName, int reason);
}
|