202 Commits

Author SHA1 Message Date
Jeff Sharkey
9ae62f5934 It helps to catch the right exception.
Bug: 7238149
Change-Id: I7b60ec44d1d1d5ece8a871cb089f811b611f4a4a
2013-03-26 10:29:01 -07:00
Svetoslav
a7452ee27d [DO NOT MERGE] Notify vold when to start fstrim.
Since using the discard option for mounting an Ext4 file system
could lead to unpredictable slowdowns of I/O we will explicitly
control when to perform fstrim, i.e. discard unused blocks of the
mounted volume. We are using the idle maintenance intents sent by
the system which specify a window that one can use to perform
expensive maintenance tasks while the user does not use the device.

This change is adding a broadcast receiver for the idle maintenance
start intent to the mount services which then notifies vold when to
start fstrim.

Since fstrim will be run on a daily basis we do not expect fstrim
to be too long, so it is not interruptible. We will implement
interruption only in case we see issues.

bug:8056794

Change-Id: I1438479d2956b61b82d3a130854376f7a144aaf3
2013-03-22 10:42:24 -07:00
Dianne Hackborn
40e9f2922c Quiet down a lot of logging.
Also fix a little problem where the USER_STARTED broadcasts
were not being sent as ordered broadcasts(!).

Change-Id: I3aa3e0a9b3900967cdd2d115ee103371b0a50c41
2012-11-27 19:12:23 -08:00
Jeff Sharkey
f5377a7242 Merge "Useful annotations for code documentation." into jb-mr1.1-dev 2012-11-15 11:48:38 -08:00
Jeff Sharkey
0be607cda1 Avoid runtime restart after vold reconnects.
Rely on behavior of already-released CountDownLatch instead of
clearing the reference.

Bug: 7290521
Change-Id: I787e673b97d18be412d5b37e279fbf1275b49151
2012-11-14 14:39:19 -08:00
Jeff Sharkey
8b2c3a1460 Useful annotations for code documentation.
Bug: 6537978
Change-Id: I806c3c09e3255f8789455f13bf37c1dde2a93f1f
2012-11-12 12:42:17 -08:00
Jeff Sharkey
32ee831eab Handle ISE when physical volume isn't mounted.
Bug: 7238149
Change-Id: I85081225a1a43a2c1b6f70b6275c6bbca0b3764e
2012-09-30 13:35:33 -07:00
Jeff Sharkey
4fbbda4cec Handle multi-user mountObb() requests.
Since emulated external storage paths differ based on execution
context, carefully fix up paths for various use-cases:

1. When sending paths to DefaultContainerService, always scope
   OBB paths as belonging to USER_OWNER.
2. When sending paths to vold, always build emulated storage paths
   visible to root.
3. Always use the original untouched path when talking with apps.

Mount OBB containers using shared app GID, so that an app can read
the mount point across users.

Handle legacy paths like "/sdcard" by resolving the canonical path
before sending to MountService.  Move tests to servicestests, and
add tests for new path generation logic.

Bug: 7212801
Change-Id: I078c52879cd08d9c8a52cc8c83ac7ced1e8035e7
2012-09-25 17:34:48 -07:00
Amith Yamasani
920ace0bbc Query users excluding any being removed
Keep track of user creation and last logged-in time.
adb shell dumpsys users
User switcher shouldn't show users about to be removed.
No need to check for singleton for activities.

Bug: 7194894
Change-Id: Ic9a59ea5bd544920479e191d1a1e8a77f8b6ddcf
2012-09-20 22:33:43 -07:00
Jeff Sharkey
27bd34d9d9 Multi-user MTP.
The current MTP kernel driver at /dev/mtp_usb is exclusive, meaning
only one process can have it open. In addition, each MTP session
with a desktop requires unique object IDs, which doesn't hold true
across users on the device.

