Exempt hibernating apps from dex optimization

We previously only checked whether an app could be optimized in
PackageManagerService#getOptimizablePackages. This missed edge cases
where the app would still generate vdex/odex such as when the app is
updated.

We fix this by considering any hibernating app as not optimizable in all
cases.

To support unit testing, we also change canOptimizePackage to a
non-static method and enumerate PackageDexOptimizer's dependencies
clearly with an injector.

Bug: 203693378
Test: Reproduce steps in bug, confirm app does not have vdex/odex
Test: atest PackageManagerServiceHibernationTests
Change-Id: I16e76619e15351659a4f7121fc17cc46937f3591
6 files changed