10a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang/* 20a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * Copyright (C) 2011 The Android Open Source Project 30a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * 40a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * Licensed under the Apache License, Version 2.0 (the "License"); 50a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * you may not use this file except in compliance with the License. 60a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * You may obtain a copy of the License at 70a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * 80a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * http://www.apache.org/licenses/LICENSE-2.0 90a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * 100a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * Unless required by applicable law or agreed to in writing, software 110a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * distributed under the License is distributed on an "AS IS" BASIS, 120a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * See the License for the specific language governing permissions and 140a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * limitations under the License. 150a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * 160a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang */ 170a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang 180a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wangpackage com.android.providers.downloads; 190a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang 200a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wangimport android.content.Context; 210a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wangimport android.drm.DrmManagerClient; 225cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey 235cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkeyimport java.io.File; 240a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang 250a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wangpublic class DownloadDrmHelper { 260a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang 270a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang /** The MIME type of special DRM files */ 280a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang public static final String MIMETYPE_DRM_MESSAGE = "application/vnd.oma.drm.message"; 290a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang 300a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang /** The extensions of special DRM files */ 310a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang public static final String EXTENSION_DRM_MESSAGE = ".dm"; 320a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang 330a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang public static final String EXTENSION_INTERNAL_FWDL = ".fl"; 340a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang 350a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang /** 360a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * Checks if the Media Type needs to be DRM converted 370a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * 380a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * @param mimetype Media type of the content 390a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * @return True if convert is needed else false 400a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang */ 410a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang public static boolean isDrmConvertNeeded(String mimetype) { 420a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang return MIMETYPE_DRM_MESSAGE.equals(mimetype); 430a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang } 440a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang 450a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang /** 460a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * Modifies the file extension for a DRM Forward Lock file NOTE: This 470a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang * function shouldn't be called if the file shouldn't be DRM converted 480a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang */ 490a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang public static String modifyDrmFwLockFileExtension(String filename) { 500a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang if (filename != null) { 510a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang int extensionIndex; 520a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang extensionIndex = filename.lastIndexOf("."); 530a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang if (extensionIndex != -1) { 540a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang filename = filename.substring(0, extensionIndex); 550a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang } 560a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang filename = filename.concat(EXTENSION_INTERNAL_FWDL); 570a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang } 580a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang return filename; 590a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang } 600a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang 610a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang /** 625cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey * Return the original MIME type of the given file, using the DRM framework 635cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey * if the file is protected content. 640a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang */ 655cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey public static String getOriginalMimeType(Context context, File file, String currentMime) { 665cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey final DrmManagerClient client = new DrmManagerClient(context); 670a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang try { 685cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey final String rawFile = file.toString(); 695cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey if (client.canHandle(rawFile, null)) { 705cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey return client.getOriginalMimeType(rawFile); 715cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey } else { 725cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey return currentMime; 730a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang } 745cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey } finally { 755cff4ecb10e89e4fb39cd9e39b8753a31efbe3ccJeff Sharkey client.release(); 760a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang } 770a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang } 780a17c2a28738d6ecb274def0e8e54f556d89f5f3Gloria Wang} 79