From 85dcef12263f3cbae05240a155e92e7cf386d58f Mon Sep 17 00:00:00 2001 From: Svetoslav Date: Thu, 11 Sep 2014 14:30:13 -0700 Subject: [PATCH] Fix settings crash in print job screen. The code was looking up the print job from the print manager based on the lifecycle event of the hosting fragment. There was a case missing and the print job not initialized on rotation. This change looks up the job lazily making the code more robust. bug:17471952 Change-Id: I00075e161f69ca711bac6857f5ec00c20b5b17a0 --- .../settings/print/PrintJobSettingsFragment.java | 24 ++++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/com/android/settings/print/PrintJobSettingsFragment.java b/src/com/android/settings/print/PrintJobSettingsFragment.java index 04f3f16f1f..a72fa7d91f 100644 --- a/src/com/android/settings/print/PrintJobSettingsFragment.java +++ b/src/com/android/settings/print/PrintJobSettingsFragment.java @@ -112,13 +112,13 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - if (!mPrintJob.getInfo().isCancelling()) { + if (!getPrintJob().getInfo().isCancelling()) { MenuItem cancel = menu.add(0, MENU_ITEM_ID_CANCEL, Menu.NONE, getString(R.string.print_cancel)); cancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); } - if (mPrintJob.isFailed()) { + if (getPrintJob().isFailed()) { MenuItem restart = menu.add(0, MENU_ITEM_ID_RESTART, Menu.NONE, getString(R.string.print_restart)); restart.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); @@ -129,13 +129,13 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_ITEM_ID_CANCEL: { - mPrintJob.cancel(); + getPrintJob().cancel(); finish(); return true; } case MENU_ITEM_ID_RESTART: { - mPrintJob.restart(); + getPrintJob().restart(); finish(); return true; } @@ -152,8 +152,15 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment { } } + private PrintJob getPrintJob() { + if (mPrintJob == null) { + mPrintJob = mPrintManager.getPrintJob(mPrintJobId); + } + return mPrintJob; + } + private void updateUi() { - PrintJob printJob = mPrintManager.getPrintJob(mPrintJobId); + PrintJob printJob = getPrintJob(); if (printJob == null) { finish(); @@ -165,13 +172,12 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment { return; } - mPrintJob = printJob; - PrintJobInfo info = mPrintJob.getInfo(); + PrintJobInfo info = printJob.getInfo(); switch (info.getState()) { case PrintJobInfo.STATE_QUEUED: case PrintJobInfo.STATE_STARTED: { - if (!mPrintJob.getInfo().isCancelling()) { + if (!printJob.getInfo().isCancelling()) { mPrintJobPreference.setTitle(getString( R.string.print_printing_state_title_template, info.getLabel())); } else { @@ -186,7 +192,7 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment { } break; case PrintJobInfo.STATE_BLOCKED: { - if (!mPrintJob.getInfo().isCancelling()) { + if (!printJob.getInfo().isCancelling()) { mPrintJobPreference.setTitle(getString( R.string.print_blocked_state_title_template, info.getLabel())); } else { -- 2.11.0