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