1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2012 The Android Open Source Project 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.mmslib.util; 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.Context; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.drm.DrmManagerClient; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.util.Log; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class DownloadDrmHelper { 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final String TAG = "DownloadDrmHelper"; 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** The MIME type of special DRM files */ 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String MIMETYPE_DRM_MESSAGE = "application/vnd.oma.drm.message"; 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** The extensions of special DRM files */ 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String EXTENSION_DRM_MESSAGE = ".dm"; 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String EXTENSION_INTERNAL_FWDL = ".fl"; 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Checks if the Media Type is a DRM Media Type 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param drmManagerClient A DrmManagerClient 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param mimetype Media Type to check 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @return True if the Media Type is DRM else false 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static boolean isDrmMimeType(Context context, String mimetype) { 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd boolean result = false; 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (context != null) { 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd DrmManagerClient drmClient = new DrmManagerClient(context); 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (drmClient != null && mimetype != null && mimetype.length() > 0) { 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd result = drmClient.canHandle("", mimetype); 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (IllegalArgumentException e) { 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Log.w(TAG, 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "DrmManagerClient instance could not be created, context is Illegal."); 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (IllegalStateException e) { 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Log.w(TAG, "DrmManagerClient didn't initialize properly."); 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return result; 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Checks if the Media Type needs to be DRM converted 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param mimetype Media type of the content 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @return True if convert is needed else false 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static boolean isDrmConvertNeeded(String mimetype) { 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return MIMETYPE_DRM_MESSAGE.equals(mimetype); 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Modifies the file extension for a DRM Forward Lock file NOTE: This 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * function shouldn't be called if the file shouldn't be DRM converted 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static String modifyDrmFwLockFileExtension(String filename) { 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (filename != null) { 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd int extensionIndex; 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd extensionIndex = filename.lastIndexOf("."); 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (extensionIndex != -1) { 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd filename = filename.substring(0, extensionIndex); 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd filename = filename.concat(EXTENSION_INTERNAL_FWDL); 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return filename; 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Gets the original mime type of DRM protected content. 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param context The context 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param path Path to the file 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param containingMime The current mime type of of the file i.e. the 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * containing mime type 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @return The original mime type of the file if DRM protected else the 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * currentMime 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static String getOriginalMimeType(Context context, String path, String containingMime) { 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd String result = containingMime; 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd DrmManagerClient drmClient = new DrmManagerClient(context); 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (drmClient.canHandle(path, null)) { 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd result = drmClient.getOriginalMimeType(path); 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (IllegalArgumentException ex) { 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Log.w(TAG, 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "Can't get original mime type since path is null or empty string."); 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (IllegalStateException ex) { 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Log.w(TAG, "DrmManagerClient didn't initialize properly."); 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return result; 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 112