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

Commit 1dba1776 authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Mend up onDestroy->onCreate for N.

This does not implement correct onDestroy->onCreate behavior but mends
it for the common case.

We now handle all configurations changes, hence onDestroy->onCreate is
very rare. We also just abort quickly if we actually had a
onDestroy->onCreate instead of crashing.

This is a temporary fix.

Bug: 28588511
Change-Id: Ief56c8b866f2561b13253f66a7f79517fc2132cb
parent 4cb02fd0
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -73,7 +73,7 @@
        </activity>
        </activity>


        <activity android:name=".UninstallAppProgress"
        <activity android:name=".UninstallAppProgress"
                android:configChanges="orientation|keyboardHidden|screenSize"
                android:configChanges="mnc|mnc|touchscreen|navigation|screenLayout|screenSize|smallestScreenSize|orientation|locale|keyboard|keyboardHidden|fontScale|uiMode|layoutDirection|density"
                android:exported="false" />
                android:exported="false" />


        <activity android:name=".permission.ui.GrantPermissionsActivity"
        <activity android:name=".permission.ui.GrantPermissionsActivity"
+28 −1
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.pm.IPackageManager;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.content.pm.UserInfo;
import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Bundle;
@@ -92,6 +93,10 @@ public class UninstallAppProgress extends Activity implements OnClickListener {


    private Handler mHandler = new Handler() {
    private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
        public void handleMessage(Message msg) {
            if (isFinishing() || isDestroyed()) {
                return;
            }

            switch (msg.what) {
            switch (msg.what) {
                case UNINSTALL_IS_SLOW:
                case UNINSTALL_IS_SLOW:
                    initView();
                    initView();
@@ -237,8 +242,31 @@ public class UninstallAppProgress extends Activity implements OnClickListener {
    @Override
    @Override
    public void onCreate(Bundle icicle) {
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        super.onCreate(icicle);

        Intent intent = getIntent();
        Intent intent = getIntent();
        mAppInfo = intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
        mAppInfo = intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
        mCallback = intent.getIBinderExtra(PackageInstaller.EXTRA_CALLBACK);

        // This currently does not support going through a onDestroy->onCreate cycle. Hence if that
        // happened, just fail the operation for mysterious reasons.
        if (icicle != null) {
            mResultCode = PackageManager.DELETE_FAILED_INTERNAL_ERROR;

            if (mCallback != null) {
                final IPackageDeleteObserver2 observer = IPackageDeleteObserver2.Stub
                        .asInterface(mCallback);
                try {
                    observer.onPackageDeleted(mAppInfo.packageName, mResultCode, null);
                } catch (RemoteException ignored) {
                }
                finish();
            } else {
                setResultAndFinish(mResultCode);
            }

            return;
        }

        mAllUsers = intent.getBooleanExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, false);
        mAllUsers = intent.getBooleanExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, false);
        if (mAllUsers && !UserManager.get(this).isAdminUser()) {
        if (mAllUsers && !UserManager.get(this).isAdminUser()) {
            throw new SecurityException("Only admin user can request uninstall for all users");
            throw new SecurityException("Only admin user can request uninstall for all users");
@@ -254,7 +282,6 @@ public class UninstallAppProgress extends Activity implements OnClickListener {
                        + "request uninstall for user " + mUser);
                        + "request uninstall for user " + mUser);
            }
            }
        }
        }
        mCallback = intent.getIBinderExtra(PackageInstaller.EXTRA_CALLBACK);


        PackageDeleteObserver observer = new PackageDeleteObserver();
        PackageDeleteObserver observer = new PackageDeleteObserver();