Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 43557570 authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

Print service settings polish

1. Moved the settings and add printers to the overflow menu.

2. Collapsing the search action view to get proper behavior when selected.

3. Showing the search option only if there are printers.

4. Stop observing for printers if the service is disabled.

bug:10652301

Change-Id: I589a3b177c5a58a8b1382d7020fd4b128afd9038
parent 0a0635c1
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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>
+81 −23
Original line number Diff line number Diff line
@@ -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,20 +317,23 @@ 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);
        if (mServiceEnabled && mPrintersAdapter.getUnfilteredCount() > 0) {
            SearchView searchView = (SearchView) searchItem.getActionView();
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
@@ -301,6 +347,9 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment
                    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();
        }