package com.android.music;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.content.Intent;
import android.drm.*;
import android.util.Log;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.database.Cursor;
import android.provider.MediaStore;
import android.net.Uri;
import com.mediatek.featureoption.FeatureOption;
public class AudioPreviewStarter extends Activity
implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener {
public static final String LOGTAG = "AudioPreviewStarter";
private DrmManagerClient mDrmClient = null;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.w(LOGTAG, ">> handleMessage");
finish();
Log.w(LOGTAG, "<< handleMessage");
}
};
@Override
public void onCreate(Bundle icicle) {
Log.d(LOGTAG, ">> onCreate");
super.onCreate(icicle);
Uri uri = getIntent().getData();
if (uri == null) {
Log.d(LOGTAG, "onCreate, uri is NULL");
finish();
return;
}
Log.d(LOGTAG, "onCreate, uri=" + uri);
Intent i = new Intent(getIntent());
i.setClass(this, AudioPreview.class); // change to explicit intent
if (!FeatureOption.MTK_DRM_APP) {
Log.w(LOGTAG, "onCreate, !MTK_DRM_APP");
startActivity(i);
finish();
return;
}
mDrmClient = new DrmManagerClient(this);
int rightsStatus = -1;
String scheme = uri.getScheme();
String host = uri.getHost();
Log.d(LOGTAG, "onCreate, scheme=" + scheme + ", host=" + host);
ContentResolver resolver = getContentResolver();
if ("content".equals(scheme)) {
if ("media".equals(host)) {
// query DB for drm info
Cursor c = resolver.query(uri,
new String[] {MediaStore.Audio.Media._ID, MediaStore.Audio.Media.IS_DRM, MediaStore.Audio.Media.DRM_METHOD},
null,
null,
null);
Log.d(LOGTAG, "onCreate, cursor=" + c);
if (c != null) {
if (c.moveToFirst()) {
// cursor is valid
int is_drm = c.getInt(1);
Log.d(LOGTAG, "onCreate, is_drm=" + is_drm);
if (is_drm == 1) {
// is a DRM file
int drm_method = c.getInt(2);
Log.d(LOGTAG, "onCreate, drm_method=" + drm_method);
if (drm_method == DrmStore.DrmMethod.METHOD_FL) {
// FL does not have constraints
startActivity(i);
finish();
return;
}
rightsStatus = mDrmClient.checkRightsStatusForTap(uri, DrmStore.Action.PLAY);
Log.d(LOGTAG, "onCreate, rightsStatus=" + rightsStatus);
switch (rightsStatus) {
case DrmStore.RightsStatus.RIGHTS_VALID:
mDrmClient.showConsumeDialog(this, this, this);
break;
case DrmStore.RightsStatus.RIGHTS_INVALID:
mDrmClient.showLicenseAcquisitionDialog(this, uri, this);
if (drm_method == DrmStore.DrmMethod.METHOD_CD) {
finish();
return;
}
break;
case DrmStore.RightsStatus.SECURE_TIMER_INVALID:
mDrmClient.showSecureTimerInvalidDialog(this, null, this);
break;
default:
}
} else {
startActivity(i);
finish();
return;
}
} else {
startActivity(i);
finish();
return;
}
c.close();
} else {
startActivity(i);
finish();
return;
}
} else {
startActivity(i);
finish();
return;
}
} else if ("file".equals(scheme)) {
// a file opened from FileManager/ other app
String path = uri.getPath();
Log.d(LOGTAG, "onCreate, file path=" + path);
if (path == null) {
finish();
return;
}
if (path.toLowerCase().endsWith(".dcf")) {
// we consider this to be a DRM file
// check for FL first
int drm_method = mDrmClient.getMethod(uri);
Log.d(LOGTAG, "onCreate, drm_method=" + drm_method);
if (drm_method == DrmStore.DrmMethod.METHOD_FL) {
startActivity(i);
finish();
return;
}
rightsStatus = mDrmClient.checkRightsStatusForTap(uri, DrmStore.Action.PLAY);
switch (rightsStatus) {
case DrmStore.RightsStatus.RIGHTS_VALID:
mDrmClient.showConsumeDialog(this, this, this);
break;
case DrmStore.RightsStatus.RIGHTS_INVALID:
mDrmClient.showLicenseAcquisitionDialog(this, uri, this);
if (drm_method == DrmStore.DrmMethod.METHOD_CD) {
finish();
return;
}
break;
case DrmStore.RightsStatus.SECURE_TIMER_INVALID:
mDrmClient.showSecureTimerInvalidDialog(this, null, this);
break;
default:
}
} else {
startActivity(i);
finish();
return;
}
} else {
startActivity(i);
finish();
return;
}
Log.d(LOGTAG, "<< onCreate");
}
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
// continue to play
Log.d(LOGTAG, "onClick: BUTTON_POSITIVE");
Intent i = new Intent(getIntent());
i.setClass(this, AudioPreview.class); // change to explicit intent
startActivity(i);
} else if (which == DialogInterface.BUTTON_NEGATIVE) {
// do nothing but finish self
Log.d(LOGTAG, "onClick: BUTTON_NEGATIVE");
} else {
Log.e(LOGTAG, "undefined button on DRM consume dialog!");
}
//dialog.dismiss();
//finish();
}
public void onDismiss(DialogInterface dialog) {
Log.d(LOGTAG, ">> onDismiss");
mHandler.sendEmptyMessage(1);
Log.d(LOGTAG, "<< onDismiss");
}
public void onPause() {
Log.d(LOGTAG, ">> onPause");
super.onPause();
Log.d(LOGTAG, "<< onPause");
}
public void onStop() {
Log.d(LOGTAG, ">> onStop");
super.onStop();
Log.d(LOGTAG, "<< onStop");
}
public void onDestroy() {
Log.d(LOGTAG, ">> onDestroy");
super.onDestroy();
Log.d(LOGTAG, "<< onDestroy");
}
}