To solve these two issues, when switching users we cycle the USB host
stack to disconnect both local and remote MTP connections, giving the
new user's media process a chance to claim /dev/mtp_usb, and causing
the desktop to initiate a new MTP session.

This change also allows BroadcastReceivers to registerReceiver()
allow retrieval of a current sticky broadcast. Adds a system property
to override maximum users. Removes MOUNTED broadcasts for secondary
users. Allows INTERACT_ACROSS_USERS to getCurrentUser().

Bug: 6925114
Change-Id: I02b4a1b535af95fb2142655887b6d15a8068d18a
2012-09-18 13:26:26 -07:00
Jeff Sharkey
b049e212ab Include user identifier in external storage paths.
When building external storage paths, always include user in path
to enable cross-user paths and aid debugging.

Each Zygote process continues to only have access to the appropriate
user-specific emulated storage through bind mounts. A second set of
mounts continue supporting legacy /sdcard-style paths. For example,
a process running as owner has these mount points:

/storage/emulated_legacy
/storage/emulated_legacy/Android/obb
/storage/emulated/0
/storage/emulated/obb

Since Environment is created before Zygote forks, we need to update
its internal paths after each process launches.

Bug: 7131382
Change-Id: I6f8c6971f2a8edfb415c14cb4ed05ff97e587a21
2012-09-11 23:11:14 -07:00
Jeff Sharkey
9545dc020e Include primary flag in StorageVolume.
Bug: 7003520
Change-Id: Iaae2ae22253820c954c51e0199c31087bc825f3f
2012-09-06 23:15:20 -07:00
Dianne Hackborn
5ac72a2959 Improve multi-user broadcasts.
You can now use ALL and CURRENT when sending broadcasts, to specify
where the broadcast goes.

Sticky broadcasts are now correctly separated per user, and registered
receivers are filtered based on the requested target user.

New Context APIs for more kinds of sending broadcasts as users.

Updating a bunch of system code that sends broadcasts to explicitly
specify which user the broadcast goes to.

Made a single version of the code for interpreting the requested
target user ID that all entries to activity manager (start activity,
send broadcast, start service) use.

Change-Id: Ie29f02dd5242ef8c8fa56c54593a315cd2574e1c
2012-08-30 14:33:22 -07:00
Dianne Hackborn
f02b60aa4f Rename UserId to UserHandle.
This is the start of turning this into a formal public API.

Change-Id: I5786d2c320f1de41a06ed5d0f65adb68967287a0
2012-08-16 12:46:38 -07:00
Jean-Baptiste Queru
3e751f1b7b am 60c77212: am 2a393a99: Merge "MountService: unlink death notification when unregistering listeners"
* commit '60c7721210d327a464fdc95dbbe504e8eb10525c':
  MountService: unlink death notification when unregistering listeners
2012-06-08 15:36:41 -07:00
Fabrice Di Meglio
13fe2a5330 Fix bug #6522190 MountService should respond to configuration changes ("INTERNAL STORAGE" string should be translated dynamically)
- use an ID instead of a String for StorageVolume description
- use this ID for getting the correct localized version of the description string

Change-Id: I30f3080fce2c889be38bfdf9f5121dffcf8a99e8
2012-05-23 16:38:09 -07:00
Kenny Root
51a573c767 Wait for ASECs to be scanned before proceeding
Move MountService up the list, then pause waiting for MountService to
finish scanning ASECs before the services that require those packages to
be ready.

Additionally, don't automatically mark all ASEC apps as FLAG_EXTERNAL on
reboot. This prevents AppWidgets and other things from being used with
ASECs which are on internal storage.

Bug: 6445613
Change-Id: I3e0b3e244fec966814d7a5ea93de5d337aea79bd
2012-05-17 16:06:54 -07:00
Kenny Root
6dceb88f1c Allow forward locked apps to be in ASECs
We couldn't put forward-locked apps in ASEC containers before since we
didn't have any permissioned filesystems. This adds the ability for
forward-locked applications to be in ASEC containers.

