1c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski/* 2c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * Copyright (C) 2016 The Android Open Source Project 3c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * 4c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * Licensed under the Apache License, Version 2.0 (the "License"); 5c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * you may not use this file except in compliance with the License. 6c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * You may obtain a copy of the License at 7c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * 8c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * http://www.apache.org/licenses/LICENSE-2.0 9c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * 10c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * Unless required by applicable law or agreed to in writing, software 11c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * distributed under the License is distributed on an "AS IS" BASIS, 12c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * See the License for the specific language governing permissions and 14c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski * limitations under the License. 15c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski */ 16c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski 17c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewskipackage com.android.documentsui.archives; 18c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski 19c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewskiimport android.net.Uri; 20c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski 21c6e98ffffc3091741f158e2050ba0a3f76f6f087Tomasz Mikolajewskipublic class ArchiveId { 22c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski private final static char DELIMITER = '#'; 23c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski 24c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski public final Uri mArchiveUri; 25d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski public final int mAccessMode; 26c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski public final String mPath; 27c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski 28d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski public ArchiveId(Uri archiveUri, int accessMode, String path) { 29d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski assert(archiveUri.toString().indexOf(DELIMITER) == -1); 30d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski assert(!path.isEmpty()); 31d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski 32c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski mArchiveUri = archiveUri; 33d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski mAccessMode = accessMode; 34c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski mPath = path; 35c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski } 36c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski 37c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski static public ArchiveId fromDocumentId(String documentId) { 38c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski final int delimiterPosition = documentId.indexOf(DELIMITER); 39c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski assert(delimiterPosition != -1); 40d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski 41d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski final int secondDelimiterPosition = documentId.indexOf(DELIMITER, delimiterPosition + 1); 42d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski assert(secondDelimiterPosition != -1); 43d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski 44d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski final String archiveUriPart = documentId.substring(0, delimiterPosition); 45d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski final String accessModePart = documentId.substring(delimiterPosition + 1, 46d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski secondDelimiterPosition); 47d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski 48d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski final String pathPart = documentId.substring(secondDelimiterPosition + 1); 49d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski 50d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski return new ArchiveId(Uri.parse(archiveUriPart), Integer.parseInt(accessModePart), 51d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski pathPart); 52c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski } 53c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski 54c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski public String toDocumentId() { 55d683f9756b0c56d28693c4d0269217e8fcebf76aTomasz Mikolajewski return mArchiveUri.toString() + DELIMITER + mAccessMode + DELIMITER + mPath; 56c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski } 57c88c588413ec78ad68afa75fa25549b5ca6a95c4Tomasz Mikolajewski}; 58