Commit Graph

2359 Commits

Author SHA1 Message Date
Andreas Gampe
0f94fc6f1d Merge "Frameworks/base: Fix a constructor" 2015-04-25 20:16:12 +00:00
Jeff Sharkey
275e3e43f2 Migrate primary external storage.
Wire up through MountService to call down into vold.  Watch for
unsolicited events that report progress, including special value "82"
that signals that copy has finished.  We use this value to persist
the volumeUuid in case of unexpected reboot, since it indicates the
new volume is ready.

Wire progress updates through existing callback pipeline.

Update the volume mounting code to match against the persisted UUID
when selecting the primary external storage.

Bug: 19993667
Change-Id: Id46957610fb43517bbfbc368f29b7d430664590d
2015-04-24 18:01:45 -07:00
Jens Ole Lauridsen
0525677343 Merge "parcel: Add efficient methods for writing and reading a parcelable." 2015-04-24 22:37:46 +00:00
Jeff Sharkey
620b32b316 Package and storage movement callbacks.
Since package and primary storage movement can take quite awhile,
we want to have SystemUI surface progress and allow the Settings
app to be torn down while the movement proceeds in the background.

Movement requests now return a unique ID that identifies an ongoing
operation, and interested parties can observe ongoing progress and
final status.  Internally, progress and status are overloaded so
the values 0-100 are progress, and any values outside that range
are terminal status.

Add explicit constants for special-cased volume UUIDs, and change
the APIs to accept VolumeInfo to reduce confusion.  Internally the
UUID value "null" means internal storage, and "primary_physical"
means the current primary physical volume.  These values are used
for both package and primary storage movement destinations.

Persist the current primary storage location in MountService
metadata, since it can be moved over time.

Surface disk scanned events with separate volume count so we can
determine when it's partitioned successfully.  Also send broadcast
to support TvSettings launching into adoption flow.

Bug: 19993667
Change-Id: Ic8a4034033c3cb3262023dba4a642efc6795af10
2015-04-23 20:32:17 -07:00
Ben Kwa
62539a220c Move extension checking code into FileUtils.
Move code for checking file extensions and MIME types from
ExternalStorageProvider into android.os.FileUtils, so it can be used by
other clients (e.g. DownloadsProvider).

BUG=20157955

Change-Id: Ib16a16af723c21fb8d2912c8917dfd68653ea6fa
2015-04-23 16:14:20 -07:00
Jens Ole Lauridsen
8dea8744ac parcel: Add efficient methods for writing and reading a parcelable.
The documentation used to recommend calling Parcelable.writeToParcel
instead of using the Parcel API for sending Parcelable types.
This leaves the developer to have to deal with null values and makes
it harder to create tools that generate correct efficient code.
I suggest that we add a these 2 methods:
   writeTypedObject and createTypedObject
as an alternative.

Change-Id: I85443417909dcb9590d3f0a72f0130a4da4ead38
2015-04-23 14:12:04 -07:00
Neil Fuller
52dbaa08cd Merge "Add checks for types in Parcel / avoid class initialization" 2015-04-22 13:30:02 +00:00
Jeff Sharkey
e0ef7e8c60 Merge "Blend in force adoptable flag when set." 2015-04-21 19:45:02 +00:00
Jeff Sharkey
74acbbb2cd Blend in force adoptable flag when set.
Bug: 19993667
Change-Id: Ic7f348d171a89e889281b7efb1aa0cbade048975
2015-04-21 12:18:31 -07:00
Dan Sandler
aa861666ed Fix build.
Change-Id: I0e419fdb36cedba67fc6da7f71134d9728f66150
2015-04-21 10:26:13 -04:00
Dan Sandler
954863ab9b Merge "Add ashmem stats to Parcels." 2015-04-21 14:10:20 +00:00
Neil Fuller
44e440cc7e Add checks for types in Parcel / avoid class initialization
Make Parcel more stringent to avoid initializing classes
that are not related to Parcelable.

Two new checks:
1) That the class found on the stream implements Parcelable.
2) That the type of the CREATOR field declared on the class
found on the stream actually implements Parcelable.Creator.

For (1) the new check that a class in the stream is actually
Parcelable. This will affect handling of invalid streams or
code that didn't obey the requirements.

