diff options
| author | 2015-11-26 00:36:55 +0000 | |
|---|---|---|
| committer | 2015-11-26 00:36:55 +0000 | |
| commit | 7fc7f48a898a68f4bfdf8fec83aafe32f8137f11 (patch) | |
| tree | 740154c2ff7c8a960e10f19d2d5ec9120d18702c | |
| parent | c14a26307bced4e62e33048b055d09bb9c73979a (diff) | |
| parent | 03755a1f12390be9ddfcce8c5ad3f887fa5ccf9f (diff) | |
Merge "Syncronosuly notify SelectPrinterActivity about changes to enabled print services"
| -rw-r--r-- | packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java | 57 | ||||
| -rw-r--r-- | services/print/java/com/android/server/print/PrintManagerService.java | 5 |
2 files changed, 56 insertions, 6 deletions
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java index f4c15bd0690a..ab0b2f1acf85 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java +++ b/packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java @@ -33,10 +33,12 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; +import android.database.ContentObserver; import android.database.DataSetObserver; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; +import android.os.Handler; import android.print.PrintManager; import android.print.PrinterId; import android.print.PrinterInfo; @@ -84,9 +86,7 @@ public final class SelectPrinterActivity extends Activity { private static final String EXTRA_PRINTER_ID = "EXTRA_PRINTER_ID"; - /** - * If there are any enabled print services - */ + /** If there are any enabled print services */ private boolean mHasEnabledPrintServices; private final ArrayList<PrintServiceInfo> mAddPrinterServices = @@ -98,6 +98,9 @@ public final class SelectPrinterActivity extends Activity { private AnnounceFilterResult mAnnounceFilterResult; + /** Monitor if new print services get enabled or disabled */ + private ContentObserver mPrintServicesObserver; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -227,14 +230,50 @@ public final class SelectPrinterActivity extends Activity { return false; } - @Override - public void onResume() { - super.onResume(); + /** + * Adjust the UI if the enabled print services changed. + */ + private synchronized void onPrintServicesUpdate() { updateServicesWithAddPrinterActivity(); updateEmptyView((DestinationAdapter)mListView.getAdapter()); invalidateOptionsMenu(); } + /** + * Register listener for changes to the enabled print services. + */ + private void registerServiceMonitor() { + mPrintServicesObserver = new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + onPrintServicesUpdate(); + } + }; + + getContentResolver().registerContentObserver( + Settings.Secure.getUriFor(Settings.Secure.ENABLED_PRINT_SERVICES), false, + mPrintServicesObserver); + } + + /** + * Unregister {@link #mPrintServicesObserver listener for changes to the enabled print services} + * or nothing if the listener is not registered. + */ + private void unregisterServiceMonitorIfNeeded() { + if (mPrintServicesObserver != null) { + getContentResolver().unregisterContentObserver(mPrintServicesObserver); + + mPrintServicesObserver = null; + } + } + + @Override + public void onStart() { + super.onStart(); + registerServiceMonitor(); + onPrintServicesUpdate(); + } + @Override public void onPause() { if (mAnnounceFilterResult != null) { @@ -244,6 +283,12 @@ public final class SelectPrinterActivity extends Activity { } @Override + public void onStop() { + unregisterServiceMonitorIfNeeded(); + super.onStop(); + } + + @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_add_printer) { showAddPrinterSelectionDialog(); diff --git a/services/print/java/com/android/server/print/PrintManagerService.java b/services/print/java/com/android/server/print/PrintManagerService.java index 92bd81fd0fd6..0a8c014c4d37 100644 --- a/services/print/java/com/android/server/print/PrintManagerService.java +++ b/services/print/java/com/android/server/print/PrintManagerService.java @@ -228,6 +228,11 @@ public final class PrintManagerService extends SystemService { return null; } userState = getOrCreateUserStateLocked(resolvedUserId); + + // The user state might be updated via the same observer-set as the caller of this + // interface. If the caller is called back first the user state is not yet updated + // and the user gets and inconsistent view. Hence force an update. + userState.updateIfNeededLocked(); } final long identity = Binder.clearCallingIdentity(); try { |