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

Commit 12690d52 authored by Jin Qian's avatar Jin Qian
Browse files

Add storaged callbacks in StorageManagerService

Notify storaged about user login so that storaged can read proto
files from CE when they become available.

Test: adb shell storaged -p
Bug: 63740245
Change-Id: Id9bd7023e6cfcfe1e5adeab1f0603e04ef586e93
parent d097e2aa
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -570,6 +570,7 @@ LOCAL_SRC_FILES += \
	../../system/update_engine/binder_bindings/android/os/IUpdateEngineCallback.aidl \
	../../system/update_engine/binder_bindings/android/os/IUpdateEngineCallback.aidl \


LOCAL_SRC_FILES += \
LOCAL_SRC_FILES += \
	../../system/core/storaged/binder/android/os/IStoraged.aidl \
	../../system/netd/server/binder/android/net/INetd.aidl \
	../../system/netd/server/binder/android/net/INetd.aidl \
	../../system/vold/binder/android/os/IVold.aidl \
	../../system/vold/binder/android/os/IVold.aidl \
	../../system/vold/binder/android/os/IVoldListener.aidl \
	../../system/vold/binder/android/os/IVoldListener.aidl \
@@ -608,6 +609,7 @@ LOCAL_AIDL_INCLUDES += \
	frameworks/av/drm/libmediadrm/aidl \
	frameworks/av/drm/libmediadrm/aidl \
	frameworks/av/media/libaudioclient/aidl \
	frameworks/av/media/libaudioclient/aidl \
	frameworks/native/aidl/gui \
	frameworks/native/aidl/gui \
	system/core/storaged/binder \
	system/netd/server/binder \
	system/netd/server/binder \
	system/vold/binder \
	system/vold/binder \
	system/bt/binder
	system/bt/binder
+2 −0
Original line number Original line Diff line number Diff line
@@ -6,6 +6,7 @@ LOCAL_MODULE := services.core


LOCAL_AIDL_INCLUDES := \
LOCAL_AIDL_INCLUDES := \
    frameworks/native/aidl/binder \
    frameworks/native/aidl/binder \
    system/core/storaged/binder \
    system/netd/server/binder \
    system/netd/server/binder \
    system/vold/binder
    system/vold/binder


@@ -13,6 +14,7 @@ LOCAL_SRC_FILES += \
    $(call all-java-files-under,java) \
    $(call all-java-files-under,java) \
    java/com/android/server/EventLogTags.logtags \
    java/com/android/server/EventLogTags.logtags \
    java/com/android/server/am/EventLogTags.logtags \
    java/com/android/server/am/EventLogTags.logtags \
    ../../../../system/core/storaged/binder/android/os/IStoraged.aidl \
    ../../../../system/netd/server/binder/android/net/INetd.aidl \
    ../../../../system/netd/server/binder/android/net/INetd.aidl \
    ../../../../system/netd/server/binder/android/net/metrics/INetdEventListener.aidl \
    ../../../../system/netd/server/binder/android/net/metrics/INetdEventListener.aidl \
    ../../../../system/vold/binder/android/os/IVold.aidl \
    ../../../../system/vold/binder/android/os/IVold.aidl \
+37 −6
Original line number Original line Diff line number Diff line
@@ -56,6 +56,7 @@ import android.os.FileUtils;
import android.os.Handler;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.IBinder;
import android.os.IStoraged;
import android.os.IVold;
import android.os.IVold;
import android.os.IVoldListener;
import android.os.IVoldListener;
import android.os.IVoldTaskListener;
import android.os.IVoldTaskListener;
@@ -395,6 +396,7 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon
    private final Context mContext;
    private final Context mContext;


    private volatile IVold mVold;
    private volatile IVold mVold;
    private volatile IStoraged mStoraged;


    private volatile boolean mSystemReady = false;
    private volatile boolean mSystemReady = false;
    private volatile boolean mBootCompleted = false;
    private volatile boolean mBootCompleted = false;
@@ -809,6 +811,7 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon
                }
                }
                for (int userId : systemUnlockedUsers) {
                for (int userId : systemUnlockedUsers) {
                    mVold.onUserStarted(userId);
                    mVold.onUserStarted(userId);
                    mStoraged.onUserStarted(userId);
                }
                }
            } catch (Exception e) {
            } catch (Exception e) {
                Slog.wtf(TAG, e);
                Slog.wtf(TAG, e);
@@ -824,6 +827,7 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon
        // bind mount against.
        // bind mount against.
        try {
        try {
            mVold.onUserStarted(userId);
            mVold.onUserStarted(userId);
            mStoraged.onUserStarted(userId);
        } catch (Exception e) {
        } catch (Exception e) {
            Slog.wtf(TAG, e);
            Slog.wtf(TAG, e);
        }
        }
@@ -850,6 +854,7 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon


        try {
        try {
            mVold.onUserStopped(userId);
            mVold.onUserStopped(userId);
            mStoraged.onUserStopped(userId);
        } catch (Exception e) {
        } catch (Exception e) {
            Slog.wtf(TAG, e);
            Slog.wtf(TAG, e);
        }
        }
@@ -1335,13 +1340,36 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon
    }
    }


    private void connect() {
    private void connect() {
        IBinder binder = ServiceManager.getService("vold");
        IBinder binder = ServiceManager.getService("storaged");
        if (binder != null) {
            try {
                binder.linkToDeath(new DeathRecipient() {
                    @Override
                    public void binderDied() {
                        Slog.w(TAG, "storaged died; reconnecting");
                        mStoraged = null;
                        connect();
                    }
                }, 0);
            } catch (RemoteException e) {
                binder = null;
            }
        }

        if (binder != null) {
            mStoraged = IStoraged.Stub.asInterface(binder);
        } else {
            Slog.w(TAG, "storaged not found; trying again");
        }

        binder = ServiceManager.getService("vold");
        if (binder != null) {
        if (binder != null) {
            try {
            try {
                binder.linkToDeath(new DeathRecipient() {
                binder.linkToDeath(new DeathRecipient() {
                    @Override
                    @Override
                    public void binderDied() {
                    public void binderDied() {
                        Slog.w(TAG, "vold died; reconnecting");
                        Slog.w(TAG, "vold died; reconnecting");
                        mVold = null;
                        connect();
                        connect();
                    }
                    }
                }, 0);
                }, 0);
@@ -1354,18 +1382,21 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon
            mVold = IVold.Stub.asInterface(binder);
            mVold = IVold.Stub.asInterface(binder);
            try {
            try {
                mVold.setListener(mListener);
                mVold.setListener(mListener);
                onDaemonConnected();
                return;
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                mVold = null;
                Slog.w(TAG, "vold listener rejected; trying again", e);
                Slog.w(TAG, "vold listener rejected; trying again", e);
            }
            }
        } else {
        } else {
            Slog.w(TAG, "vold not found; trying again");
            Slog.w(TAG, "vold not found; trying again");
        }
        }


        if (mStoraged == null || mVold == null) {
            BackgroundThread.getHandler().postDelayed(() -> {
            BackgroundThread.getHandler().postDelayed(() -> {
                connect();
                connect();
            }, DateUtils.SECOND_IN_MILLIS);
            }, DateUtils.SECOND_IN_MILLIS);
        } else {
            onDaemonConnected();
        }
    }
    }


    private void systemReady() {
    private void systemReady() {