For (2) this change could break some apps that had a CREATOR
field in a Parcelable class that was not declared to be
(at least) a Parcelable.Creator: it is no longer sufficient
for the type to implement Parcelable.Creator, the field
must be declared as such.

This change includes doc updates for Parcelable to make
the requirement around the declared type of the CREATOR
field more concrete.

This change also makes the generics slightly tidier/explicit,
annotates code as unchecked where needed and removes some
assumptions that can not be guaranteed with Java's type
system and the current definitions.

For example, there's no guarantee right now that
Parcelable.Creator returns objects that are actually
Parcelable, or that the CREATOR object associated
with a Parcelable will return objects of the surrounding
class. The first we can't do something about without
breaking the public API (due to implementations like
TextUtils.CHAR_SEQUENCE_CREATOR). The second is
currently typically implicitly enforced with an implicit
cast in the (app's) calling code (e.g. callers to
readParcelable() that causes a language-introduced cast
to the type expected). A larger refactoring of Parcel
would be required to ensure that the class that is
produced by Creator is of a type compatible with the
class that declared CREATOR, and is not a goal for this
change.

A fix is included for a class that doesn't implement
Parcelable like it should and would probably fail
check (1).

Bug: 1171613
Change-Id: I31d07516efee29a320e80f4bc4f96aaac628f81c
2015-04-21 11:32:44 +01:00
Jeff Sharkey
e6c04f9417 Broadcast hidden volumes, notification polish.
Send limited broadcast intent when certain volume state changes
occur; the only customer for now is ExternalStorageProvider.

Change notification flow to be less bumpy.  Pick USB icon based on
disk type, and avoid using "generic" disk labels.

Bug: 19993667
Change-Id: I263bc9e9aae2ae57eb4d1afe76da686aee5475fb
2015-04-18 23:11:00 -07:00
Jeff Sharkey
355df8f16a Merge "Wire up non-visible volumes, more states." 2015-04-18 23:25:31 +00:00
Jeff Sharkey
27de30d31c Wire up non-visible volumes, more states.
Adds logic to ExternalStorageProvider to scan non-visible volumes,
such as USB OTG devices.  We use internal paths when surfacing these
volumes, which also optimizes around the FUSE daemon for public
devices.  Also dumps internal state when requested.

VolumeInfo now directly contains DiskInfo, which means it's
snapshotted when sending events, avoiding teardown races.  Switch
notifications to use this DiskInfo directly.

Finish wiring up new volume state, including helper methods to make
it readable/writable state clearer.  Handle disks and volumes with
spaces in their labels.

Bug: 19993667
Change-Id: I5c75e5658a6415976811477aebafee7694bde0f4
2015-04-18 16:20:30 -07:00
Amith Yamasani
eab852cb34 Merge "Add isSystemUser API" 2015-04-18 02:01:18 +00:00
Amith Yamasani
5760e1786b Add isSystemUser API
Bug: 20348316
Bug: 19945747
Change-Id: Ibb81f0b2fccec621e26e4543bf9f26ffddfafb15
2015-04-17 18:52:26 -07:00
Jeff Sharkey
7e92ef3a11 Volumes know parent disks; unsupported disks.
This is cleaner and more direct than the reverse of having the disk
publish child volume membership.  Rename state constants to match
public API.  Add state representing bad removal.  Make it clear that
volume flags are related to mounting.

Send new unsupported disk event when we finish scanning an entire
disk and have no meaningful volumes.

Splice disk labels into description when known.  Only adoptable
slots are directly visible to apps.

Bug: 19993667
Change-Id: I12fda95be0d82781f70c3d85c039749052dc936b
2015-04-17 17:35:11 -07:00
Adam Lesinski
e283d33fed Report WiFi and Bluetooth energy collection in checkin stats
Also removed some legacy bluetooth energy collection
that was never invoked.

Also fixed an issue with Wifi scan power estimation.

Bluetooth energy recording is still disabled as strange results
are still reported.

Change-Id: Iafa37eba285fd933ff221116b14af260e904fa4f
2015-04-16 18:44:30 -07:00
Dianne Hackborn
a985bfb44c Merge "Some improvements to battery stats data." 2015-04-17 00:43:10 +00:00
Dianne Hackborn
0c820db22c Some improvements to battery stats data.
History now records when wifi data activity starts and "ends"
based on the triggers we get from the kernel used to determine
when to collect data.  (Basically the same as the current cell
data, but of course when it ends is just an arbitrary x seconds
after the last data traffic.)

