10cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu/*
20cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu * Copyright (C) 2017 The Android Open Source Project
30cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu *
40cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu * Licensed under the Apache License, Version 2.0 (the "License");
50cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu * you may not use this file except in compliance with the License.
60cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu * You may obtain a copy of the License at
70cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu *
80cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu *      http://www.apache.org/licenses/LICENSE-2.0
90cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu *
100cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu * Unless required by applicable law or agreed to in writing, software
110cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu * distributed under the License is distributed on an "AS IS" BASIS,
120cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu * See the License for the specific language governing permissions and
140cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu * limitations under the License
150cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu */
160cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
170cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xupackage com.android.server;
180cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
190cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.content.pm.IPackageMoveObserver;
200cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.IBinder;
210cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.IProgressListener;
220cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.ParcelFileDescriptor;
230cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.RemoteException;
240cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.storage.DiskInfo;
250cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.storage.IObbActionListener;
260cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.storage.IStorageEventListener;
270cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.storage.IStorageManager;
280cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.storage.IStorageShutdownObserver;
290cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.storage.StorageVolume;
300cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.storage.VolumeInfo;
310cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.os.storage.VolumeRecord;
320cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.util.ArrayMap;
330cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport android.util.Pair;
340cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3506c39bc07ffe6002969af441538bb447031da6c9Rubin Xuimport com.android.internal.os.AppFuseMount;
3606c39bc07ffe6002969af441538bb447031da6c9Rubin Xu
370cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport junit.framework.AssertionFailedError;
380cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
390cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport java.util.ArrayList;
400cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xuimport java.util.Arrays;
410cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
420cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xupublic class MockStorageManager implements IStorageManager {
430cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
440cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    private ArrayMap<Integer, ArrayList<Pair<byte[], byte[]>>> mAuth = new ArrayMap<>();
450cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    private boolean mIgnoreBadUnlock;
460cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
470cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
480cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void addUserKeyAuth(int userId, int serialNumber, byte[] token, byte[] secret)
490cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
500cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        getUserAuth(userId).add(new Pair<>(token, secret));
510cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
520cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
530cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
540cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void fixateNewestUserKeyAuth(int userId) throws RemoteException {
550cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        ArrayList<Pair<byte[], byte[]>> auths = mAuth.get(userId);
560cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        Pair<byte[], byte[]> latest = auths.get(auths.size() - 1);
570cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        auths.clear();
580cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        auths.add(latest);
590cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
600cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
610cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    private ArrayList<Pair<byte[], byte[]>> getUserAuth(int userId) {
620cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        if (!mAuth.containsKey(userId)) {
630cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            ArrayList<Pair<byte[], byte[]>> auths = new ArrayList<Pair<byte[], byte[]>>();
640cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            auths.add(new Pair(null, null));
650cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            mAuth.put(userId,  auths);
660cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        }
670cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        return mAuth.get(userId);
680cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
690cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
700cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public byte[] getUserUnlockToken(int userId) {
710cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        ArrayList<Pair<byte[], byte[]>> auths = getUserAuth(userId);
720cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        if (auths.size() != 1) {
730cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throw new AssertionFailedError("More than one secret exists");
740cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        }
750cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        return auths.get(0).second;
760cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
770cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
780cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void unlockUser(int userId, byte[] secret, IProgressListener listener)
790cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
800cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        listener.onStarted(userId, null);
810cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        listener.onFinished(userId, null);
820cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        ArrayList<Pair<byte[], byte[]>> auths = getUserAuth(userId);
830cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        if (secret != null) {
840cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            if (auths.size() > 1) {
850cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu                throw new AssertionFailedError("More than one secret exists");
860cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            }
870cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            Pair<byte[], byte[]> auth = auths.get(0);
880cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            if ((!mIgnoreBadUnlock) && auth.second != null && !Arrays.equals(secret, auth.second)) {
890cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu                throw new AssertionFailedError("Invalid secret to unlock user");
900cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            }
910cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        } else {
920cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            if (auths != null && auths.size() > 0) {
930cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu                throw new AssertionFailedError("Cannot unlock encrypted user with empty token");
940cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            }
950cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        }
960cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
970cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
980cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void setIgnoreBadUnlock(boolean ignore) {
990cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        mIgnoreBadUnlock = ignore;
1000cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1010cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1020cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1030cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public IBinder asBinder() {
1040cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1050cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1060cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1070cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1080cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void registerListener(IStorageEventListener listener) throws RemoteException {
1090cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1100cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1110cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1120cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1130cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void unregisterListener(IStorageEventListener listener) throws RemoteException {
1140cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1150cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1160cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1170cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1180cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public boolean isUsbMassStorageConnected() throws RemoteException {
1190cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1200cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1210cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1220cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1230cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void setUsbMassStorageEnabled(boolean enable) throws RemoteException {
1240cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1250cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1260cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1270cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1280cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public boolean isUsbMassStorageEnabled() throws RemoteException {
1290cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1300cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1310cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1320cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1330cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int mountVolume(String mountPoint) throws RemoteException {
1340cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1350cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1360cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1370cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1380cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void unmountVolume(String mountPoint, boolean force, boolean removeEncryption)
1390cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
1400cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1410cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1420cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1430cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1440cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1450cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int formatVolume(String mountPoint) throws RemoteException {
1460cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1470cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1480cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1490cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1500cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int[] getStorageUsers(String path) throws RemoteException {
1510cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1520cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1530cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1540cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1550cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public String getVolumeState(String mountPoint) throws RemoteException {
1560cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1570cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1580cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1590cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1600cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int createSecureContainer(String id, int sizeMb, String fstype, String key, int ownerUid,
1610cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            boolean external) throws RemoteException {
1620cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1630cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1640cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1650cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1660cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int finalizeSecureContainer(String id) throws RemoteException {
1670cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1680cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1690cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1700cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1710cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int destroySecureContainer(String id, boolean force) throws RemoteException {
1720cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1730cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1740cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1750cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1760cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int mountSecureContainer(String id, String key, int ownerUid, boolean readOnly)
1770cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
1780cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1790cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1800cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1810cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1820cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int unmountSecureContainer(String id, boolean force) throws RemoteException {
1830cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1840cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1850cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1860cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1870cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public boolean isSecureContainerMounted(String id) throws RemoteException {
1880cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1890cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1900cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1910cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1920cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int renameSecureContainer(String oldId, String newId) throws RemoteException {
1930cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1940cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
1950cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
1960cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
1970cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public String getSecureContainerPath(String id) throws RemoteException {
1980cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
1990cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2000cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2010cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2020cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public String[] getSecureContainerList() throws RemoteException {
2030cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2040cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2050cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2060cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2070cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void shutdown(IStorageShutdownObserver observer) throws RemoteException {
2080cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2090cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2100cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2110cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2120cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void finishMediaUpdate() throws RemoteException {
2130cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2140cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2150cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2160cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2170cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void mountObb(String rawPath, String canonicalPath, String key, IObbActionListener token,
2180cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            int nonce) throws RemoteException {
2190cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2200cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2210cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2220cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2230cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void unmountObb(String rawPath, boolean force, IObbActionListener token, int nonce)
2240cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
2250cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2260cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2270cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2280cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2290cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public boolean isObbMounted(String rawPath) throws RemoteException {
2300cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2310cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2320cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2330cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2340cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public String getMountedObbPath(String rawPath) throws RemoteException {
2350cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2360cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2370cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2380cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2390cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public boolean isExternalStorageEmulated() throws RemoteException {
2400cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2410cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2420cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2430cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2440cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int decryptStorage(String password) throws RemoteException {
2450cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2460cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2470cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2480cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2490cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int encryptStorage(int type, String password) throws RemoteException {
2500cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2510cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2520cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2530cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2540cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int changeEncryptionPassword(int type, String password) throws RemoteException {
2550cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2560cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2570cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2580cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2590cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public StorageVolume[] getVolumeList(int uid, String packageName, int flags)
2600cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
2610cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2620cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2630cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2640cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2650cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public String getSecureContainerFilesystemPath(String cid) throws RemoteException {
2660cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2670cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2680cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2690cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2700cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int getEncryptionState() throws RemoteException {
2710cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2720cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2730cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2740cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2750cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int verifyEncryptionPassword(String password) throws RemoteException {
2760cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2770cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2780cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2790cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2800cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int fixPermissionsSecureContainer(String id, int gid, String filename)
2810cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
2820cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2830cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2840cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2850cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2860cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int mkdirs(String callingPkg, String path) throws RemoteException {
2870cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2880cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2890cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2900cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2910cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int getPasswordType() throws RemoteException {
2920cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2930cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2940cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
2950cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
2960cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public String getPassword() throws RemoteException {
2970cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
2980cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
2990cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3000cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3010cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void clearPassword() throws RemoteException {
3020cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3030cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3040cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3050cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3060cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3070cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void setField(String field, String contents) throws RemoteException {
3080cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3090cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3100cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3110cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3120cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3130cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public String getField(String field) throws RemoteException {
3140cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3150cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3160cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3170cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3180cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public int resizeSecureContainer(String id, int sizeMb, String key) throws RemoteException {
3190cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3200cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3210cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3220cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3230cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public long lastMaintenance() throws RemoteException {
3240cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3250cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3260cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3270cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3280cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void runMaintenance() throws RemoteException {
3290cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3300cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3310cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3320cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3330cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void waitForAsecScan() throws RemoteException {
3340cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3350cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3360cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3370cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3380cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public DiskInfo[] getDisks() throws RemoteException {
3390cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3400cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3410cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3420cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3430cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public VolumeInfo[] getVolumes(int flags) throws RemoteException {
3440cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3450cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3460cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3470cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3480cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public VolumeRecord[] getVolumeRecords(int flags) throws RemoteException {
3490cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3500cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3510cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3520cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3530cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void mount(String volId) throws RemoteException {
3540cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3550cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3560cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3570cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3580cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void unmount(String volId) throws RemoteException {
3590cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3600cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3610cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3620cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3630cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void format(String volId) throws RemoteException {
3640cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3650cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3660cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3670cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3680cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void partitionPublic(String diskId) throws RemoteException {
3690cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3700cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3710cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3720cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3730cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void partitionPrivate(String diskId) throws RemoteException {
3740cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3750cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3760cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3770cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3780cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void partitionMixed(String diskId, int ratio) throws RemoteException {
3790cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3800cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3810cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3820cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3830cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void setVolumeNickname(String fsUuid, String nickname) throws RemoteException {
3840cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3850cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3860cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3870cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3880cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void setVolumeUserFlags(String fsUuid, int flags, int mask) throws RemoteException {
3890cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3900cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3910cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3920cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3930cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void forgetVolume(String fsUuid) throws RemoteException {
3940cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
3950cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
3960cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
3970cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
3980cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void forgetAllVolumes() throws RemoteException {
3990cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4000cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4010cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4020cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4030cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public String getPrimaryStorageUuid() throws RemoteException {
4040cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4050cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4060cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4070cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4080cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void setPrimaryStorageUuid(String volumeUuid, IPackageMoveObserver callback)
4090cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
4100cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4110cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4120cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4130cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4140cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public long benchmark(String volId) throws RemoteException {
4150cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4160cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4170cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4180cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4190cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void setDebugFlags(int flags, int mask) throws RemoteException {
4200cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4210cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4220cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4230cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4240cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void createUserKey(int userId, int serialNumber, boolean ephemeral)
4250cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
4260cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4270cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4280cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4290cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4300cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void destroyUserKey(int userId) throws RemoteException {
4310cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4320cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4330cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4340cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4350cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void unlockUserKey(int userId, int serialNumber, byte[] token, byte[] secret)
4360cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
4370cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4380cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4390cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4400cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4410cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void lockUserKey(int userId) throws RemoteException {
4420cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4430cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4440cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4450cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4460cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public boolean isUserKeyUnlocked(int userId) throws RemoteException {
4470cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4480cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4490cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4500cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4510cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void prepareUserStorage(String volumeUuid, int userId, int serialNumber, int flags)
4520cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
4530cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4540cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4550cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4560cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4570cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public void destroyUserStorage(String volumeUuid, int userId, int flags)
4580cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu            throws RemoteException {
4590cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4600cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4610cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4620cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
4630cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    public boolean isConvertibleToFBE() throws RemoteException {
4640cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4650cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4660cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4670cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
46806c39bc07ffe6002969af441538bb447031da6c9Rubin Xu    public void fstrim(int flags) throws RemoteException {
4690cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4700cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4710cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
4720cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    @Override
47306c39bc07ffe6002969af441538bb447031da6c9Rubin Xu    public AppFuseMount mountProxyFileDescriptorBridge() throws RemoteException {
47406c39bc07ffe6002969af441538bb447031da6c9Rubin Xu        throw new UnsupportedOperationException();
47506c39bc07ffe6002969af441538bb447031da6c9Rubin Xu    }
47606c39bc07ffe6002969af441538bb447031da6c9Rubin Xu
47706c39bc07ffe6002969af441538bb447031da6c9Rubin Xu    @Override
47806c39bc07ffe6002969af441538bb447031da6c9Rubin Xu    public ParcelFileDescriptor openProxyFileDescriptor(int mountPointId, int fileId, int mode)
47906c39bc07ffe6002969af441538bb447031da6c9Rubin Xu            throws RemoteException {
48006c39bc07ffe6002969af441538bb447031da6c9Rubin Xu        throw new UnsupportedOperationException();
48106c39bc07ffe6002969af441538bb447031da6c9Rubin Xu    }
48206c39bc07ffe6002969af441538bb447031da6c9Rubin Xu
48306c39bc07ffe6002969af441538bb447031da6c9Rubin Xu    @Override
48406c39bc07ffe6002969af441538bb447031da6c9Rubin Xu    public long getCacheQuotaBytes(String volumeUuid, int uid) throws RemoteException {
48506c39bc07ffe6002969af441538bb447031da6c9Rubin Xu        throw new UnsupportedOperationException();
48606c39bc07ffe6002969af441538bb447031da6c9Rubin Xu    }
48706c39bc07ffe6002969af441538bb447031da6c9Rubin Xu
48806c39bc07ffe6002969af441538bb447031da6c9Rubin Xu    @Override
48906c39bc07ffe6002969af441538bb447031da6c9Rubin Xu    public long getCacheSizeBytes(String volumeUuid, int uid) throws RemoteException {
4900cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu        throw new UnsupportedOperationException();
4910cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu    }
4920cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu
493500ce9ea58a6c3465703257eab03f9bad76b1e0aJeff Sharkey    @Override
494500ce9ea58a6c3465703257eab03f9bad76b1e0aJeff Sharkey    public long getAllocatableBytes(String path, int flags) {
495500ce9ea58a6c3465703257eab03f9bad76b1e0aJeff Sharkey        throw new UnsupportedOperationException();
496500ce9ea58a6c3465703257eab03f9bad76b1e0aJeff Sharkey    }
497500ce9ea58a6c3465703257eab03f9bad76b1e0aJeff Sharkey
498500ce9ea58a6c3465703257eab03f9bad76b1e0aJeff Sharkey    @Override
499500ce9ea58a6c3465703257eab03f9bad76b1e0aJeff Sharkey    public void allocateBytes(String path, long bytes, int flags) {
500500ce9ea58a6c3465703257eab03f9bad76b1e0aJeff Sharkey        throw new UnsupportedOperationException();
501500ce9ea58a6c3465703257eab03f9bad76b1e0aJeff Sharkey    }
502500ce9ea58a6c3465703257eab03f9bad76b1e0aJeff Sharkey
503ee67b61bb08ab09be413f181f948f6359f4c256dRubin Xu    @Override
504ee67b61bb08ab09be413f181f948f6359f4c256dRubin Xu    public void secdiscard(String path) throws RemoteException {
505ee67b61bb08ab09be413f181f948f6359f4c256dRubin Xu        throw new UnsupportedOperationException();
506ee67b61bb08ab09be413f181f948f6359f4c256dRubin Xu    }
507ee67b61bb08ab09be413f181f948f6359f4c256dRubin Xu
5080cbc19e4a66f7db51596b57ca91afc6f5b27f3b4Rubin Xu}
509