1507d11c9353666a75fee014565f900825a907691Andrew Scullpackage com.android.server.locksettings; 27b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 37b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport android.hardware.weaver.V1_0.IWeaver; 47b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport android.hardware.weaver.V1_0.WeaverConfig; 57b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport android.hardware.weaver.V1_0.WeaverReadResponse; 67b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport android.hardware.weaver.V1_0.WeaverStatus; 77b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport android.hidl.base.V1_0.DebugInfo; 87b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport android.os.IHwBinder; 97b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport android.os.IHwBinder.DeathRecipient; 107b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport android.os.RemoteException; 117b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport android.util.Pair; 127b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 137b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport android.util.Log; 147b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 157b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport java.util.ArrayList; 167b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xuimport java.util.Arrays; 177b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 187b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xupublic class MockWeaverService implements IWeaver { 197b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 207b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu private static final int MAX_SLOTS = 8; 217b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu private static final int KEY_LENGTH = 256 / 8; 227b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu private static final int VALUE_LENGTH = 256 / 8; 237b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 247b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu private Pair<ArrayList<Byte>, ArrayList<Byte>>[] slots = new Pair[MAX_SLOTS]; 257b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 267b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public void getConfig(getConfigCallback cb) throws RemoteException { 277b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu WeaverConfig config = new WeaverConfig(); 287b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu config.keySize = KEY_LENGTH; 297b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu config.valueSize = VALUE_LENGTH; 307b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu config.slots = MAX_SLOTS; 317b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu cb.onValues(WeaverStatus.OK, config); 327b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 337b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 347b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 357b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public int write(int slotId, ArrayList<Byte> key, ArrayList<Byte> value) 367b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throws RemoteException { 377b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu if (slotId < 0 || slotId >= MAX_SLOTS) { 387b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new RuntimeException("Invalid slot id"); 397b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 407b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu slots[slotId] = Pair.create((ArrayList<Byte>) key.clone(), (ArrayList<Byte>) value.clone()); 417b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu return WeaverStatus.OK; 427b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 437b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 447b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 457b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public void read(int slotId, ArrayList<Byte> key, readCallback cb) throws RemoteException { 467b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu if (slotId < 0 || slotId >= MAX_SLOTS) { 477b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new RuntimeException("Invalid slot id"); 487b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 497b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 507b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu WeaverReadResponse response = new WeaverReadResponse(); 517b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu if (key.equals(slots[slotId].first)) { 527b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu response.value.addAll(slots[slotId].second); 537b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu cb.onValues(WeaverStatus.OK, response); 547b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } else { 557b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu cb.onValues(WeaverStatus.FAILED, response); 567b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 577b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 587b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 597b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 607b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public IHwBinder asBinder() { 617b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new UnsupportedOperationException(); 627b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 637b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 647b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 657b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public ArrayList<String> interfaceChain() throws RemoteException { 667b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new UnsupportedOperationException(); 677b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 687b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 697b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 707b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public String interfaceDescriptor() throws RemoteException { 717b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new UnsupportedOperationException(); 727b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 737b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 747b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 757b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public void setHALInstrumentation() throws RemoteException { 767b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new UnsupportedOperationException(); 777b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 787b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 797b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 807b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public boolean linkToDeath(DeathRecipient recipient, long cookie) throws RemoteException { 817b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new UnsupportedOperationException(); 827b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 837b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 847b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 857b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public void ping() throws RemoteException { 867b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new UnsupportedOperationException(); 877b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 887b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 897b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 907b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public DebugInfo getDebugInfo() throws RemoteException { 917b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new UnsupportedOperationException(); 927b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 937b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 947b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 957b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public void notifySyspropsChanged() throws RemoteException { 967b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new UnsupportedOperationException(); 977b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 987b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 997b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 1007b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public boolean unlinkToDeath(DeathRecipient recipient) throws RemoteException { 1017b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new UnsupportedOperationException(); 1027b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 1037b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu 1047b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu @Override 1057b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu public ArrayList<byte[]> getHashChain() throws RemoteException { 1067b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu throw new UnsupportedOperationException(); 1077b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu } 1087b7424b0b7c5b6be09ed6fb0ec70272574dfe718Rubin Xu} 109