16ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov/*
26ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * Copyright (C) 2015 The Android Open Source Project
36ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov *
46ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * Licensed under the Apache License, Version 2.0 (the "License");
56ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * you may not use this file except in compliance with the License.
66ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * You may obtain a copy of the License at
76ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov *
86ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov *      http://www.apache.org/licenses/LICENSE-2.0
96ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov *
106ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * Unless required by applicable law or agreed to in writing, software
116ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * distributed under the License is distributed on an "AS IS" BASIS,
126ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * See the License for the specific language governing permissions and
146ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * limitations under the License.
156ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov */
166ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov
176ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganovpackage android.os.storage;
186ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov
196ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov/**
206ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * Mount service local interface.
216ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov *
226ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov * @hide Only for use within the system server.
236ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov */
242250d56a0b47b93016018340c8f4040325aa5611Sudheer Shankapublic abstract class StorageManagerInternal {
256ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov
266ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov    /**
276ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * Policy that influences how external storage is mounted and reported.
286ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     */
296ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov    public interface ExternalStorageMountPolicy {
306ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov        /**
316ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * Gets the external storage mount mode for the given uid.
326ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         *
336ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * @param uid The UID for which to determine mount mode.
346ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * @param packageName The package in the UID for making the call.
356ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * @return The mount mode.
366ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         *
376ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * @see com.android.internal.os.Zygote#MOUNT_EXTERNAL_NONE
386ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * @see com.android.internal.os.Zygote#MOUNT_EXTERNAL_DEFAULT
396ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * @see com.android.internal.os.Zygote#MOUNT_EXTERNAL_READ
406ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * @see com.android.internal.os.Zygote#MOUNT_EXTERNAL_WRITE
416ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         */
426ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov        public int getMountMode(int uid, String packageName);
436ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov
446ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov        /**
456ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * Gets whether external storage should be reported to the given UID.
466ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         *
476ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * @param uid The UID for which to determine whether it has external storage.
486ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * @param packageName The package in the UID for making the call.
496ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * @return Weather to report external storage.
506ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         * @return True to report the state of external storage, false to
516ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         *     report it as unmounted.
526ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov         */
536ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov        public boolean hasExternalStorage(int uid, String packageName);
546ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov    }
556ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov
566ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov    /**
576ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * Adds a policy for determining how external storage is mounted and reported.
586ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * The mount mode is the most conservative result from querying all registered
596ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * policies. Similarly, the reported state is the most conservative result from
606ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * querying all registered policies.
616ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     *
626ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * @param policy The policy to add.
636ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     */
646ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov    public abstract void addExternalStoragePolicy(ExternalStorageMountPolicy policy);
656ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov
666ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov    /**
676ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * Notify the mount service that the mount policy for a UID changed.
686ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * @param uid The UID for which policy changed.
696ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * @param packageName The package in the UID for making the call.
706ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     */
716ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov    public abstract void onExternalStoragePolicyChanged(int uid, String packageName);
726ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov
736ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov    /**
746ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * Gets the mount mode to use for a given UID as determined by consultin all
756ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * policies.
766ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     *
776ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * @param uid The UID for which to get mount mode.
786ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * @param packageName The package in the UID for making the call.
796ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     * @return The mount mode.
806ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov     */
816ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov    public abstract int getExternalStorageMountMode(int uid, String packageName);
826ee871e59812fea4525c50231f677c4bd10c74b8Svet Ganov}
83