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
This commit is contained in:
Svetoslav
2014-09-11 14:30:13 -07:00
parent 0a11f60595
commit 85dcef1226

View File

@@ -112,13 +112,13 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment {
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater); super.onCreateOptionsMenu(menu, inflater);
if (!mPrintJob.getInfo().isCancelling()) { if (!getPrintJob().getInfo().isCancelling()) {
MenuItem cancel = menu.add(0, MENU_ITEM_ID_CANCEL, Menu.NONE, MenuItem cancel = menu.add(0, MENU_ITEM_ID_CANCEL, Menu.NONE,
getString(R.string.print_cancel)); getString(R.string.print_cancel));
cancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 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, MenuItem restart = menu.add(0, MENU_ITEM_ID_RESTART, Menu.NONE,
getString(R.string.print_restart)); getString(R.string.print_restart));
restart.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); restart.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
@@ -129,13 +129,13 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment {
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case MENU_ITEM_ID_CANCEL: { case MENU_ITEM_ID_CANCEL: {
mPrintJob.cancel(); getPrintJob().cancel();
finish(); finish();
return true; return true;
} }
case MENU_ITEM_ID_RESTART: { case MENU_ITEM_ID_RESTART: {
mPrintJob.restart(); getPrintJob().restart();
finish(); finish();
return true; 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() { private void updateUi() {
PrintJob printJob = mPrintManager.getPrintJob(mPrintJobId); PrintJob printJob = getPrintJob();
if (printJob == null) { if (printJob == null) {
finish(); finish();
@@ -165,13 +172,12 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment {
return; return;
} }
mPrintJob = printJob; PrintJobInfo info = printJob.getInfo();
PrintJobInfo info = mPrintJob.getInfo();
switch (info.getState()) { switch (info.getState()) {
case PrintJobInfo.STATE_QUEUED: case PrintJobInfo.STATE_QUEUED:
case PrintJobInfo.STATE_STARTED: { case PrintJobInfo.STATE_STARTED: {
if (!mPrintJob.getInfo().isCancelling()) { if (!printJob.getInfo().isCancelling()) {
mPrintJobPreference.setTitle(getString( mPrintJobPreference.setTitle(getString(
R.string.print_printing_state_title_template, info.getLabel())); R.string.print_printing_state_title_template, info.getLabel()));
} else { } else {
@@ -186,7 +192,7 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment {
} break; } break;
case PrintJobInfo.STATE_BLOCKED: { case PrintJobInfo.STATE_BLOCKED: {
if (!mPrintJob.getInfo().isCancelling()) { if (!printJob.getInfo().isCancelling()) {
mPrintJobPreference.setTitle(getString( mPrintJobPreference.setTitle(getString(
R.string.print_blocked_state_title_template, info.getLabel())); R.string.print_blocked_state_title_template, info.getLabel()));
} else { } else {