* commit '3a67c5e3b3534176d9b57480b2a9d79b1f8e6ba9': Print service settings polish
This commit is contained in:
@@ -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>
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user