Re-arranged the state bits to make room for this data in the
right place and move some other things that make more sense to
have in states2.

Try to improve overflow handling, so when it happens we allow
the various bit states to drop to 0 instead of being stuck
active for an indeterminant amount of time.

Added recording of the points where we decide we want to
retrieve new power stats, giving the reason for doing so.
These are only recorded when full logging is turned on.

Change-Id: Ic5d216960a07e0eb658731cdfba7f49ad3acf67e
2015-04-16 17:40:37 -07:00
Hiroshi Yamauchi
2052907d02 Merge "Unhide Debug.getRuntimeStat()." 2015-04-16 17:58:40 +00:00
Jeff Sharkey
bd3af28fdc Merge "Candidate volumes for packages, fix symlink." 2015-04-16 05:50:16 +00:00
Jeff Sharkey
e2d45be4da Candidate volumes for packages, fix symlink.
Add API to determine the possible candidate volumes that a package
can be moved to.  For example, it currently knows that we need to
move ASEC-based apps through internal storage before migrating them
to a private volume.

Comparator for consistent VolumeInfo ordering when displayed in UI.

Fix native library symlink to be volume UUID aware.

Bug: 19993667
Change-Id: I68d5fac5f0f776ac1c7dd15e7a984bfe2704f3f7
2015-04-15 22:21:49 -07:00
Dan Sandler
5ce0430edf Add ashmem stats to Parcels.
Developers can now analyze the true RAM cost of the parcels
they create when those parcels contain ashmem blobs (such as
Bitmap data).

Requires change Ifaf115da in frameworks/native.

Bug: 20079551
Change-Id: Ifaf115dabd1a59cdb1b46e2d49c41f64ac107de4
2015-04-16 04:09:50 +00:00
Wale Ogunwale
ad83f87bcf Merge "@hide Binder#blockUntilThreadAvailable API" 2015-04-15 17:38:17 +00:00
Wale Ogunwale
8d90634aab @hide Binder#blockUntilThreadAvailable API
Bug: 19297165
Change-Id: I15f1139330830b95d7078a5eedd6def794cca6a7
2015-04-15 09:10:03 -07:00
Wale Ogunwale
cc3c34c967 Merge "Added watchdog monitor for Binder threads availability." 2015-04-15 12:35:34 +00:00
Jeff Sharkey
9f09b2d93f Merge "Persist nickname and flags for volumes." 2015-04-15 05:03:08 +00:00
Jeff Sharkey
d95d3bfb2b Persist nickname and flags for volumes.
StorageManager now offers to persist a nickname and user flags for
active volumes.  This metadata is kept around and spliced into
any future VolumeInfo when the same UUID is present.  Current user
flags indicate "initialized" and "snoozed" states to control how
notifications are shown.

Notify listeners when metadata changes, and kick public notification
after a volume is initialized.  Make unique PendingIntents when
multiple volumes are active.

Beginnings of plumbing to ask for missing volumes.

Offer explicit accessors for VolumeInfo and DiskInfo to give better
path to documentation and deprecation.

Bug: 19993667
Change-Id: I3d8b68be83f43ba992d21d51cad5b775776d681c
2015-04-14 21:39:47 -07:00
Wale Ogunwale
d7fdd0228e Added watchdog monitor for Binder threads availability.
The watchdog will trigger if all binder threads in the system_server
are stuck for a long time (1min) preventing the process from
handling additional IPC requests.

Bug: 19297165
Change-Id: I5909a9c230bf23917feaed53f2b54bd50425bf3c
2015-04-14 21:28:34 -07:00
Hiroshi Yamauchi
50f65404fb Unhide Debug.getRuntimeStat().
Export runtime stats (currently GC stats) through this method.

Bug: 19825248
Change-Id: I8f859a2bc497e604f4c4f23f6b45b49ac4f99790
2015-04-14 17:43:36 -07:00
Hiroshi Yamauchi
c969424772 am 4bb374bb: am d83a598c: am 82992b72: Merge "Fix javadoc error in Debug.getRuntimeStats()."
* commit '4bb374bb359c01055ad1f35a9424a12dcadd2d2b':
  Fix javadoc error in Debug.getRuntimeStats().