This means that forward locked applications will be able to be on the SD
card now.

This change also removes the old type of forward-locking that placed
parts of apps in /data/app-private.  Now all forward-locked applications
will be in ASEC containers.

Change-Id: I17ae0b0d65a4a965ef33c0ac2c47e990e55707ad
2012-04-25 14:17:02 -07:00
Amith Yamasani
483f3b06ea Package restrictions per user
Packages can be enabled/disabled per user.
This requires maintaining stopped/launched states and
enabled / disabled components and packages per user.

Refactored pm.Settings and PackageSettingsBase to keep
track of states per user.

Migrated the stopped-packages.xml to users/<u>/package-restrictions.xml

Changed intent resolution to handle individual user restrictions.
Bunch of IPackageManager calls now have a userId argument.
Make AppWidgetService handle removals of packages.

Added some tests for pm.Settings and PackageManager.

Change-Id: Ia83b529e1df88dbcb3bd55ebfc952a6e9b20e861
2012-03-22 10:08:24 -07:00
Vairavan Srinivasan
5c25a2d338 MountService: unlink death notification when unregistering listeners
Change-Id: I09045cfe67f7da84bc68a50fc5440ea2c6b754e5
2012-01-24 08:22:14 -08:00
Robert Greenwalt
470fd72a06 Log netd traffic nicely.
Create a LocalLog class for logging within a service for dumping in dumps.
Use it in the NativeDaemonConnector so we can get some insight into what
is happening in these lockups.

bug:5864209
Change-Id: I68ddc58847f3c8de613be9528570f8c3157d8274
2012-01-20 10:37:11 -08:00
Fredrik Roubert
da6aedf716 Test the correct return code from call to cryptfs.
This was broken in commit dd519fac9b79f36a27909149a90fce4321ed1c20
(certainly by mistake), in which Integer.parseInt(tokens[1]) was
errornously replaced with event.getCode().

Change-Id: Ic5af5a2ec5f321da21a4a5db25f6908462f6cae8
2011-12-20 18:47:33 +01:00
Jeff Sharkey
dd519fac9b Move native vold calls to varargs.
Uses argument escaping inside NativeDaemonConnector, using varargs
to separate boundaries.

Bug: 5472606
Change-Id: Ie107a90df7e2b3bd3eaaf04c8367248ab40136f4
2011-12-02 14:28:06 -08:00
Jeff Sharkey
31c6e4817f Move NativeDaemonConnector to varargs.
Perform uniform argument escaping inside NativeDaemonConnector, using
varargs to separate boundaries.  Also move to parsed NativeDaemonEvent
instances instead of raw Strings.

Bug: 5472606
Change-Id: I1270733e2b2eeb2f6b810240df82ab24d38ebf40
2011-11-29 12:09:06 -08:00
Christopher Tate
32418be49e Require device encryption password to perform adb backup/restore
This supersedes any backup-password that the user might supply.  Per
design, the device encryption password is also always used to encrypt
the backup archive.

The CL introduces two new strings, used for prompting the user for
their device encryption password rather than their settings-defined
"backup password" when confirming a full backup or restore operation.

Bug 5382487

Change-Id: I0b03881b45437c944eaf636b6209278e1bba7a9f
2011-10-13 12:29:32 -07:00
Ben Komalo
13c7197da8 Revert encryption mapping for device wipes.
External storage volumes that were emulated+encrypted needed to have
their encryption mapping removed so that it doesn't try to encrypt the
volume after formatting them.

This just wires through an argument through vold, and assumes that vold
will do the right thing even if there is no encryption mapping set.

Bug: 5017638
Change-Id: I858fae3d12cb415bc34637f520f71220ad9daaad
2011-09-09 14:44:40 -07:00
Ben Komalo
444eca2329 Expose getting encryptstate through IMountService
- this really just calls cryptfs cryptocomplete
- needed so that UI logic can present a factory reset option if
encryption screwed up

