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

Commit f6308080 authored by Daniel Sandler's avatar Daniel Sandler
Browse files

Show desk dock apps as screen savers.

Now that docking launches the screen saver instead of a dock
app, we offer those apps as screen savers to allow them to
continue functioning as they did before. As a bonus, users
without docks can now use dock apps!

Bug: 5591015
Change-Id: Ifc138ab4c0bdffa1bbd7afe8b3ad730ec971aa34
parent 9e2e2420
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -44,11 +44,15 @@ import android.widget.ListAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class DreamComponentPreference extends Preference {
    private static final String TAG = "DreamComponentPreference";

    private static final boolean SHOW_DOCK_APPS_TOO = true;
    
    private final PackageManager pm;
    private final ContentResolver resolver;

@@ -62,6 +66,10 @@ public class DreamComponentPreference extends Preference {

    private void refreshFromSettings() {
        String component = Settings.Secure.getString(resolver, DREAM_COMPONENT);
        if (component == null) {
            component = getContext().getResources().getString(
                com.android.internal.R.string.config_defaultDreamComponent);
        }
        if (component != null) {
            ComponentName cn = ComponentName.unflattenFromString(component);
            try {
@@ -72,6 +80,18 @@ public class DreamComponentPreference extends Preference {
        }
    }

    final static Comparator<ResolveInfo> sResolveInfoComparator = new Comparator<ResolveInfo>() {
        @Override
        public int compare(ResolveInfo a, ResolveInfo b) {
            int cmp = a.activityInfo.applicationInfo.packageName.compareTo(
                    b.activityInfo.applicationInfo.packageName);
            if (cmp == 0) {
                cmp = a.activityInfo.name.compareTo(b.activityInfo.name);
            }
            return cmp;
        }
    };

    public class DreamListAdapter extends BaseAdapter implements ListAdapter {
        private ArrayList<ResolveInfo> results;
        private final LayoutInflater inflater;
@@ -81,7 +101,25 @@ public class DreamComponentPreference extends Preference {
                        .addCategory("android.intent.category.DREAM");

            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            results = new ArrayList<ResolveInfo>(pm.queryIntentActivities(choosy, 0));

            // Group by package
            Collections.sort(results, sResolveInfoComparator);

            if (SHOW_DOCK_APPS_TOO) {
                choosy = new Intent(Intent.ACTION_MAIN)
                            .addCategory(Intent.CATEGORY_DESK_DOCK);

                List<ResolveInfo> dockApps = pm.queryIntentActivities(choosy, 0);
                for (ResolveInfo app : dockApps) {
                    // do not insert duplicate packages
                    int pos = Collections.binarySearch(results, app, sResolveInfoComparator);
                    if (pos < 0) {
                        results.add(-1-pos, app);
                    }
                }
            }
        }

        @Override