summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Philip P. Moltmann <moltmann@google.com> 2015-11-26 00:36:55 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2015-11-26 00:36:55 +0000
commit7fc7f48a898a68f4bfdf8fec83aafe32f8137f11 (patch)
tree740154c2ff7c8a960e10f19d2d5ec9120d18702c
parentc14a26307bced4e62e33048b055d09bb9c73979a (diff)
parent03755a1f12390be9ddfcce8c5ad3f887fa5ccf9f (diff)
Merge "Syncronosuly notify SelectPrinterActivity about changes to enabled print services"
-rw-r--r--packages/PrintSpooler/src/com/android/printspooler/ui/SelectPrinterActivity.java57
-rw-r--r--services/print/java/com/android/server/print/PrintManagerService.java5
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 {