Bug: 3384231
Change-Id: I553de87f0d03a65851030c9c5266e85866d30fa6
2011-09-06 12:48:53 -07:00
Kenny Root
07714d41e5 Default disable watchdog for vold connection
cryptfs has long-running operations that cause the Watchdog to fire
reliably when encrypting the filesystem. Disable Watchdog on
MountService for this reason.

Change-Id: Id03f5f60c704dcd74a8696ad9f32b5fba5381731
2011-08-17 17:49:30 -07:00
Jeff Sharkey
fa23c5ae22 Add NativeDaemonConnector users to watchdog.
To catch instances where NativeDaemonConnector hangs while executing
commands, add users to system_server watchdog.  Also moved qtaguid
enabler to separate thread to prevent blocking systemReady().

Bug: 5145437
Change-Id: I4c6c1dc09864a1c05f9486a31faa1b366548e911
2011-08-10 13:42:01 -07:00
Ken Sumrall
18db5c5690 During encryption, don't throw exceptions for unknown vold state
This is a temporary fix until we get something better.  During the
encryption process, vold does not respond to commands because it is
blocked doing the encryption.  Because it doesn't respond, this code
times out, sets the state to null, and thows an exception.  For now,
just don't throw an exception if the device is encrypting.

Change-Id: I7e821ec2addd60475fb10834df533beccb2650fe
2011-07-15 20:24:17 -07:00
Kenny Root
4161f9b303 Add StorageVolume list to MountService dump
Change-Id: If2be6e420d9671032d2e7a66c71a6733e6e48ac8
2011-07-13 09:48:33 -07:00
Mike Lockwood
7a59dd2ce3 MTP: Return error if user tries to copy a file >= 4GB to a FAT32 file system
Bug: 4561836

Change-Id: I2bffb93b032038f6c220c24c752ccd7ca66c23a0
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-07-11 13:40:02 -04:00
Dianne Hackborn
292f8bc9d1 Plumb information from the framework about asec container size.
Change-Id: Ie0ec3cb6d463aefa341a8cbea80be790451ba5e3
2011-06-28 15:02:44 -07:00
Mike Lockwood
ecedfdc779 MountService: Use UsbManager to monitor USB state for mass storage
Change-Id: I50c15c1dc8a1ee4f41cac7de8df9529ff5da1053
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-17 19:49:05 -04:00
Mike Lockwood
8e8b280bd1 StorageVolume: Add allowMassStorage flag
Change-Id: I9d19e635bb06e50068d7e4e6919322bd5bb2e00f
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-07 12:43:49 -07:00
Mike Lockwood
9fd4c6d3ae am 49b9449b: am d8d84708: am 988b6648: Merge "MountService: Add StorageVolume as extra in storage related broadcasts." into honeycomb-mr2
* commit '49b9449b6605c7b4f77f9a0635ba93f7dfa0ea47':
  MountService: Add StorageVolume as extra in storage related broadcasts.
2011-05-24 12:56:56 -07:00
Mike Lockwood
49b9449b66 am d8d84708: am 988b6648: Merge "MountService: Add StorageVolume as extra in storage related broadcasts." into honeycomb-mr2
* commit 'd8d8470825a637843d45a3b436e80a3b85f1dd11':
  MountService: Add StorageVolume as extra in storage related broadcasts.
2011-05-23 17:09:30 -07:00
Mike Lockwood
a5250c9392 MountService: Add StorageVolume as extra in storage related broadcasts.
Change-Id: I8e1a21ae233ba9812e58b363b59a66b260a01cbf
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-05-23 20:01:55 -04:00
Mike Lockwood
fa1e5561cc am 53b988ba: am 5a79cfd7: am 27ac64ec: Merge "StorageVolume: Add getStorageId() accessor" into honeycomb-mr2
* commit '53b988ba1842f40e595bb85f2ca055c24787e6dc':
  StorageVolume: Add getStorageId() accessor
