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

Commit 82e74ce4 authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

Improve untrusted sources UX for app side-loading

When an app is side-loaded we request the user to
enable installs from untrusted sources by sending
them to setting. After the user enables untrusted
sources they have to start the install again
instead of continuing from where they were interrupted
by the settings UI.

With this change the settings activity is started
for a result by the package installer, so if the
settings app wants to support non-interruptive side-
loading flow it can check whether the calling package
is the instaler and if true finish itself returning
RESULT_OK.

bug:26510156

Change-Id: I32d63b7535a84fa2b5b8837cff7d09f6de4a3475
parent bae2b676
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -68,6 +68,8 @@ import java.util.List;
public class PackageInstallerActivity extends Activity implements OnCancelListener, OnClickListener {
    private static final String TAG = "PackageInstaller";

    private static final int REQUEST_ENABLE_UNKNOWN_SOURCES = 1;

    private int mSessionId = -1;
    private Uri mPackageURI;
    private Uri mOriginatingURI;
@@ -245,7 +247,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
                    .setPositiveButton(R.string.settings, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            Log.i(TAG, "Launching settings");
                            launchSettingsAppAndFinish();
                            launchSecuritySettings();
                        }
                    })
                    .setOnCancelListener(this)
@@ -350,13 +352,22 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
       return null;
   }

    private void launchSettingsAppAndFinish() {
        // Create an intent to launch SettingsTwo activity
    private void launchSecuritySettings() {
        Intent launchSettingsIntent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
        launchSettingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(launchSettingsIntent);
        startActivityForResult(launchSettingsIntent, REQUEST_ENABLE_UNKNOWN_SOURCES);
    }

    @Override
    public void onActivityResult(int request, int result, Intent data) {
        // If the settings app approved the install we are good to go regardless
        // whether the untrusted sources setting is on. This allows partners to
        // implement a "allow untrusted source once" feature.
        if (request == REQUEST_ENABLE_UNKNOWN_SOURCES && result == RESULT_OK) {
            initiateInstall();
        } else {
            finish();
        }
    }

    private boolean isInstallRequestFromUnknownSource(Intent intent) {
        String callerPackage = getCallingPackage();