2015-04-15 00:40:27 +00:00
Hiroshi Yamauchi
d83a598c39 am 82992b72: Merge "Fix javadoc error in Debug.getRuntimeStats()."
* commit '82992b7270842637d1af3dcc7c9ae954bdfa312c':
  Fix javadoc error in Debug.getRuntimeStats().
2015-04-15 00:11:01 +00:00
Jeff Sharkey
56bd312913 Checkpoint of storage notifications.
Rewrite of storage notifications to support multiple disks/volumes,
handling the state of each independently.  Update strings to match
spec.  Include actions to jump into wizard when adoptable, otherwise
browse or eject.

Move browse intent creation to common place on VolumeInfo.  Also add
well-formed extra names.  VolumeInfo now carries the parent disk ID
along with it to avoid races when unmounting.

Bug: 19993667
Change-Id: I236ddc7f8112490355f438b828bec8d40c331fdd
2015-04-14 16:46:27 -07:00
Hiroshi Yamauchi
d8001676ea Fix javadoc error in Debug.getRuntimeStats().
Bug: 19825248
Change-Id: Id7131732d30f01c3edd01c6d4c7c391095ffd054
2015-04-14 16:08:49 -07:00
Hiroshi Yamauchi
f8a713309a am d9e0abdf: am 04143fdd: am e38ee9df: Merge "Add Debug.getRuntimeStat()."
* commit 'd9e0abdf85ad11a9689d3ded79745fe318e82971':
  Add Debug.getRuntimeStat().
2015-04-14 19:48:19 +00:00
Hiroshi Yamauchi
04143fdd55 am e38ee9df: Merge "Add Debug.getRuntimeStat()."
* commit 'e38ee9df26c93415303152ec3f6ed50d847557c8':
  Add Debug.getRuntimeStat().
2015-04-14 19:26:51 +00:00
Hiroshi Yamauchi
8b5a293d09 Add Debug.getRuntimeStat().
Export runtime stats (currently GC stats) through this method.

Bug: 19825248
Change-Id: I147a0e9bc6bdfe4dc29d74e44f0af6349c51d9f8
2015-04-14 10:33:10 -07:00
Dianne Hackborn
1e38382b54 Fixes to idle alarm scheduling, package importance.
- Add new API to ask the activity manager what the current
  importance of a particular package name is (along with a few
  new useful importance levels).

- Fix my last alarm manager change to actually execute the
  alarms we have now decided should run even while we are idle.

Change-Id: I1f14712b4e390770d53b185c96a1b36f6aadd687
2015-04-14 10:01:24 -07:00
Jeff Brown
fb1e9b7978 Merge "Set initial screen brightness earlier in the boot process." 2015-04-13 18:20:00 +00:00
Fyodor Kupolov
05ce40e1af Merge "Use UserHandle instead of int for public APIs" 2015-04-13 16:33:10 +00:00
Fyodor Kupolov
385de624aa Use UserHandle instead of int for public APIs
Bug: 20049349
Change-Id: If5671fb47aa9a3cffebff16787daeae9ca7361e8
2015-04-13 09:31:16 -07:00
Jeff Brown
5d6443bf7c Set initial screen brightness earlier in the boot process.
Previously we had to wait for systemReady before setting the brightness
due to the order in which the display power controller was initialized.
Unfortunately it could take us a rather long time to reach that stage,
particularly after an OTA where the screen would remain at maximum
brightness for minutes while "Optimizing Apps".

This change moves the brightness backlight setting code deeper
into the display manager which has a couple of nice side-benefits
in that it now becomes much easier to coordinate display power mode
changes with display backlight changes.  So this change also resolves
some issued with changing the backlight while in DOZE_SUSPEND and
ensuring that backlight changes generally end up being performed
before executing a power mode change except in the case where the
display needs to come out of suspend first.  (So now the backlight
will be set before entering DOZE from the ON state.)

Deleted some dead code in LightService which was in the way.