2011-05-18 09:23:35 -07:00
Mike Lockwood
53b988ba18 am 5a79cfd7: am 27ac64ec: Merge "StorageVolume: Add getStorageId() accessor" into honeycomb-mr2
* commit '5a79cfd7518defdce1911cecbc2441bb0a057e54':
  StorageVolume: Add getStorageId() accessor
2011-05-17 16:49:40 -07:00
Mike Lockwood
fbfe555125 StorageVolume: Add getStorageId() accessor
This ID is used for MTP as well as per volume querying in the media provider.

Change-Id: Ic4fc986d972bd477730643f7e9450c390c0b3a4b
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-05-17 17:19:37 -04:00
Mike Lockwood
8fa5b03c1b resolved conflicts for merge of fc4a3d37 to master
Change-Id: I40f603ba9330c3e882f4d58398095f4094725b21
2011-05-16 15:49:53 -04:00
Mike Lockwood
fc4a3d37ef am b822d246: am 0a93d875: Merge "StorageManager: Clean up and generalize storage configuration resources" into honeycomb-mr2
* commit 'b822d2464dc59056f736b0c49f0ac514c7cbb9d9':
  StorageManager:  Clean up and generalize storage configuration resources
2011-05-16 12:38:36 -07:00
Mike Lockwood
2f6a388553 StorageManager: Clean up and generalize storage configuration resources
Replace config_emulateExternalStorage, config_externalStorageRemovable,
config_externalStoragePaths, config_externalStorageDescriptions and
config_mtpReserveSpaceMegabytes resources with an XML resource file
to describe the external storages that are available.

Add android.os.storage.StorageVolume class

StorageManager.getVolumeList() now returns an array of StorageVolume

Change-Id: I06ce1451ebf08b82f0ee825d56d59ebf72eacd3d
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-05-16 14:29:23 -04:00
Mike Lockwood
20c3561284 am 10fbba21: DO NOT MERGE MountService: Fix running media scanner at boot.
* commit '10fbba21e4827a1582d97aa99e4e8d772ce04920':
  DO NOT MERGE MountService: Fix running media scanner at boot.
2011-05-04 08:57:19 -07:00
Mike Lockwood
2572051c4f am 0aa5d7b7: DO NOT MERGE Fix deadlock in MountService
* commit '0aa5d7b7f225236ac8461d0b6835b9c6152a2699':
  DO NOT MERGE Fix deadlock in MountService
2011-05-04 08:57:12 -07:00
Mike Lockwood
a2a8419db8 am e3b498be: DO NOT MERGE StorageManager: Add getVolumeList() and getVolumeState() methods
* commit 'e3b498be0ae05367e9b84f4fac2ac5cf57a6b091':
  DO NOT MERGE StorageManager: Add getVolumeList() and getVolumeState() methods
2011-05-04 08:57:07 -07:00
Mike Lockwood
60c768d412 am 346a2d79: DO NOT MERGE MountService: Add support for multiple volumes
* commit '346a2d79ecd627e38bc7fc6874fb627995b8bc12':
  DO NOT MERGE MountService: Add support for multiple volumes
2011-05-04 08:56:55 -07:00
Mike Lockwood
10fbba21e4 DO NOT MERGE MountService: Fix running media scanner at boot.
Change-Id: Ia56573023f21fa067a14e7d3ac5a6dbd51ecc8a7
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-05-04 10:41:19 -04:00
Mike Lockwood
0aa5d7b7f2 DO NOT MERGE Fix deadlock in MountService
It is not safe to call into vold with a lock held on mVolumeStates
since we will receive events back from vold on a different thread.
So in the boot completed handler we make a copy of the volume list and
then call vold to mount volumes after releasing the lock

Change-Id: Iaadfb1b8be5567c8e228a8fbc69d4d483c8dc987
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-05-04 10:41:19 -04:00