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