DrmManagerClient.java revision d074e30ce44b9e33da43b67a4515b8986ca72b26
1d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/* 2d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Copyright (C) 2010 The Android Open Source Project 3d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 4d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License"); 5d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * you may not use this file except in compliance with the License. 6d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * You may obtain a copy of the License at 7d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 8d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * http://www.apache.org/licenses/LICENSE-2.0 9d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 10d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Unless required by applicable law or agreed to in writing, software 11d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS, 12d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * See the License for the specific language governing permissions and 14d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * limitations under the License. 15d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 16d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 17d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipackage android.drm; 18d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 19d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport android.content.ContentValues; 20d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport android.content.Context; 21d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport android.os.Handler; 22d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport android.os.Looper; 23d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport android.os.Message; 24d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport android.util.Log; 25d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 26d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport java.io.IOException; 27d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport java.lang.ref.WeakReference; 28d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport java.util.ArrayList; 29d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 30d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/** 31d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Interface of DRM Framework. 32d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Java application will instantiate this class 33d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * to access DRM agent through DRM Framework. 34d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 35d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 36d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic class DrmManagerClient { 37d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private static final String TAG = "DrmManager"; 38d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 39d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi static { 40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi // Load the respective library 41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi System.loadLibrary("drmframework_jni"); 42d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 43d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 44d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 45d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Interface definition of a callback to be invoked to communicate 46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * some info and/or warning about DrmManagerClient. 47d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 48d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public interface OnInfoListener { 49d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 50d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Called to indicate an info or a warning. 51d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 52d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param client DrmManagerClient instance 53d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param event instance which wraps reason and necessary information 54d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 55d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public void onInfo(DrmManagerClient client, DrmInfoEvent event); 56d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 57d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 58d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private static final int STATE_UNINITIALIZED = 0x00000000; 59d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private static final int STATE_INITIALIZED = 0x00000001; 60d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 61d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private int mUniqueId; 62d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private int mNativeContext; 63d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private EventHandler mEventHandler; 64d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private OnInfoListener mOnInfoListener; 65d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private int mCurrentState = STATE_UNINITIALIZED; 66d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 67d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 68d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * {@hide} 69d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 70d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public static void notify(Object thisReference, int uniqueId, int infoType, String message) { 71d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmManagerClient instance = (DrmManagerClient)((WeakReference)thisReference).get(); 72d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 73d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null != instance && null != instance.mEventHandler) { 74d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi Message m = instance.mEventHandler.obtainMessage( 75d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi EventHandler.INFO_EVENT_TYPE, uniqueId, infoType, message); 76d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi instance.mEventHandler.sendMessage(m); 77d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 78d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 79d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 80d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private class EventHandler extends Handler { 81d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public static final int INFO_EVENT_TYPE = 1; 82d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 83d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public EventHandler(Looper looper) { 84d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi super(looper); 85d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 86d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 87d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public void handleMessage(Message msg) { 88d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 89d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi switch (msg.what) { 90d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi case EventHandler.INFO_EVENT_TYPE: 91d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int uniqueId = msg.arg1; 92d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int infoType = msg.arg2; 93d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String message = msg.obj.toString(); 94d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 95d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (infoType == DrmInfoEvent.TYPE_REMOVE_RIGHTS) { 96d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi try { 97d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmUtils.removeFile(message); 98d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } catch (IOException e) { 99d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi e.printStackTrace(); 100d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 101d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 102d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 103d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null != mOnInfoListener) { 104d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmInfoEvent event = new DrmInfoEvent(uniqueId, infoType, message); 105d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mOnInfoListener.onInfo(DrmManagerClient.this, event); 106d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 107d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return; 108d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi default: 109d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi Log.e(TAG, "Unknown message type " + msg.what); 110d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return; 111d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 112d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 113d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 114d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 115d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 116d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * To instantiate DrmManagerClient 117d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 118d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param context context of the caller 119d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 120d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmManagerClient(Context context) { 121d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi Looper looper; 122d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 123d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null != (looper = Looper.myLooper())) { 124d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mEventHandler = new EventHandler(looper); 125d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (null != (looper = Looper.getMainLooper())) { 126d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mEventHandler = new EventHandler(looper); 127d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else { 128d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mEventHandler = null; 129d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 130d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 131d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi // save the unique id 132d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mUniqueId = hashCode(); 133d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 134d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 135d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 136d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Register a callback to be invoked when the caller required to receive 137d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * necessary information 138d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 139d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param infoListener 140d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 141d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public void setOnInfoListener(OnInfoListener infoListener) { 142d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi synchronized(this) { 143d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null != infoListener) { 144d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mOnInfoListener = infoListener; 145d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 146d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 147d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 148d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 149d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 150d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Initializes DrmFramework, which loads all available plug-ins 151d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * in the default plug-in directory path 152d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 153d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 154d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public void loadPlugIns() { 155d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (getState() == STATE_UNINITIALIZED) { 156d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi _loadPlugIns(mUniqueId, new WeakReference<DrmManagerClient>(this)); 157d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 158d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mCurrentState = STATE_INITIALIZED; 159d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 160d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 161d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 162d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 163d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Finalize DrmFramework, which release resources associated with each plug-in 164d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * and unload all plug-ins. 165d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 166d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public void unloadPlugIns() { 167d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (getState() == STATE_INITIALIZED) { 168d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi _unloadPlugIns(mUniqueId); 169d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 170d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mCurrentState = STATE_UNINITIALIZED; 171d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 172d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 173d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 174d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 175d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Retrieves informations about all the plug-ins registered with DrmFramework. 176d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 177d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Array of DrmEngine plug-in strings 178d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 179d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public String[] getAvailableDrmEngines() { 180d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (getState() == STATE_UNINITIALIZED) { 181d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 182d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 183d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 184d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmSupportInfo[] supportInfos = _getAllSupportInfo(mUniqueId); 185d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi ArrayList<String> descriptions = new ArrayList<String>(); 186d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 187d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi for (int i = 0; i < supportInfos.length; i++) { 188d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi descriptions.add(supportInfos[i].getDescriprition()); 189d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 190d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 191d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String[] drmEngines = new String[descriptions.size()]; 192d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return descriptions.toArray(drmEngines); 193d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 194d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 195d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 196d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Get constraints information evaluated from DRM content 197d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 198d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param path Content path from where DRM constraints would be retrieved. 199d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param action Actions defined in {@link DrmStore.Action} 200d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return ContentValues instance in which constraints key-value pairs are embedded 201d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * or null in case of failure 202d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 203d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public ContentValues getConstraints(String path, int action) { 204d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null == path || path.equals("") || !DrmStore.Action.isValid(action)) { 205d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException("Given usage or path is invalid/null"); 206d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 207d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 208d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 209d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return _getConstraints(mUniqueId, path, action); 210d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 211d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 212d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 213d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Save DRM rights to specified rights path 214d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * and make association with content path. 215d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 216d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param drmRights DrmRights to be saved 217d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param rightsPath File path where rights to be saved 218d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param contentPath File path where content was saved 219d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @throws IOException if failed to save rights information in the given path 220d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 221d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @note In case of OMA or WM-DRM, rightsPath and contentPath could be null 222d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 223d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public void saveRights( 224d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmRights drmRights, String rightsPath, String contentPath) throws IOException { 225d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null == drmRights || !drmRights.isValid() 226d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi || null == contentPath || contentPath.equals("")) { 227d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException("Given drmRights or contentPath is not valid"); 228d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 229d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 230d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 231d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null != rightsPath && !rightsPath.equals("")) { 232d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmUtils.writeToFile(rightsPath, drmRights.getData()); 233d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 234d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi _saveRights(mUniqueId, drmRights, rightsPath, contentPath); 235d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 236d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 237d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 238d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Install new DRM Engine Plug-in at the runtime 239d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 240d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param engineFilePath Path of the plug-in file to be installed 241d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * {@hide} 242d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 243d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public void installDrmEngine(String engineFilePath) { 244d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null == engineFilePath || engineFilePath.equals("")) { 245d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException( 246d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi "Given engineFilePath: "+ engineFilePath + "is not valid"); 247d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 248d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 249d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 250d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi _installDrmEngine(mUniqueId, engineFilePath); 251d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 252d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 253d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 254d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Check whether the given mimetype or path can be handled. 255d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 256d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param path Path of the content to be handled 257d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param mimeType Mimetype of the object to be handled 258d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return 259d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * true - if the given mimeType or path can be handled 260d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * false - cannot be handled. 261d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @note false will be return in case the state is uninitialized 262d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 263d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public boolean canHandle(String path, String mimeType) { 264d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if ((null == path || path.equals("")) && (null == mimeType || mimeType.equals(""))) { 265d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException("Path or the mimetype should be non null"); 266d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 267d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 268d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 269d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return _canHandle(mUniqueId, path, mimeType); 270d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 271d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 272d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 273d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Executes given drm information based on its type 274d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 275d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param drmInfo Information needs to be processed 276d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return DrmInfoStatus Instance as a result of processing given input 277d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 278d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmInfoStatus processDrmInfo(DrmInfo drmInfo) { 279d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null == drmInfo || !drmInfo.isValid()) { 280d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException("Given drmInfo is invalid/null"); 281d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 282d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 283d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 284d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return _processDrmInfo(mUniqueId, drmInfo); 285d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 286d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 287d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 288d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Retrieves necessary information for register, unregister or rights acquisition. 289d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 290d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param drmInfoRequest Request information to retrieve drmInfo 291d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return DrmInfo Instance as a result of processing given input 292d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 293d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmInfo acquireDrmInfo(DrmInfoRequest drmInfoRequest) { 294d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null == drmInfoRequest || !drmInfoRequest.isValid()) { 295d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException("Given drmInfoRequest is invalid/null"); 296d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 297d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 298d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 299d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return _acquireDrmInfo(mUniqueId, drmInfoRequest); 300d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 301d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 302d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 303d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Retrieves the type of the protected object (content, rights, etc..) 304d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * using specified path or mimetype. At least one parameter should be non null 305d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * to retrieve DRM object type 306d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 307d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param path Path of the content or null. 308d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param mimeType Mimetype of the content or null. 309d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Type of the DRM content. 310d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @see DrmStore.DrmObjectType 311d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 312d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public int getDrmObjectType(String path, String mimeType) { 313d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if ((null == path || path.equals("")) && (null == mimeType || mimeType.equals(""))) { 314d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException("Path or the mimetype should be non null"); 315d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 316d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 317d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 318d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return _getDrmObjectType(mUniqueId, path, mimeType); 319d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 320d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 321d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 322d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Retrieves the mime type embedded inside the original content 323d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 324d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param path Path of the protected content 325d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Mimetype of the original content, such as "video/mpeg" 326d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 327d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public String getOriginalMimeType(String path) { 328d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null == path || path.equals("")) { 329d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException("Given path should be non null"); 330d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 331d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 332d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 333d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return _getOriginalMimeType(mUniqueId, path); 334d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 335d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 336d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 337d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Check whether the given content has valid rights or not 338d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 339d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param path Path of the protected content 340d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Status of the rights for the protected content 341d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @see DrmStore.RightsStatus 342d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 343d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public int checkRightsStatus(String path) { 344d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return checkRightsStatus(path, DrmStore.Action.DEFAULT); 345d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 346d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 347d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 348d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Check whether the given content has valid rights or not for specified action. 349d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 350d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param path Path of the protected content 351d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param action Action to perform 352d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Status of the rights for the protected content 353d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @see DrmStore.RightsStatus 354d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 355d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public int checkRightsStatus(String path, int action) { 356d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null == path || path.equals("") || !DrmStore.Action.isValid(action)) { 357d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException("Given path or action is not valid"); 358d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 359d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 360d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 361d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return _checkRightsStatus(mUniqueId, path, action); 362d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 363d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 364d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 365d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Removes the rights associated with the given protected content 366d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 367d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param path Path of the protected content 368d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 369d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public void removeRights(String path) { 370d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null == path || path.equals("")) { 371d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException("Given path should be non null"); 372d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 373d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 374d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 375d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi _removeRights(mUniqueId, path); 376d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 377d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 378d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 379d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Removes all the rights information of every plug-in associated with 380d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * DRM framework. Will be used in master reset 381d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 382d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public void removeAllRights() { 383d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (getState() == STATE_UNINITIALIZED) { 384d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 385d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 386d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi _removeAllRights(mUniqueId); 387d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 388d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 389d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 390d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * This API is for Forward Lock based DRM scheme. 391d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Each time the application tries to download a new DRM file 392d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * which needs to be converted, then the application has to 393d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * begin with calling this API. 394d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 395d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param mimeType Description/MIME type of the input data packet 396d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return convert ID which will be used for maintaining convert session. 397d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 398d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public int openConvertSession(String mimeType) { 399d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null == mimeType || mimeType.equals("")) { 400d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException("Path or the mimeType should be non null"); 401d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 402d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 403d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 404d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return _openConvertSession(mUniqueId, mimeType); 405d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 406d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 407d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 408d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Accepts and converts the input data which is part of DRM file. 409d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * The resultant converted data and the status is returned in the DrmConvertedInfo 410d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * object. This method will be called each time there are new block 411d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * of data received by the application. 412d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 413d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param convertId Handle for the convert session 414d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param inputData Input Data which need to be converted 415d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Return object contains the status of the data conversion, 416d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * the output converted data and offset. In this case the 417d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * application will ignore the offset information. 418d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 419d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmConvertedStatus convertData(int convertId, byte[] inputData) { 420d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (null == inputData || 0 >= inputData.length) { 421d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalArgumentException("Given inputData should be non null"); 422d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } else if (getState() == STATE_UNINITIALIZED) { 423d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 424d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 425d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return _convertData(mUniqueId, convertId, inputData); 426d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 427d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 428d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 429d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Informs the Drm Agent when there is no more data which need to be converted 430d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * or when an error occurs. Upon successful conversion of the complete data, 431d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * the agent will inform that where the header and body signature 432d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * should be added. This signature appending is needed to integrity 433d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * protect the converted file. 434d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 435d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param convertId Handle for the convert session 436d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Return object contains the status of the data conversion, 437d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * the header and body signature data. It also informs 438d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * the application on which offset these signature data should be appended. 439d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 440d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmConvertedStatus closeConvertSession(int convertId) { 441d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi if (getState() == STATE_UNINITIALIZED) { 442d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi throw new IllegalStateException("Not Initialized yet"); 443d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 444d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return _closeConvertSession(mUniqueId, convertId); 445d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 446d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 447d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private int getState() { 448d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mCurrentState; 449d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 450d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 451d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi // private native interfaces 452d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native void _loadPlugIns(int uniqueId, Object weak_this); 453d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 454d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native void _unloadPlugIns(int uniqueId); 455d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 456d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native void _installDrmEngine(int uniqueId, String engineFilepath); 457d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 458d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native ContentValues _getConstraints(int uniqueId, String path, int usage); 459d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 460d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native boolean _canHandle(int uniqueId, String path, String mimeType); 461d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 462d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native DrmInfoStatus _processDrmInfo(int uniqueId, DrmInfo drmInfo); 463d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 464d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native DrmInfo _acquireDrmInfo(int uniqueId, DrmInfoRequest drmInfoRequest); 465d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 466d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native void _saveRights( 467d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int uniqueId, DrmRights drmRights, String rightsPath, String contentPath); 468d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 469d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native int _getDrmObjectType(int uniqueId, String path, String mimeType); 470d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 471d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native String _getOriginalMimeType(int uniqueId, String path); 472d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 473d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native int _checkRightsStatus(int uniqueId, String path, int action); 474d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 475d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native void _removeRights(int uniqueId, String path); 476d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 477d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native void _removeAllRights(int uniqueId); 478d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 479d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native int _openConvertSession(int uniqueId, String mimeType); 480d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 481d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native DrmConvertedStatus _convertData(int uniqueId, int convertId, byte[] inputData); 482d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 483d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native DrmConvertedStatus _closeConvertSession(int uniqueId, int convertId); 484d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 485d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private native DrmSupportInfo[] _getAllSupportInfo(int uniqueId); 486d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi} 487d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 488