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

Commit 493110e0 authored by Risan's avatar Risan Committed by android-build-merger
Browse files

Merge "ResetListener in StorageManagerService"

am: 6b3a5194

Change-Id: Ibb3e89017328e2414d11078915913781d7aba226
parents cdcf3404 6b3a5194
Loading
Loading
Loading
Loading
+22 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package android.os.storage;
package android.os.storage;


import android.os.IVold;

/**
/**
 * Mount service local interface.
 * Mount service local interface.
 *
 *
@@ -79,4 +81,24 @@ public abstract class StorageManagerInternal {
     * @return The mount mode.
     * @return The mount mode.
     */
     */
    public abstract int getExternalStorageMountMode(int uid, String packageName);
    public abstract int getExternalStorageMountMode(int uid, String packageName);

    /**
     * A listener for reset events in the StorageManagerService.
     */
    public interface ResetListener {
        /**
         * A method that should be triggered internally by StorageManagerInternal
         * when StorageManagerService reset happens.
         *
         * @param vold The binder object to vold.
         */
        void onReset(IVold vold);
    }

    /**
     * Add a listener to listen to reset event in StorageManagerService.
     *
     * @param listener The listener that will be notified on reset events.
     */
    public abstract void addResetListener(ResetListener listener);
}
}
+20 −0
Original line number Original line Diff line number Diff line
@@ -876,6 +876,7 @@ class StorageManagerService extends IStorageManager.Stub
                    mStoraged.onUserStarted(userId);
                    mStoraged.onUserStarted(userId);
                }
                }
                mVold.onSecureKeyguardStateChanged(mSecureKeyguardShowing);
                mVold.onSecureKeyguardStateChanged(mSecureKeyguardShowing);
                mStorageManagerInternal.onReset(mVold);
            } catch (Exception e) {
            } catch (Exception e) {
                Slog.wtf(TAG, e);
                Slog.wtf(TAG, e);
            }
            }
@@ -3629,6 +3630,10 @@ class StorageManagerService extends IStorageManager.Stub
        private final CopyOnWriteArrayList<ExternalStorageMountPolicy> mPolicies =
        private final CopyOnWriteArrayList<ExternalStorageMountPolicy> mPolicies =
                new CopyOnWriteArrayList<>();
                new CopyOnWriteArrayList<>();


        @GuardedBy("mResetListeners")
        private final List<StorageManagerInternal.ResetListener> mResetListeners =
                new ArrayList<>();

        @Override
        @Override
        public void addExternalStoragePolicy(ExternalStorageMountPolicy policy) {
        public void addExternalStoragePolicy(ExternalStorageMountPolicy policy) {
            // No locking - CopyOnWriteArrayList
            // No locking - CopyOnWriteArrayList
@@ -3658,6 +3663,21 @@ class StorageManagerService extends IStorageManager.Stub
            return mountMode;
            return mountMode;
        }
        }


        @Override
        public void addResetListener(StorageManagerInternal.ResetListener listener) {
            synchronized (mResetListeners) {
                mResetListeners.add(listener);
            }
        }

        public void onReset(IVold vold) {
            synchronized (mResetListeners) {
                for (StorageManagerInternal.ResetListener listener : mResetListeners) {
                    listener.onReset(vold);
                }
            }
        }

        public boolean hasExternalStorage(int uid, String packageName) {
        public boolean hasExternalStorage(int uid, String packageName) {
            // No need to check for system uid. This avoids a deadlock between
            // No need to check for system uid. This avoids a deadlock between
            // PackageManagerService and AppOpsService.
            // PackageManagerService and AppOpsService.