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

Commit 61209bc9 authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Do not launch non exposed add printer activity

Change-Id: I0b9b11ea0ce0140c77dff2539b1a0a9dcf1558b0
Fixes: 29580579
parent f6e3c9a5
Loading
Loading
Loading
Loading
+31 −8
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.Loader;
import android.content.pm.ResolveInfo;
import android.database.DataSetObserver;
import android.net.Uri;
import android.os.Bundle;
@@ -450,7 +451,24 @@ public class AddPrinterActivity extends ListActivity implements AdapterView.OnIt
    private class EnabledServicesAdapter extends PrintServiceInfoAdapter {
        @Override
        public void performAction(@IntRange(from = 0) int position) {
            PrintServiceInfo service = (PrintServiceInfo) getItem(position);
            Intent intent = getAddPrinterIntent((PrintServiceInfo) getItem(position));
            if (intent != null) {
                try {
                    startActivity(intent);
                } catch (ActivityNotFoundException|SecurityException e) {
                    Log.e(LOG_TAG, "Cannot start add printers activity", e);
                }
            }
        }

        /**
         * Get the intent used to launch the add printers activity.
         *
         * @param service The service the printer should be added for
         *
         * @return The intent to launch the activity or null if the activity could not be launched.
         */
        private Intent getAddPrinterIntent(@NonNull PrintServiceInfo service) {
            String addPrinterActivityName = service.getAddPrintersActivityName();

            if (!TextUtils.isEmpty(addPrinterActivityName)) {
@@ -458,12 +476,17 @@ public class AddPrinterActivity extends ListActivity implements AdapterView.OnIt
                intent.setComponent(new ComponentName(service.getComponentName().getPackageName(),
                                addPrinterActivityName));

                try {
                    startActivity(intent);
                } catch (ActivityNotFoundException e) {
                    Log.e(LOG_TAG, "Cannot start add printers activity", e);
                List<ResolveInfo> resolvedActivities = getPackageManager().queryIntentActivities(
                        intent, 0);
                if (!resolvedActivities.isEmpty()) {
                    // The activity is a component name, therefore it is one or none.
                    if (resolvedActivities.get(0).activityInfo.exported) {
                        return intent;
                    }
                }
            }

            return null;
        }

        @Override
@@ -494,7 +517,7 @@ public class AddPrinterActivity extends ListActivity implements AdapterView.OnIt
            title.setText(service.getResolveInfo().loadLabel(getPackageManager()));
            icon.setImageDrawable(service.getResolveInfo().loadIcon(getPackageManager()));

            if (TextUtils.isEmpty(service.getAddPrintersActivityName())) {
            if (getAddPrinterIntent(service) == null) {
                subtitle.setText(getString(R.string.cannot_add_printer));
            } else {
                subtitle.setText(getString(R.string.select_to_add_printers));