am 3a67c5e3: am 1e1d5324: Merge "Print service settings polish" into klp-dev

* commit '3a67c5e3b3534176d9b57480b2a9d79b1f8e6ba9':
  Print service settings polish
This commit is contained in:
Svetoslav Ganov
2013-09-07 15:12:51 -07:00
committed by Android Git Automerger
2 changed files with 84 additions and 26 deletions

View File

@@ -20,17 +20,17 @@
android:title="@string/print_menu_item_search" android:title="@string/print_menu_item_search"
android:icon="@*android:drawable/ic_menu_search_holo_dark" android:icon="@*android:drawable/ic_menu_search_holo_dark"
android:actionViewClass="android.widget.SearchView" android:actionViewClass="android.widget.SearchView"
android:showAsAction="ifRoom" android:showAsAction="ifRoom|collapseActionView"
android:imeOptions="actionSearch"> android:imeOptions="actionSearch">
</item> </item>
<item <item
android:id="@+id/print_menu_item_add_printer" android:id="@+id/print_menu_item_add_printer"
android:title="@string/print_menu_item_add_printer" android:title="@string/print_menu_item_add_printer"
android:showAsAction="ifRoom"> android:showAsAction="never">
</item> </item>
<item <item
android:id="@+id/print_menu_item_settings" android:id="@+id/print_menu_item_settings"
android:title="@string/print_menu_item_settings" android:title="@string/print_menu_item_settings"
android:showAsAction="ifRoom"> android:showAsAction="never">
</item> </item>
</menu> </menu>

View File

