130b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin/* 230b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * Copyright (C) 2016 The Android Open Source Project 330b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * 430b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * Licensed under the Apache License, Version 2.0 (the "License"); 530b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * you may not use this file except in compliance with the License. 630b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * You may obtain a copy of the License at 730b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * 830b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * http://www.apache.org/licenses/LICENSE-2.0 930b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * 1030b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * Unless required by applicable law or agreed to in writing, software 1130b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * distributed under the License is distributed on an "AS IS" BASIS, 1230b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1330b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * See the License for the specific language governing permissions and 1430b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin * limitations under the License. 1530b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin */ 1630b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 1730b0dc1896abc67a970b61ebfd420275a31c1e18Ben Linpackage com.android.documentsui.testing; 1830b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 1930b0dc1896abc67a970b61ebfd420275a31c1e18Ben Linimport android.content.ClipData; 2030b0dc1896abc67a970b61ebfd420275a31c1e18Ben Linimport android.net.Uri; 21da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tanimport android.util.Pair; 2230b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 2330b0dc1896abc67a970b61ebfd420275a31c1e18Ben Linimport com.android.documentsui.base.DocumentInfo; 2430b0dc1896abc67a970b61ebfd420275a31c1e18Ben Linimport com.android.documentsui.base.DocumentStack; 2530b0dc1896abc67a970b61ebfd420275a31c1e18Ben Linimport com.android.documentsui.clipping.DocumentClipper; 2630b0dc1896abc67a970b61ebfd420275a31c1e18Ben Linimport com.android.documentsui.selection.Selection; 27da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tanimport com.android.documentsui.services.FileOperationService; 28da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tanimport com.android.documentsui.services.FileOperationService.OpType; 2930b0dc1896abc67a970b61ebfd420275a31c1e18Ben Linimport com.android.documentsui.services.FileOperations.Callback; 3030b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 312e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tanimport java.util.ArrayList; 32da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tanimport java.util.List; 3330b0dc1896abc67a970b61ebfd420275a31c1e18Ben Linimport java.util.function.Function; 3430b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 3530b0dc1896abc67a970b61ebfd420275a31c1e18Ben Linpublic class TestDocumentClipper implements DocumentClipper { 3630b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 37da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan public ClipData nextClip; 38da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan public ClipData primaryClip; 39da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan 402e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan public final TestEventHandler<List<Uri>> clipForCut = new TestEventHandler<>(); 412e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan 422e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan public final TestEventListener<Pair<DocumentStack, ClipData>> copyFromClip = 432e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan new TestEventListener<>(); 44da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan public final TestEventListener<Integer> opType = new TestEventListener<>(); 45ceef2de0a8aa62d86db5939ff7ad3c1a1739d288Garfield Tan 4630b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin @Override 4730b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin public boolean hasItemsToPaste() { 4830b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin return false; 4930b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin } 5030b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 5130b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin @Override 5230b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin public ClipData getClipDataForDocuments(Function<String, Uri> uriBuilder, Selection selection, 5330b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin int opType) { 54da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan return nextClip; 5530b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin } 5630b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 5730b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin @Override 58da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan public ClipData getClipDataForDocuments(List<Uri> uris, 592e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan @FileOperationService.OpType int opType) { 602e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan return nextClip; 612e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan } 622e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan 632e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan @Override 642e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan public ClipData getClipDataForDocuments(List<Uri> uris, 65da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan @FileOperationService.OpType int opType, DocumentInfo parent) { 66da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan return nextClip; 67da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan } 6830b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 69da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan @Override 70da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan public void clipDocumentsForCopy(Function<String, Uri> uriBuilder, Selection selection) { 7130b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin } 7230b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 7330b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin @Override 7430b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin public void clipDocumentsForCut(Function<String, Uri> uriBuilder, Selection selection, 7530b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin DocumentInfo parent) { 762e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan List<Uri> uris = new ArrayList<>(selection.size()); 772e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan for (String id : selection) { 782e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan uris.add(uriBuilder.apply(id)); 792e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan } 802e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan 812e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan clipForCut.accept(uris); 8230b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin } 8330b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 8430b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin @Override 8530b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin public void copyFromClipboard(DocumentInfo destination, DocumentStack docStack, 8630b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin Callback callback) { 872e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan copyFromClip.accept(Pair.create(new DocumentStack(docStack, destination), primaryClip)); 8830b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin } 8930b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 9030b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin @Override 9130b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin public void copyFromClipboard(DocumentStack docStack, Callback callback) { 922e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan copyFromClip.accept(Pair.create(docStack, primaryClip)); 9330b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin } 9430b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 9530b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin @Override 9630b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin public void copyFromClipData(DocumentInfo destination, DocumentStack docStack, 9730b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin ClipData clipData, Callback callback) { 982e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan copyFromClip.accept(Pair.create(new DocumentStack(docStack, destination), clipData)); 9930b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin } 10030b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin 10130b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin @Override 102da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan public void copyFromClipData(DocumentStack dstStack, ClipData clipData, 103da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan @OpType int opType, Callback callback) { 1042e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan copyFromClip.accept(Pair.create(dstStack, clipData)); 105da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan this.opType.accept(opType); 10685a479e941a733de22d4309bf7802e4cc6814786Garfield Tan } 10785a479e941a733de22d4309bf7802e4cc6814786Garfield Tan 10885a479e941a733de22d4309bf7802e4cc6814786Garfield Tan @Override 109da2c0f0b075ad9f770182e706c2ec158989568a7Garfield Tan public void copyFromClipData(DocumentStack docStack, ClipData clipData, Callback callback) { 1102e81db6f2030ec6c8dd758c3020ce5db8363bf25Garfield Tan copyFromClip.accept(Pair.create(docStack, clipData)); 111ceef2de0a8aa62d86db5939ff7ad3c1a1739d288Garfield Tan } 11230b0dc1896abc67a970b61ebfd420275a31c1e18Ben Lin} 113