Merge "Rework WidevineSamplePlayer to use fragments" into nyc-dev

This commit is contained in:
Jeff Tinker
2016-06-17 21:24:47 +00:00
committed by Android (Google) Code Review
22 changed files with 285 additions and 367 deletions

View File

@@ -9,7 +9,23 @@ LOCAL_DEX_PREOPT := false
LOCAL_PACKAGE_NAME := WidevineSamplePlayer
LOCAL_JAVA_LIBRARIES := org.apache.http.legacy
LOCAL_JAVA_LIBRARIES := \
org.apache.http.legacy \
LOCAL_STATIC_JAVA_LIBRARIES := \
android-support-v4 \
android-support-v7-appcompat \
android-support-design
LOCAL_RESOURCE_DIR := \
$(addprefix $(LOCAL_PATH)/, res) \
frameworks/support/design/res \
frameworks/support/v7/appcompat/res \
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages android.support.design \
--extra-packages android.support.v7.appcompat \
LOCAL_SDK_VERSION := current

View File

@@ -1,12 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.widevine.demo"
>
package="com.widevine.demo">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Holo.NoActionBar">
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="24" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.NoActionBar">
<activity android:name=".WidevineSamplePlayer"
android:label="@string/app_name"
android:screenOrientation="landscape">
@@ -15,6 +19,7 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".VideoPlayerView"
android:label="@string/app_name"
android:screenOrientation="landscape">
@@ -22,30 +27,6 @@
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
<activity android:name=".StreamingActivity"
android:label="@string/app_name"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
<activity android:name=".DownloadActivity"
android:label="@string/app_name"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
<activity android:name=".SettingsActivity"
android:label="@string/app_name"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@@ -3,5 +3,11 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/textView1" android:text="@string/no_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="24pt" android:background="@drawable/background3" android:gravity="center"></TextView>
<TextView android:id="@+id/textView1"
android:text="@string/no_content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="24pt"
android:background="@drawable/background3"
android:gravity="center"></TextView>
</LinearLayout>

View File

@@ -1,21 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMaxWidth="0dp"
app:tabGravity="fill"
app:tabMode="fixed">
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
</TabHost>
android:layout_weight="1">
</android.support.v4.view.ViewPager>
</LinearLayout>

View File

@@ -73,8 +73,8 @@
android:gravity="center"
>
<Button
android:text="@string/update_button"
android:id="@+id/update_button"
android:text="@string/save_settings"
android:id="@+id/save_settings"
/>
</TableRow>
</TableLayout>

View File

