Merge "Syncronosuly notify SelectPrinterActivity about changes to enabled print services"
This commit is contained in:
committed by
Android (Google) Code Review
commit
7fc7f48a89
@@ -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) {
|
||||
@@ -243,6 +282,12 @@ public final class SelectPrinterActivity extends Activity {
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
unregisterServiceMonitorIfNeeded();
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == R.id.action_add_printer) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user