boolean isDone();
/**
+ * Return the progress (0..1) made in this session. When {@link #isDone() isDone} returns
+ * true, the progress value will be 1.
+ */
+ float getProgress();
+
+ /**
* Optimize the next package. Note: this command is synchronous, that is, only returns after
* the package has been dexopted (or dexopting failed).
*/
// TODO: Evaluate the need for WeakReferences here.
private List<PackageParser.Package> mDexoptPackages;
+ private int completeSize;
public OtaDexoptService(Context context, PackageManagerService packageManagerService) {
this.mContext = context;
mDexoptPackages = PackageManagerServiceUtils.getPackagesForDexopt(
mPackageManagerService.mPackages.values(), mPackageManagerService);
}
+ completeSize = mDexoptPackages.size();
}
@Override
}
@Override
+ public synchronized float getProgress() throws RemoteException {
+ if (completeSize == 0) {
+ return 1f;
+ }
+ return (completeSize - mDexoptPackages.size()) / ((float)completeSize);
+ }
+
+ @Override
public synchronized void dexoptNextPackage() throws RemoteException {
if (mDexoptPackages == null) {
throw new IllegalStateException("dexoptNextPackage() called before prepare()");
return runOtaDone();
case "step":
return runOtaStep();
+ case "progress":
+ return runOtaProgress();
default:
return handleDefaultCommands(cmd);
}
return 0;
}
+ private int runOtaProgress() throws RemoteException {
+ final float progress = mInterface.getProgress();
+ final PrintWriter pw = getOutPrintWriter();
+ pw.format("%.2f", progress);
+ return 0;
+ }
+
@Override
public void onHelp() {
final PrintWriter pw = getOutPrintWriter();