summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2013-09-07 15:10:35 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-09-07 15:10:35 -0700
commit3a67c5e3b3534176d9b57480b2a9d79b1f8e6ba9 (patch)
tree6c595ffa3af672d3313466ef4d29c1ee13de3051 /src/com
parent1cae5d35b257d2ba7c018ceb87c22496bc189147 (diff)
parent1e1d532491ecf10e7fd5791559b5d97be5553ae4 (diff)
downloadpackages_apps_Settings-3a67c5e3b3534176d9b57480b2a9d79b1f8e6ba9.zip
packages_apps_Settings-3a67c5e3b3534176d9b57480b2a9d79b1f8e6ba9.tar.gz
packages_apps_Settings-3a67c5e3b3534176d9b57480b2a9d79b1f8e6ba9.tar.bz2
am 1e1d5324: Merge "Print service settings polish" into klp-dev
* commit '1e1d532491ecf10e7fd5791559b5d97be5553ae4': Print service settings polish
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/settings/print/PrintServiceSettingsFragment.java104
1 files changed, 81 insertions, 23 deletions
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();
}