1526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen/* 2526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Copyright (C) 2012 The Android Open Source Project 3526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 4526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Licensed under the Apache License, Version 2.0 (the "License"); 5526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * you may not use this file except in compliance with the License. 6526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * You may obtain a copy of the License at 7526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 8526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * http://www.apache.org/licenses/LICENSE-2.0 9526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 10526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Unless required by applicable law or agreed to in writing, software 11526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * distributed under the License is distributed on an "AS IS" BASIS, 12526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * See the License for the specific language governing permissions and 14526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * limitations under the License. 15526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 16526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 17526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 18526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenpackage com.google.android.mms.util; 19526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 20526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenimport android.content.Context; 21526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenimport android.drm.DrmManagerClient; 22526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenimport android.util.Log; 23526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 24526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wenpublic class DownloadDrmHelper { 25526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen private static final String TAG = "DownloadDrmHelper"; 26526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 27526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** The MIME type of special DRM files */ 28526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String MIMETYPE_DRM_MESSAGE = "application/vnd.oma.drm.message"; 29526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 30526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** The extensions of special DRM files */ 31526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String EXTENSION_DRM_MESSAGE = ".dm"; 32526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 33526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static final String EXTENSION_INTERNAL_FWDL = ".fl"; 34526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 35526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 36526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Checks if the Media Type is a DRM Media Type 37526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 38526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param drmManagerClient A DrmManagerClient 39526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param mimetype Media Type to check 40526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return True if the Media Type is DRM else false 41526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 42526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static boolean isDrmMimeType(Context context, String mimetype) { 43526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen boolean result = false; 44526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (context != null) { 45526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen try { 46526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen DrmManagerClient drmClient = new DrmManagerClient(context); 47526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (drmClient != null && mimetype != null && mimetype.length() > 0) { 48526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen result = drmClient.canHandle("", mimetype); 49526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 50526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } catch (IllegalArgumentException e) { 51526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen Log.w(TAG, 52526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen "DrmManagerClient instance could not be created, context is Illegal."); 53526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } catch (IllegalStateException e) { 54526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen Log.w(TAG, "DrmManagerClient didn't initialize properly."); 55526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 56526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 57526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return result; 58526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 59526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 60526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 61526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Checks if the Media Type needs to be DRM converted 62526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 63526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param mimetype Media type of the content 64526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return True if convert is needed else false 65526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 66526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static boolean isDrmConvertNeeded(String mimetype) { 67526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return MIMETYPE_DRM_MESSAGE.equals(mimetype); 68526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 69526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 70526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 71526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Modifies the file extension for a DRM Forward Lock file NOTE: This 72526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * function shouldn't be called if the file shouldn't be DRM converted 73526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 74526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static String modifyDrmFwLockFileExtension(String filename) { 75526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (filename != null) { 76526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen int extensionIndex; 77526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen extensionIndex = filename.lastIndexOf("."); 78526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (extensionIndex != -1) { 79526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen filename = filename.substring(0, extensionIndex); 80526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 81526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen filename = filename.concat(EXTENSION_INTERNAL_FWDL); 82526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 83526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return filename; 84526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 85526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen 86526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen /** 87526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * Gets the original mime type of DRM protected content. 88526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * 89526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param context The context 90526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param path Path to the file 91526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @param containingMime The current mime type of of the file i.e. the 92526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * containing mime type 93526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * @return The original mime type of the file if DRM protected else the 94526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen * currentMime 95526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen */ 96526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen public static String getOriginalMimeType(Context context, String path, String containingMime) { 97526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen String result = containingMime; 98526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen DrmManagerClient drmClient = new DrmManagerClient(context); 99526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen try { 100526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen if (drmClient.canHandle(path, null)) { 101526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen result = drmClient.getOriginalMimeType(path); 102526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 103526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } catch (IllegalArgumentException ex) { 104526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen Log.w(TAG, 105526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen "Can't get original mime type since path is null or empty string."); 106526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } catch (IllegalStateException ex) { 107526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen Log.w(TAG, "DrmManagerClient didn't initialize properly."); 108526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 109526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen return result; 110526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen } 111526ecd1799a2fc467cfce114eae3578b42ccb786Ye Wen} 112