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

Commit db48dbe4 authored by Automerger Merge Worker's avatar Automerger Merge Worker Committed by Android (Google) Code Review
Browse files

Merge "Merge "Remove blocking binder calls from system server" am: b7eb7b35...

Merge "Merge "Remove blocking binder calls from system server" am: b7eb7b35 am: 78d96ec2" into rvc-dev-plus-aosp
parents de70e4e3 6dc74262
Loading
Loading
Loading
Loading
+43 −5
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.pm.PackageManager;
import android.gsi.AvbPublicKey;
import android.gsi.AvbPublicKey;
import android.gsi.GsiProgress;
import android.gsi.GsiProgress;
import android.gsi.IGsiService;
import android.gsi.IGsiService;
import android.gsi.IGsiServiceCallback;
import android.gsi.IGsid;
import android.gsi.IGsid;
import android.os.Environment;
import android.os.Environment;
import android.os.IBinder;
import android.os.IBinder;
@@ -115,6 +116,20 @@ public class DynamicSystemService extends IDynamicSystemService.Stub implements
        }
        }
    }
    }


    class GsiServiceCallback extends IGsiServiceCallback.Stub {
        // 0 for success
        private int mResult = -1;

        public synchronized void onResult(int result) {
            mResult = result;
            notify();
        }

        public int getResult() {
            return mResult;
        }
    }

    @Override
    @Override
    public boolean startInstallation(String dsuSlot) throws RemoteException {
    public boolean startInstallation(String dsuSlot) throws RemoteException {
        IGsiService service = getGsiService();
        IGsiService service = getGsiService();
@@ -186,7 +201,9 @@ public class DynamicSystemService extends IDynamicSystemService.Stub implements


    @Override
    @Override
    public boolean isInstalled() throws RemoteException {
    public boolean isInstalled() throws RemoteException {
        return getGsiService().isGsiInstalled();
        boolean installed = SystemProperties.getBoolean("gsid.image_installed", false);
        Slog.i(TAG, "isInstalled(): " + installed);
        return installed;
    }
    }


    @Override
    @Override
@@ -196,16 +213,37 @@ public class DynamicSystemService extends IDynamicSystemService.Stub implements


    @Override
    @Override
    public boolean remove() throws RemoteException {
    public boolean remove() throws RemoteException {
        IGsiService gsiService = getGsiService();
        try {
        String install_dir = gsiService.getInstalledGsiImageDir();
            GsiServiceCallback callback = new GsiServiceCallback();
        return getGsiService().removeGsi();
            synchronized (callback) {
                getGsiService().removeGsiAsync(callback);
                callback.wait(GSID_ROUGH_TIMEOUT_MS);
            }
            return callback.getResult() == 0;
        } catch (InterruptedException e) {
            Slog.e(TAG, "remove() was interrupted");
            return false;
        }
    }
    }


    @Override
    @Override
    public boolean setEnable(boolean enable, boolean oneShot) throws RemoteException {
    public boolean setEnable(boolean enable, boolean oneShot) throws RemoteException {
        IGsiService gsiService = getGsiService();
        IGsiService gsiService = getGsiService();
        if (enable) {
        if (enable) {
            return gsiService.enableGsi(oneShot, mDsuSlot) == 0;
            try {
                if (mDsuSlot == null) {
                    mDsuSlot = gsiService.getActiveDsuSlot();
                }
                GsiServiceCallback callback = new GsiServiceCallback();
                synchronized (callback) {
                    gsiService.enableGsiAsync(oneShot, mDsuSlot, callback);
                    callback.wait(GSID_ROUGH_TIMEOUT_MS);
                }
                return callback.getResult() == 0;
            } catch (InterruptedException e) {
                Slog.e(TAG, "setEnable() was interrupted");
                return false;
            }
        } else {
        } else {
            return gsiService.disableGsi();
            return gsiService.disableGsi();
        }
        }