Bug: 19029490
Change-Id: I494b5223e676248daf2ff8be3ec338845977f73c
2015-04-13 01:51:22 -07:00
Jeff Sharkey
59d577a518 Browse mode for DocumentsUI, removed volume state.
The existing management mode is too specific, and requires that
storage backends add queryChildDocumentsForManage(), etc.  Instead,
to offer more natural browsing support, add a new BROWSE_ROOT intent.

It behaves mostly like MANAGE_ROOT, except that it doesn't mutate
its Uris with setManageMode(), and it shortcuts straight to VIEW on
clicked documents.

It can be launched like this:

$ adb shell am start -a android.provider.action.BROWSE_ROOT
    -d content://com.android.externalstorage.documents/root/8405-1DFB
    -c android.intent.category.DEFAULT

Also rename a MetricsConstants to make it clearer, and don't
auto-mount all emulated volumes.

Fix bugs around parceling of DiskInfo/VolumeInfo.  Method to resolve
the best description for a VolumeInfo, which might need to fall
back to DiskInfo.

Add back "removed" volume state so we send broadcast when a volume
is destroyed, matching the expected public API behavior.

Bug: 19993667
Change-Id: I13aff32c5e11dfc63da44aee9e93a27f4690a43f
2015-04-12 16:03:50 -07:00
Fyodor Kupolov
2e29aa5ea7 Merge "Added getUserCreationTime to query user/profile creation time" 2015-04-10 23:33:29 +00:00
Adam Lesinski
1739076ef9 Fix deadlock issue in BatteryStatsHelper.
It was assumed that BatteryStatsHelper could safely call into system services.
Because it is used when dumping information from the BatteryStatsService,
this assumption was incorrect.

Now the BatteryStats object carries around the state of the energy reporting
for Bluetooth and WiFi, so BatteryStatsHelper avoids a query into WiFiManager.

b/19729960

Change-Id: I8745cf6aafeea8e862e34fe63b20056f6ba54b40
2015-04-10 13:17:47 -07:00
Dianne Hackborn
4870e9d5eb More work on device idle mode and other power stuff.
Add idle mode support to the alarm manager.  Introduce
a new concept of flags associated with alarms to tell
the alarm manager how to treat the alarm -- they allow
everything from the alarm that will bring us out of idle
mode, to alarms that are allowed when idle or should
also bring us out of idle.  The standalone boolean is
now also a flag.

(Note there is currently no protection from user space
setting the flags however it wants; I will be working
on that in a follow-up change.)

When in idle mode, the alarm manager pushes all alarms
that shouldn't execute during that time over to a
separate list that is not executed until out of idle.
To help with this, I reworked a bit how Alarm objects
are managed, so that when rebatching or moving between
lists we don't have to allocated new objects but can
just use the same existing instance.

Also tweaked the sync manager to deal with idle mode,
which currently just means doing the same thing as when
low on storage -- turning off sync.

Add new ACTION_CHARGING and ACTION_DISCHARGING broadcasts
that apps can listen for to know when the device is actively
charging and discharging.  These are better than the old
POWER_CONNECTED and POWER_DISCONNECTED ones because we only
report charging when we actually see that there is enough
power being provided to charge the battery (and will report
discharging if there is not enough power).

The job controller uses these new actions for scheduling
jobs that want to run while plugged in.  Removed the
"stable charging" stuff while doing so, since the new
charging state serves as an even better signal for that.

Introduced two new process states: FOREGROUND_SERVICE and
TOP_SLEEPING.  This will allow us to treat foreground services
specially (such as still allowing network access to them for
background music playback) while not mixing them together with
whatever happens to be the top activity while the device is
asleep.

Also some other small cleanup here and there.

Change-Id: I7a9808b578bad6f50deb8e1baf919298512a0d3a
2015-04-09 14:05:17 -07:00
Fyodor Kupolov
ff7233e2e3 Added getUserCreationTime to query user/profile creation time
Added public api to query creation time of the user or of a managed profile
associated with the calling user.

Bug: 20049349
Change-Id: I7f9263fe434233e6f7d4f165c974cab64ca7107c
2015-04-08 11:28:52 -07:00
Adam Lesinski
e08af19fcc Adding per UID WiFi power distribution.
Change-Id: I88c539074607d7261f6c5cf1dbae47c3cf53f253
2015-04-07 11:37:10 -07:00