diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2013-09-07 15:12:51 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-09-07 15:12:51 -0700 |
commit | 00457ee68d63e885e9d9f001f02094cedfcc31b7 (patch) | |
tree | 93fb8792e749b6c276f9d567754fc2602506ab26 | |
parent | 34d0264d05f158d30006c614cc0306495a4db92f (diff) | |
parent | 3a67c5e3b3534176d9b57480b2a9d79b1f8e6ba9 (diff) | |
download | packages_apps_Settings-00457ee68d63e885e9d9f001f02094cedfcc31b7.zip packages_apps_Settings-00457ee68d63e885e9d9f001f02094cedfcc31b7.tar.gz packages_apps_Settings-00457ee68d63e885e9d9f001f02094cedfcc31b7.tar.bz2 |
am 3a67c5e3: am 1e1d5324: Merge "Print service settings polish" into klp-dev
* commit '3a67c5e3b3534176d9b57480b2a9d79b1f8e6ba9':
Print service settings polish
-rw-r--r-- | res/menu/print_service_settings.xml | 6 | ||||
-rw-r--r-- | src/com/android/settings/print/PrintServiceSettingsFragment.java | 104 |
2 files changed, 84 insertions, 26 deletions
diff --git a/res/menu/print_service_settings.xml b/res/menu/print_service_settings.xml index cb9071c..a9a4aed 100644 --- a/res/menu/print_service_settings.xml +++ b/res/menu/print_service_settings.xml @@ -20,17 +20,17 @@ android:title="@string/print_menu_item_search" android:icon="@*android:drawable/ic_menu_search_holo_dark" android:actionViewClass="android.widget.SearchView" - android:showAsAction="ifRoom" + android:showAsAction="ifRoom|collapseActionView" android:imeOptions="actionSearch"> </item> <item android:id="@+id/print_menu_item_add_printer" android:title="@string/print_menu_item_add_printer" - android:showAsAction="ifRoom"> + android:showAsAction="never"> </item> <item android:id="@+id/print_menu_item_settings" android:title="@string/print_menu_item_settings" - android:showAsAction="ifRoom"> + android:showAsAction="never"> </item> </menu> diff --git a/src/com/android/settings/print/PrintServiceSettingsFragment.java b/src/com/android/settings/print/PrintServiceSettingsFragment.java index 73b13cb..8dae1f0 100644 --- a/src/com/android/settings/print/PrintServiceSettingsFragment.java +++ b/src/com/android/settings/print/PrintServiceSettingsFragment.java @@ -30,6 +30,7 @@ import android.content.Loader; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.database.ContentObserver; +import android.database.DataSetObserver; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -79,9 +80,28 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment new SettingsContentObserver(new Handler()) { @Override public void onChange(boolean selfChange, Uri uri) { - List<ComponentName> services = SettingsUtils.readEnabledPrintServices(getActivity()); - final boolean enabled = services.contains(mComponentName); - mToggleSwitch.setCheckedInternal(enabled); + updateForServiceEnabledState(); + } + }; + + 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 PrintersAdapter mPrintersAdapter; + // 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. private CharSequence mOldActivityTitle; + private int mLastUnfilteredItemCount; + + private boolean mServiceEnabled; + @Override public void onResume() { mSettingsContentObserver.register(getContentResolver()); super.onResume(); + updateForServiceEnabledState(); } @Override @@ -119,9 +146,12 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - onInstallActionBarToggleSwitch(); + installActionBarToggleSwitch(); processArguments(getArguments()); - getListView().setAdapter(new PrintersAdapter()); + mPrintersAdapter = new PrintersAdapter(); + mPrintersAdapter.registerDataSetObserver(mDataObserver); + getListView().setAdapter(mPrintersAdapter); + updateForServiceEnabledState(); } @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.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { @Override @@ -235,7 +278,6 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment if (!getPackageManager().queryIntentActivities(settingsIntent, 0).isEmpty()) { mSettingsTitle = settingsTitle; mSettingsIntent = settingsIntent; - setHasOptionsMenu(true); } } @@ -251,7 +293,6 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment if (!getPackageManager().queryIntentActivities(addPritnersIntent, 0).isEmpty()) { mAddPrintersTitle = addPrintersTitle; mAddPrintersIntent = addPritnersIntent; - setHasOptionsMenu(true); } } @@ -266,6 +307,8 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment // Component name. mComponentName = ComponentName.unflattenFromString(arguments .getString(PrintSettingsFragment.EXTRA_SERVICE_COMPONENT_NAME)); + + setHasOptionsMenu(true); } @Override @@ -274,33 +317,39 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment inflater.inflate(R.menu.print_service_settings, menu); 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); } else { menu.removeItem(R.id.print_menu_item_add_printer); } 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); } else { menu.removeItem(R.id.print_menu_item_settings); } MenuItem searchItem = menu.findItem(R.id.print_menu_item_search); - SearchView searchView = (SearchView) searchItem.getActionView(); - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextSubmit(String query) { - return true; - } + if (mServiceEnabled && mPrintersAdapter.getUnfilteredCount() > 0) { + SearchView searchView = (SearchView) searchItem.getActionView(); + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + return true; + } - @Override - public boolean onQueryTextChange(String searchString) { - ((Filterable) getListView().getAdapter()).getFilter().filter(searchString); - return true; - } - }); + @Override + public boolean onQueryTextChange(String searchString) { + ((Filterable) getListView().getAdapter()).getFilter().filter(searchString); + return true; + } + }); + } else { + menu.removeItem(R.id.print_menu_item_search); + } } private ToggleSwitch createAndAddActionBarToggleSwitch(Activity activity) { @@ -347,10 +396,18 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment private CharSequence mLastSearchString; - public PrintersAdapter() { + public void enable() { getLoaderManager().initLoader(LOADER_ID_PRINTERS_LOADER, null, this); } + public void disable() { + getLoaderManager().destroyLoader(LOADER_ID_PRINTERS_LOADER); + } + + public int getUnfilteredCount() { + return mPrinters.size(); + } + @Override public Filter getFilter() { return new Filter() { @@ -480,6 +537,7 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment synchronized (mLock) { mPrinters.clear(); mFilteredPrinters.clear(); + mLastSearchString = null; } notifyDataSetInvalidated(); } |