@@ -13,10 +13,13 @@
<string name="show_rights">Show Rights</string>
<string name="streaming">Streaming</string>
<string name="downloads">Downloads</string>
<string name="settings">Settings</string>
<string name="content_page">Content Page</string>
<string name="device_id">Device Id</string>
<string name="drm_server">Drm Server</string>
<string name="portal_id">Portal Name</string>
<string name="update_button">Update Button</string>
<string name="save_settings">Save Settings</string>
<string name="next_page">Next Page &gt;&gt;</string>
<string name="previous_page">&lt;&lt; Previous Page</string>
</resources>

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;
@@ -9,56 +9,63 @@ import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Button;
public abstract class AssetActivity extends Activity {
public abstract class AssetFragment extends Fragment {
public static final String TAG = "WVM Sample Player";
private int currentPage;
protected ArrayList<AssetsPage> pages;
private Context context;
private View mView;
/** Called when the activity is first created. */
/** Called when the fragment is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
mView = inflater.inflate(R.layout.empty, container, false);
initialize();
currentPage = 0;
pages = new ArrayList<AssetsPage>();
return mView;
}
protected void initialize() {
currentPage = 0;
pages = new ArrayList<AssetsPage>();
@Override
public void onActivityCreated(Bundle bundle) {
super.onActivityCreated(bundle);
if (setUpAssetPages()) {
setContentView(createView(this));
} else {
setContentView(R.layout.empty);
createView();
}
}
protected abstract boolean setUpAssetPages();
private View createView(Context ctxt) {
ImageView empty = new ImageView(this);
empty.setBackground(getResources().getDrawable(R.drawable.empty, context.getTheme()));
private void createView() {
ViewGroup viewGroup = (ViewGroup)mView;
viewGroup.removeAllViews();
LinearLayout mainLayout = new LinearLayout(getActivity());
ImageView empty = new ImageView(getActivity());
empty.setBackground(getResources().getDrawable(R.drawable.empty,
getActivity().getTheme()));
View[] clips = new View[6];
BitmapFactory.Options options = new BitmapFactory.Options();
@@ -69,22 +76,22 @@ public abstract class AssetActivity extends Activity {
for (int i = 0; i < page.getPageCount(); i++) {
AssetItem assetItem = page.getPage(i);
clips[i] = createViewItem(getBitmapFromAssetItem(assetItem), assetItem.getAssetPath(),
assetItem.getTitle());
clips[i] = createViewItem(getBitmapFromAssetItem(assetItem),
assetItem.getAssetPath(), assetItem.getTitle());
}
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT, 1);
params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
LinearLayout.LayoutParams paramsMain = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT, 1);
paramsMain.gravity = Gravity.CENTER;
LinearLayout left = new LinearLayout(ctxt);
LinearLayout left = new LinearLayout(getActivity());
left.setOrientation(LinearLayout.VERTICAL);
if (clips[0] != null) {
left.addView(clips[0], params);
@@ -95,7 +102,7 @@ public abstract class AssetActivity extends Activity {
left.addView(createEmptyView(), params);
}
LinearLayout middle = new LinearLayout(ctxt);
LinearLayout middle = new LinearLayout(getActivity());
middle.setOrientation(LinearLayout.VERTICAL);
if (clips[1] != null) {
middle.addView(clips[1], params);
@@ -106,7 +113,7 @@ public abstract class AssetActivity extends Activity {
middle.addView(createEmptyView(), params);
}
LinearLayout right = new LinearLayout(ctxt);
LinearLayout right = new LinearLayout(getActivity());
right.setOrientation(LinearLayout.VERTICAL);
if (clips[2] != null) {
right.addView(clips[2], params);
@@ -119,7 +126,7 @@ public abstract class AssetActivity extends Activity {
}
params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
LinearLayout body = new LinearLayout(ctxt);
LinearLayout body = new LinearLayout(getActivity());
body.addView(left, paramsMain);
body.addView(middle, paramsMain);
@@ -129,18 +136,17 @@ public abstract class AssetActivity extends Activity {
View.OnClickListener nextButtonListener = new View.OnClickListener() {
public void onClick(View v) {
currentPage++;
Log.d(TAG, "Click next page: " + currentPage);
if (currentPage >= pages.size()) {
currentPage = 0;
if (currentPage < pages.size() - 1) {
currentPage++;
createView();
}
setContentView(createView(context));
}
};
Button next = new Button(this);
next.setText(">>");
next.setTextSize(10);
Button next = new Button(getActivity());
next.setText(R.string.next_page);
next.setTextSize(14);
next.setOnClickListener(nextButtonListener);
// Previous button listener
@@ -148,53 +154,48 @@ public abstract class AssetActivity extends Activity {
public void onClick(View v) {
currentPage--;
Log.d(TAG, "Click prev page: " + currentPage);
if (currentPage < 0) {
currentPage = pages.size() - 1;
if (currentPage > 0) {
currentPage--;
createView();
}
setContentView(createView(context));
}
};
Button prev = new Button(this);
prev.setText("<<");
prev.setTextSize(10);
Button prev = new Button(getActivity());
prev.setText(R.string.previous_page);
prev.setTextSize(14);
prev.setOnClickListener(prevButtonListener);
LinearLayout buttons = new LinearLayout(this);
LinearLayout buttons = new LinearLayout(getActivity());
buttons.addView(prev, params);
buttons.addView(next, params);
body.setBackground(this.getResources().getDrawable(R.drawable.background3,
context.getTheme()));
body.setBackground(getActivity().getResources().getDrawable(R.drawable.background3,
getActivity().getTheme()));
SwipeLinearLayout main = new SwipeLinearLayout(this);
main.setNext(nextButtonListener);
main.setPrev(prevButtonListener);
main.setOrientation(LinearLayout.VERTICAL);
main.addView(body, params);
mainLayout.setOrientation(LinearLayout.VERTICAL);
mainLayout.addView(body, params);
LinearLayout.LayoutParams paramButtons = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
paramButtons.gravity = Gravity.CENTER;
main.addView(buttons, paramButtons);
return main;
mainLayout.addView(buttons, paramButtons);
viewGroup.addView(mainLayout, paramsMain);
}
private View createEmptyView() {
ImageView empty = new ImageView(this);
empty.setBackground(getResources().getDrawable(R.drawable.empty, context.getTheme()));
ImageView empty = new ImageView(getActivity());
empty.setBackground(getResources().getDrawable(R.drawable.empty, getActivity().getTheme()));
TextView emptyText = new TextView(this);
TextView emptyText = new TextView(getActivity());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT, 1);
params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
LinearLayout body = new LinearLayout(this);
LinearLayout body = new LinearLayout(getActivity());
body.setOrientation(LinearLayout.VERTICAL);
body.addView(empty, params);
@@ -208,30 +209,31 @@ public abstract class AssetActivity extends Activity {
final String assetPath = path;
ClipImageView clip = new ClipImageView(this);
ClipImageView clip = new ClipImageView(getActivity());
clip.setImageBitmap(image);
clip.setBackgroundColor(0);
// Set the onClick listener for each image
clip.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.d(TAG, "Click Asset path: " + assetPath);
Intent intent = new Intent(context, VideoPlayerView.class);
Intent intent = new Intent(getActivity(), VideoPlayerView.class);
intent.putExtra("com.widevine.demo.Path", assetPath);
context.startActivity(intent);
getActivity().startActivity(intent);
}
});
TextView text = new TextView(this);
TextView text = new TextView(getActivity());
text.setText((title == null) ? path : title);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT, 1);
params.gravity = Gravity.CENTER;
LinearLayout body = new LinearLayout(this);
LinearLayout body = new LinearLayout(getActivity());
body.setOrientation(LinearLayout.VERTICAL);
body.addView(clip, params);

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;
@@ -7,8 +7,11 @@ package com.widevine.demo;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import android.content.Context;
import android.widget.Toast;
public class DownloadActivity extends AssetActivity {
public class DownloadFragment extends AssetFragment {
private static String TAG = "DownloadActivity";
protected boolean setUpAssetPages() {
pages = new ArrayList<AssetsPage>();
@@ -32,6 +35,23 @@ public class DownloadActivity extends AssetActivity {
private File[] getDownloadedClips() {
File file = new File("/sdcard/Widevine");
String message = null;
if (!file.exists()) {
message = "Warning: /sdcard/Widevine does not exist, create it for downloads";
} else if (!file.isDirectory()) {
message = "Warning: /sdcard/Widevine is not a directory";
} else if (!file.canRead()) {
message = "Warning: unable to read /sdcard/Widevine, check settings->app->permissions->storage";
}
if (message != null) {
Context context = getActivity().getApplicationContext();
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, message, duration);
toast.show();
}
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
@@ -47,7 +67,5 @@ public class DownloadActivity extends AssetActivity {
};
return file.listFiles(filter);
}
}

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;

View File

@@ -1,41 +1,38 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google Inc.
*/
package com.widevine.demo;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.util.Log;
import android.content.Context;
public class SettingsActivity extends Activity {
public class SettingsFragment extends Fragment {
// public static String CONTENT_PAGE = "/sdcard/Widevine/config.xml";
public static String CONTENT_PAGE = "http://storage.googleapis.com/wvmedia/html/oem.html";
private Context context;
private Button updateButton;
private EditText drmServer, portalName, deviceId, contentPage;
public static final String TAG = "WVM Player Settings";
@Override
public void onCreate(Bundle savedInstanceState) {
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
View rootView = inflater.inflate(R.layout.settings, container, false);
setContentView(R.layout.settings);
updateButton = (Button) findViewById(R.id.update_button);
updateButton = (Button)rootView.findViewById(R.id.save_settings);
View.OnClickListener clickListener = new View.OnClickListener() {
@@ -44,9 +41,9 @@ public class SettingsActivity extends Activity {
WidevineDrm.Settings.DRM_SERVER_URI = drmServer.getText().toString();
WidevineDrm.Settings.DEVICE_ID = deviceId.getText().toString();
WidevineDrm.Settings.PORTAL_NAME = portalName.getText().toString();
SettingsActivity.CONTENT_PAGE = contentPage.getText().toString();
SettingsFragment.CONTENT_PAGE = contentPage.getText().toString();
AlertDialog.Builder builder = new AlertDialog.Builder(context);
AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
builder.setMessage("DRM Settings Updated").setCancelable(false)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
@@ -61,18 +58,18 @@ public class SettingsActivity extends Activity {
updateButton.setOnClickListener(clickListener);
drmServer = (EditText) findViewById(R.id.drm_server);
drmServer = (EditText)rootView.findViewById(R.id.drm_server);
drmServer.setText(WidevineDrm.Settings.DRM_SERVER_URI);
deviceId = (EditText) findViewById(R.id.device_id);
deviceId = (EditText)rootView.findViewById(R.id.device_id);
deviceId.setText(WidevineDrm.Settings.DEVICE_ID);
portalName = (EditText) findViewById(R.id.portal_id);
portalName = (EditText)rootView.findViewById(R.id.portal_id);
portalName.setText(WidevineDrm.Settings.PORTAL_NAME);
contentPage = (EditText) findViewById(R.id.content_page);
contentPage.setText(SettingsActivity.CONTENT_PAGE);
contentPage = (EditText)rootView.findViewById(R.id.content_page);
contentPage.setText(SettingsFragment.CONTENT_PAGE);
return rootView;
}
}

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google Inc.
*/
package com.widevine.demo;
@@ -10,24 +10,13 @@ import java.util.ArrayList;
import android.os.Bundle;
public class StreamingActivity extends AssetActivity {
public class StreamingFragment extends AssetFragment {
private String contentPage;
@Override
public void onCreate(Bundle savedInstanceState) {
contentPage = SettingsActivity.CONTENT_PAGE;
super.onCreate(savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
if (!contentPage.equals(SettingsActivity.CONTENT_PAGE)) {
contentPage = SettingsActivity.CONTENT_PAGE;
initialize();
}
contentPage = SettingsFragment.CONTENT_PAGE;
}
protected boolean setUpAssetPages() {

View File

@@ -1,58 +0,0 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
*/
package com.widevine.demo;
import android.content.Context;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
public class SwipeLinearLayout extends LinearLayout {
private View.OnClickListener prev;
private View.OnClickListener next;
float startX, startY, endX, endY;
public SwipeLinearLayout(Context c) {
super(c);
}
public void setNext(View.OnClickListener next) {
this.next = next;
}
public void setPrev(View.OnClickListener prev) {
this.prev = prev;
}
public boolean onTouchEvent(MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_DOWN) {
startX = e.getX();
startY = e.getY();
return true;
} else if (e.getAction() == MotionEvent.ACTION_UP) {
endX = e.getX();
endY = e.getY();
if (Math.abs(startY - endY) < 75) {
if ((startX - endX) > 200.0) {
// go forward
if (next != null) {
next.onClick(null);
}
} else if ((startX - endX) < -200.0) {
// go back
if (prev != null) {
prev.onClick(null);
}
}
startX = startY = endX = endY = 0;
}
return true;
}
return false;
}
}

View File

@@ -1,10 +1,10 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -33,7 +33,7 @@ import android.util.Log;
import java.io.IOException;
public class VideoPlayerView extends Activity {
public class VideoPlayerView extends AppCompatActivity {
private final static String TAG = "VideoPlayerView";
private final static float BUTTON_FONT_SIZE = 10;
@@ -44,13 +44,11 @@ public class VideoPlayerView extends Activity {
private WidevineDrm drm;
private FullScreenVideoView videoView;
private MediaCodecView mediaCodecView;
private String assetUri;
private TextView logs;
private ScrollView scrollView;
private Context context;
private ClipImageView bgImage;
private Button mediaCodecModeButton;
private Button playButton;
private Button fullScreen;
private Handler hRefresh;
@@ -58,7 +56,6 @@ public class VideoPlayerView extends Activity {
private LinearLayout main;
private LinearLayout sidePanel;
private boolean enteringFullScreen;
private boolean useMediaCodec;
private int width, height;
public void onCreate(Bundle savedInstanceState) {
@@ -69,7 +66,6 @@ public class VideoPlayerView extends Activity {
height = display.getHeight();
width = display.getWidth();
context = this;
useMediaCodec = false;
contentView = createView();
if (drm.isProvisionedDevice()) {
setContentView(contentView);
@@ -87,11 +83,6 @@ public class VideoPlayerView extends Activity {
stopPlayback();
}
}
if (mediaCodecView != null) {
if (mediaCodecView.isPlaying()) {
stopPlayback();
}
}
super.onStop();
}
@@ -153,16 +144,10 @@ public class VideoPlayerView extends Activity {
FrameLayout playerFrame = new FrameLayout(this);
View view;
if (useMediaCodec) {
mediaCodecView = new MediaCodecView(this);
view = mediaCodecView;
} else {
videoView = new FullScreenVideoView(this);
view = videoView;
}
videoView = new FullScreenVideoView(this);
playerFrame.addView(view, new FrameLayout.LayoutParams(
videoView.setVisibility(View.INVISIBLE);
playerFrame.addView(videoView, new FrameLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.MATCH_PARENT));
@@ -174,7 +159,6 @@ public class VideoPlayerView extends Activity {
public void onClick(View v) {
Log.d(TAG, "Click play (start playback).");
startPlayback();
}
});
@@ -211,8 +195,8 @@ public class VideoPlayerView extends Activity {
FrameLayout.LayoutParams.WRAP_CONTENT));
fullScreen.setVisibility(View.INVISIBLE);
playerFrame.addView(bgImage, new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT));
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT));
main = new LinearLayout(this);
main.addView(playerFrame, new LinearLayout.LayoutParams((int)(width * 0.65),
@@ -227,23 +211,14 @@ public class VideoPlayerView extends Activity {
private void startPlayback() {
logMessage("Playback start.");
playButton.setText(R.string.stop);
bgImage.setVisibility(View.GONE);
videoView.setVisibility(View.VISIBLE);
if (useMediaCodec) {
mediaCodecView.setDataSource(
this,
Uri.parse(assetUri),
null /* headers */,
true /* encrypted */);
videoView.setVideoPath(assetUri);
videoView.setMediaController(new MediaController(context));
mediaCodecView.setMediaController(new MediaController(context));
mediaCodecView.requestFocus();
mediaCodecView.start();
} else {
videoView.setVideoPath(assetUri);
videoView.setMediaController(new MediaController(context));
videoView.setOnErrorListener(new OnErrorListener() {
videoView.setOnErrorListener(new OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int extra) {
String message = "Unknown error: " + what;
switch (what) {
@@ -261,18 +236,19 @@ public class VideoPlayerView extends Activity {
updateLogs();
bgImage.setVisibility(View.VISIBLE);
videoView.setVisibility(View.INVISIBLE);
return false;
}
});
videoView.setOnCompletionListener(new OnCompletionListener() {
videoView.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
Log.d(TAG, "onCompletion.");
stopPlayback();
}
});
videoView.setOnInfoListener(new OnInfoListener() {
videoView.setOnInfoListener(new OnInfoListener() {
public boolean onInfo(MediaPlayer mp, int what, int extra) {
String message = "Unknown info message";
@@ -315,68 +291,40 @@ public class VideoPlayerView extends Activity {
}
});
videoView.requestFocus();
videoView.requestFocus();
videoView.start();
videoView.start();
if (videoView.getFullScreen()) {
sidePanel.setVisibility(View.GONE);
} else {
sidePanel.setVisibility(View.VISIBLE);
}
fullScreen.setVisibility(View.VISIBLE);
videoView.setFullScreenDimensions(contentView.getRight() - contentView.getLeft(),
contentView.getBottom() - contentView.getTop());
if (videoView.getFullScreen()) {
sidePanel.setVisibility(View.GONE);
} else {
sidePanel.setVisibility(View.VISIBLE);
}
fullScreen.setVisibility(View.VISIBLE);
videoView.setFullScreenDimensions(contentView.getRight() - contentView.getLeft(),
contentView.getBottom() - contentView.getTop());
}
private void stopPlayback() {
logMessage("Stop Playback.");
playButton.setText(R.string.play);
bgImage.setVisibility(View.VISIBLE);
videoView.setVisibility(View.INVISIBLE);
if (useMediaCodec) {
mediaCodecView.reset();
} else {
videoView.stopPlayback();
videoView.stopPlayback();
fullScreen.setVisibility(View.INVISIBLE);
if (videoView.getFullScreen() && !enteringFullScreen) {
videoView.setVisibility(View.INVISIBLE);
videoView.setFullScreen(false);
videoView.setVisibility(View.VISIBLE);
sidePanel.setVisibility(View.VISIBLE);
fullScreen.setText(FULLSCREEN);
}
fullScreen.setVisibility(View.INVISIBLE);
if (videoView.getFullScreen() && !enteringFullScreen) {
videoView.setVisibility(View.INVISIBLE);
videoView.setFullScreen(false);
sidePanel.setVisibility(View.VISIBLE);
fullScreen.setText(FULLSCREEN);
}
enteringFullScreen = false;
}
private View createButtons() {
mediaCodecModeButton = new Button(this);
if (useMediaCodec) {
mediaCodecModeButton.setText(R.string.normal_mode);
} else {
mediaCodecModeButton.setText(R.string.mediacodec_mode);
}
mediaCodecModeButton.setTextSize(BUTTON_FONT_SIZE);
mediaCodecModeButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
onStop();
useMediaCodec = (useMediaCodec) ? false : true;
Log.d(TAG, "Click media codec mode. useMediaCodec = "+useMediaCodec);
contentView = createView();
if (drm.isProvisionedDevice()) {
setContentView(contentView);
} else {
setContentView(R.layout.notprovisioned);
}
}
});
playButton = new Button(this);
playButton.setText(R.string.play);
playButton.setTextSize(BUTTON_FONT_SIZE);

View File

@@ -1,5 +1,5 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;

View File

@@ -1,85 +1,95 @@
/*
* (c)Copyright 2011 Widevine Technologies, Inc
* (c)Copyright 2011 Google, Inc
*/
package com.widevine.demo;
import android.app.TabActivity;
import android.os.Bundle;
import android.widget.TabHost;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class WidevineSamplePlayer extends TabActivity {
public class WidevineSamplePlayer extends AppCompatActivity {
public static final String PREFS_NAME = "DrmPrefs";
private static final String TAG = "WidevineSamplePlayer";
DemoPagerAdapter mPagerAdapter;
ViewPager mViewPager;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
WidevineDrm.Settings.DRM_SERVER_URI = settings.getString("drmServer",
WidevineDrm.Settings.DRM_SERVER_URI);
WidevineDrm.Settings.DEVICE_ID = settings.getString("deviceId",
WidevineDrm.Settings.DEVICE_ID);
WidevineDrm.Settings.PORTAL_NAME = settings.getString("portalId",
WidevineDrm.Settings.PORTAL_NAME);
SettingsActivity.CONTENT_PAGE = settings.getString("contentPage",
SettingsActivity.CONTENT_PAGE);
setContentView(R.layout.main);
TabHost tab = getTabHost();
// ViewPager and its adapters use support library
// fragments, so use getSupportFragmentManager.
mPagerAdapter = new DemoPagerAdapter(getSupportFragmentManager(), this);
mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setAdapter(mPagerAdapter);
TabLayout tabs = (TabLayout) findViewById(R.id.tabs);
tabs.setupWithViewPager(mViewPager);
}
// Setup Streaming tab
TabHost.TabSpec streamingTab = tab.newTabSpec("Streaming");
streamingTab.setIndicator("Streaming");
Intent streamingIntent = new Intent(this, StreamingActivity.class);
streamingTab.setContent(streamingIntent);
tab.addTab(streamingTab);
// Setup Down load tab
TabHost.TabSpec downloadTab = tab.newTabSpec("Downloads");
downloadTab.setIndicator("Downloads");
Intent downloadIntent = new Intent(this, DownloadActivity.class);
downloadTab.setContent(downloadIntent);
tab.addTab(downloadTab);
// Setup Settings tab
TabHost.TabSpec settingsTab = tab.newTabSpec("Settings");
settingsTab.setIndicator("Settings");
Intent settingsIntent = new Intent(this, SettingsActivity.class);
settingsTab.setContent(settingsIntent);
tab.addTab(settingsTab);
}
class DemoPagerAdapter extends FragmentPagerAdapter {
private Context context;
public DemoPagerAdapter(FragmentManager fm, Context c) {
super(fm);
context = c;
}
@Override
protected void onStop() {
super.onStop();
public Fragment getItem(int i) {
Fragment fragment = null;
switch (i) {
case 0: fragment = new StreamingFragment();
break;
case 1: fragment = new DownloadFragment();
break;
case 2: fragment = new SettingsFragment();
break;
}
return fragment;
}
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
@Override
public int getCount() {
return 3;
}
SharedPreferences.Editor editor = settings.edit();
editor.putString("drmServer", WidevineDrm.Settings.DRM_SERVER_URI);
editor.putString("deviceId", WidevineDrm.Settings.DEVICE_ID);
editor.putString("portalId", WidevineDrm.Settings.PORTAL_NAME);
editor.putString("contentPage", SettingsActivity.CONTENT_PAGE);
// Commit the edits!
editor.commit();
@Override
public CharSequence getPageTitle(int position) {
int tabNameIds[] = {R.string.streaming, R.string.downloads, R.string.settings};
return context.getResources().getText(tabNameIds[position]);
}
}
// Instances of this class are fragments representing a single
// object in our collection.
class DemoObjectFragment extends Fragment {
public static final String ARG_OBJECT = "object";
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
// The last two arguments ensure LayoutParams are inflated
// properly.
View rootView = inflater.inflate(R.layout.empty, container, false);
return rootView;
}
}