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