@@ -30,6 +30,7 @@ import android.content.Loader;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.database.DataSetObserver;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
@@ -79,9 +80,28 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
new SettingsContentObserver(new Handler()) { new SettingsContentObserver(new Handler()) {
@Override @Override
public void onChange(boolean selfChange, Uri uri) { public void onChange(boolean selfChange, Uri uri) {
List<ComponentName> services = SettingsUtils.readEnabledPrintServices(getActivity()); updateForServiceEnabledState();
final boolean enabled = services.contains(mComponentName); }
mToggleSwitch.setCheckedInternal(enabled); };
private final DataSetObserver mDataObserver = new DataSetObserver() {
@Override
public void onChanged() {
invalidateOptionsMenuIfNeeded();
}
@Override
public void onInvalidated() {
invalidateOptionsMenuIfNeeded();
}
private void invalidateOptionsMenuIfNeeded() {
final int unfilteredItemCount = mPrintersAdapter.getUnfilteredCount();
if ((mLastUnfilteredItemCount <= 0 && unfilteredItemCount > 0)
|| mLastUnfilteredItemCount > 0 && unfilteredItemCount <= 0) {
getActivity().invalidateOptionsMenu();
}
mLastUnfilteredItemCount = unfilteredItemCount;
} }
}; };
@@ -100,14 +120,21 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
private ComponentName mComponentName; private ComponentName mComponentName;
private PrintersAdapter mPrintersAdapter;
// TODO: Showing sub-sub fragment does not handle the activity title // TODO: Showing sub-sub fragment does not handle the activity title
// so we do it but this is wrong. Do a real fix when there is time. // so we do it but this is wrong. Do a real fix when there is time.
private CharSequence mOldActivityTitle; private CharSequence mOldActivityTitle;
private int mLastUnfilteredItemCount;
private boolean mServiceEnabled;
@Override @Override
public void onResume() { public void onResume() {
mSettingsContentObserver.register(getContentResolver()); mSettingsContentObserver.register(getContentResolver());
super.onResume(); super.onResume();
updateForServiceEnabledState();
} }
@Override @Override
@@ -119,9 +146,12 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
@Override @Override
public void onViewCreated(View view, Bundle savedInstanceState) { public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
onInstallActionBarToggleSwitch(); installActionBarToggleSwitch();
processArguments(getArguments()); processArguments(getArguments());
getListView().setAdapter(new PrintersAdapter()); mPrintersAdapter = new PrintersAdapter();
mPrintersAdapter.registerDataSetObserver(mDataObserver);
getListView().setAdapter(mPrintersAdapter);
updateForServiceEnabledState();
} }
@Override @Override
@@ -188,7 +218,20 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
} }
} }
protected void onInstallActionBarToggleSwitch() { private void updateForServiceEnabledState() {
List<ComponentName> services = SettingsUtils.readEnabledPrintServices(getActivity());
mServiceEnabled = services.contains(mComponentName);
if (mServiceEnabled) {
mToggleSwitch.setCheckedInternal(true);
mPrintersAdapter.enable();
} else {
mToggleSwitch.setCheckedInternal(false);
mPrintersAdapter.disable();
}
getActivity().invalidateOptionsMenu();
}
private void installActionBarToggleSwitch() {
mToggleSwitch = createAndAddActionBarToggleSwitch(getActivity()); mToggleSwitch = createAndAddActionBarToggleSwitch(getActivity());
mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() {
@Override @Override
@@ -235,7 +278,6 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
if (!getPackageManager().queryIntentActivities(settingsIntent, 0).isEmpty()) { if (!getPackageManager().queryIntentActivities(settingsIntent, 0).isEmpty()) {
mSettingsTitle = settingsTitle; mSettingsTitle = settingsTitle;
mSettingsIntent = settingsIntent; mSettingsIntent = settingsIntent;
setHasOptionsMenu(true);
} }
} }
@@ -251,7 +293,6 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
if (!getPackageManager().queryIntentActivities(addPritnersIntent, 0).isEmpty()) { if (!getPackageManager().queryIntentActivities(addPritnersIntent, 0).isEmpty()) {
mAddPrintersTitle = addPrintersTitle; mAddPrintersTitle = addPrintersTitle;
mAddPrintersIntent = addPritnersIntent; mAddPrintersIntent = addPritnersIntent;
setHasOptionsMenu(true);
} }
} }
@@ -266,6 +307,8 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
// Component name. // Component name.
mComponentName = ComponentName.unflattenFromString(arguments mComponentName = ComponentName.unflattenFromString(arguments
.getString(PrintSettingsFragment.EXTRA_SERVICE_COMPONENT_NAME)); .getString(PrintSettingsFragment.EXTRA_SERVICE_COMPONENT_NAME));
setHasOptionsMenu(true);
} }
@Override @Override
@@ -274,33 +317,39 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
inflater.inflate(R.menu.print_service_settings, menu); inflater.inflate(R.menu.print_service_settings, menu);
MenuItem addPrinters = menu.findItem(R.id.print_menu_item_add_printer); MenuItem addPrinters = menu.findItem(R.id.print_menu_item_add_printer);
if (!TextUtils.isEmpty(mAddPrintersTitle) && mAddPrintersIntent != null) { if (mServiceEnabled && !TextUtils.isEmpty(mAddPrintersTitle)
&& mAddPrintersIntent != null) {
addPrinters.setIntent(mAddPrintersIntent); addPrinters.setIntent(mAddPrintersIntent);
} else { } else {
menu.removeItem(R.id.print_menu_item_add_printer); menu.removeItem(R.id.print_menu_item_add_printer);
} }
MenuItem settings = menu.findItem(R.id.print_menu_item_settings); MenuItem settings = menu.findItem(R.id.print_menu_item_settings);
if (!TextUtils.isEmpty(mSettingsTitle) && mSettingsIntent != null) { if (mServiceEnabled && !TextUtils.isEmpty(mSettingsTitle)
&& mSettingsIntent != null) {
settings.setIntent(mSettingsIntent); settings.setIntent(mSettingsIntent);
} else { } else {
menu.removeItem(R.id.print_menu_item_settings); menu.removeItem(R.id.print_menu_item_settings);
} }
MenuItem searchItem = menu.findItem(R.id.print_menu_item_search); MenuItem searchItem = menu.findItem(R.id.print_menu_item_search);
SearchView searchView = (SearchView) searchItem.getActionView(); if (mServiceEnabled && mPrintersAdapter.getUnfilteredCount() > 0) {
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { SearchView searchView = (SearchView) searchItem.getActionView();
@Override searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
public boolean onQueryTextSubmit(String query) { @Override
return true; public boolean onQueryTextSubmit(String query) {
} return true;
}
@Override @Override
public boolean onQueryTextChange(String searchString) { public boolean onQueryTextChange(String searchString) {
((Filterable) getListView().getAdapter()).getFilter().filter(searchString); ((Filterable) getListView().getAdapter()).getFilter().filter(searchString);
return true; return true;
} }
}); });
} else {
menu.removeItem(R.id.print_menu_item_search);
}
} }
private ToggleSwitch createAndAddActionBarToggleSwitch(Activity activity) { private ToggleSwitch createAndAddActionBarToggleSwitch(Activity activity) {
@@ -347,10 +396,18 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
private CharSequence mLastSearchString; private CharSequence mLastSearchString;
public PrintersAdapter() { public void enable() {
getLoaderManager().initLoader(LOADER_ID_PRINTERS_LOADER, null, this); getLoaderManager().initLoader(LOADER_ID_PRINTERS_LOADER, null, this);
} }
public void disable() {
getLoaderManager().destroyLoader(LOADER_ID_PRINTERS_LOADER);
}
public int getUnfilteredCount() {
return mPrinters.size();
}
@Override @Override
public Filter getFilter() { public Filter getFilter() {
return new Filter() { return new Filter() {
@@ -480,6 +537,7 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
synchronized (mLock) { synchronized (mLock) {
mPrinters.clear(); mPrinters.clear();
mFilteredPrinters.clear(); mFilteredPrinters.clear();
mLastSearchString = null;
} }
notifyDataSetInvalidated(); notifyDataSetInvalidated();
} }