/* * Copyright (C) 2013 uPhyca Inc. http://www.uphyca.com/ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.uphyca.kitkat.storage.internal.impl; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.TimeZone; import android.provider.DocumentsContract; import com.uphyca.kitkat.storage.internal.DocumentsColumnMapper; import com.uphyca.kitkat.storage.internal.MimeTypeResolver; import com.uphyca.kitkat.storage.skydrive.SkyDriveAlbum; import com.uphyca.kitkat.storage.skydrive.SkyDriveAudio; import com.uphyca.kitkat.storage.skydrive.SkyDriveFile; import com.uphyca.kitkat.storage.skydrive.SkyDriveFolder; import com.uphyca.kitkat.storage.skydrive.SkyDriveObject; import com.uphyca.kitkat.storage.skydrive.SkyDrivePhoto; import com.uphyca.kitkat.storage.skydrive.SkyDriveVideo; /** * LiveSDK for Androidを使った実装。 * * @see <a href="https://github.com/liveservices/LiveSDK-for-Android/">LiveSDK for Android</a> * @author masui@uphyca.com */ public class LiveSdkDocumentsColumnMapper implements DocumentsColumnMapper<SkyDriveObject> { private final MimeTypeResolver mMimeTypeResolver; private final DateFormat mDateFormat; { mDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZ"); mDateFormat.setTimeZone(TimeZone.getDefault()); } public LiveSdkDocumentsColumnMapper(MimeTypeResolver mimeTypeResolver) { mMimeTypeResolver = mimeTypeResolver; } @Override public String mapDocumentId(SkyDriveObject source) { return source.getId(); } @Override public String mapMimeType(SkyDriveObject source) { return thatObjectIsDirectory(source) ? DocumentsContract.Document.MIME_TYPE_DIR : mMimeTypeResolver.resolveMimeTypeFromName(source.getName()); } @Override public String mapDisplayName(SkyDriveObject source) { return source.getName(); } @Override public String mapSummary(SkyDriveObject source) { return source.getDescription(); } @Override public Long mapLastModified(SkyDriveObject source) { try { return mDateFormat.parse(source.getUpdatedTime()) .getTime(); } catch (ParseException ignore) { } return null; } @Override public Integer mapIcon(SkyDriveObject source) { return null; } @Override public Integer mapFlags(SkyDriveObject source) { int flags = 0; flags |= DocumentsContract.Document.FLAG_SUPPORTS_WRITE; if (thatObjectIsDirectory(source)) { flags |= DocumentsContract.Document.FLAG_DIR_SUPPORTS_CREATE; } else { flags |= DocumentsContract.Document.FLAG_SUPPORTS_WRITE; } flags |= DocumentsContract.Document.FLAG_SUPPORTS_DELETE; String mimeType = mapMimeType(source); if (mimeType.startsWith("image/")) { flags |= DocumentsContract.Document.FLAG_SUPPORTS_THUMBNAIL; } return flags; } @Override public Long mapSize(SkyDriveObject source) { final long[] size = new long[1]; source.accept(new SkyDriveObject.Visitor() { @Override public void visit(SkyDriveAlbum album) { } @Override public void visit(SkyDriveAudio audio) { size[0] = audio.getSize(); } @Override public void visit(SkyDrivePhoto photo) { size[0] = photo.getSize(); } @Override public void visit(SkyDriveFolder folder) { } @Override public void visit(SkyDriveFile file) { size[0] = file.getSize(); } @Override public void visit(SkyDriveVideo video) { size[0] = video.getSize(); } }); return size[0]; } private static boolean thatObjectIsDirectory(SkyDriveObject source) { final boolean[] dir = new boolean[1]; source.accept(new SkyDriveObject.Visitor() { @Override public void visit(SkyDriveAlbum album) { dir[0] = true; } @Override public void visit(SkyDriveAudio audio) { } @Override public void visit(SkyDrivePhoto photo) { } @Override public void visit(SkyDriveFolder folder) { dir[0] = true; } @Override public void visit(SkyDriveFile file) { } @Override public void visit(SkyDriveVideo video) { } }); return dir[0]; } }