Commit 317842a6 by andrewlewis Committed by Oliver Woodman

Use expandable headers in the sample chooser.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=112149442
parent 2690f569
...@@ -25,12 +25,15 @@ import android.os.Bundle; ...@@ -25,12 +25,15 @@ import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.BaseExpandableListAdapter;
import android.widget.AdapterView.OnItemClickListener; import android.widget.ExpandableListView;
import android.widget.ArrayAdapter; import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ListView;
import android.widget.TextView; import android.widget.TextView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/** /**
* An activity for selecting from a number of samples. * An activity for selecting from a number of samples.
*/ */
...@@ -40,41 +43,46 @@ public class SampleChooserActivity extends Activity { ...@@ -40,41 +43,46 @@ public class SampleChooserActivity extends Activity {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.sample_chooser_activity); setContentView(R.layout.sample_chooser_activity);
final List<SampleGroup> sampleGroups = new ArrayList<>();
ListView sampleList = (ListView) findViewById(R.id.sample_list); SampleGroup group = new SampleGroup("YouTube DASH");
final SampleAdapter sampleAdapter = new SampleAdapter(this); group.addAll(Samples.YOUTUBE_DASH_MP4);
group.addAll(Samples.YOUTUBE_DASH_WEBM);
sampleAdapter.add(new Header("YouTube DASH")); sampleGroups.add(group);
sampleAdapter.addAll((Object[]) Samples.YOUTUBE_DASH_MP4); group = new SampleGroup("Widevine DASH Policy Tests (GTS)");
sampleAdapter.addAll((Object[]) Samples.YOUTUBE_DASH_WEBM); group.addAll(Samples.WIDEVINE_GTS);
sampleAdapter.add(new Header("Widevine DASH Policy Tests (GTS)")); sampleGroups.add(group);
sampleAdapter.addAll((Object[]) Samples.WIDEVINE_GTS); group = new SampleGroup("Widevine HDCP Capabilities Tests");
sampleAdapter.add(new Header("Widevine HDCP Capabilities Tests")); group.addAll(Samples.WIDEVINE_HDCP);
sampleAdapter.addAll((Object[]) Samples.WIDEVINE_HDCP); sampleGroups.add(group);
sampleAdapter.add(new Header("Widevine DASH: MP4,H264")); group = new SampleGroup("Widevine DASH: MP4,H264");
sampleAdapter.addAll((Object[]) Samples.WIDEVINE_H264_MP4_CLEAR); group.addAll(Samples.WIDEVINE_H264_MP4_CLEAR);
sampleAdapter.addAll((Object[]) Samples.WIDEVINE_H264_MP4_SECURE); group.addAll(Samples.WIDEVINE_H264_MP4_SECURE);
sampleAdapter.add(new Header("Widevine DASH: WebM,VP9")); sampleGroups.add(group);
sampleAdapter.addAll((Object[]) Samples.WIDEVINE_VP9_WEBM_CLEAR); group = new SampleGroup("Widevine DASH: WebM,VP9");
sampleAdapter.addAll((Object[]) Samples.WIDEVINE_VP9_WEBM_SECURE); group.addAll(Samples.WIDEVINE_VP9_WEBM_CLEAR);
sampleAdapter.add(new Header("Widevine DASH: MP4,H265")); group.addAll(Samples.WIDEVINE_VP9_WEBM_SECURE);
sampleAdapter.addAll((Object[]) Samples.WIDEVINE_H265_MP4_CLEAR); sampleGroups.add(group);
sampleAdapter.addAll((Object[]) Samples.WIDEVINE_H265_MP4_SECURE); group = new SampleGroup("Widevine DASH: MP4,H265");
sampleAdapter.add(new Header("SmoothStreaming")); group.addAll(Samples.WIDEVINE_H265_MP4_CLEAR);
sampleAdapter.addAll((Object[]) Samples.SMOOTHSTREAMING); group.addAll(Samples.WIDEVINE_H265_MP4_SECURE);
sampleAdapter.add(new Header("HLS")); sampleGroups.add(group);
sampleAdapter.addAll((Object[]) Samples.HLS); group = new SampleGroup("SmoothStreaming");
sampleAdapter.add(new Header("Misc")); group.addAll(Samples.SMOOTHSTREAMING);
sampleAdapter.addAll((Object[]) Samples.MISC); sampleGroups.add(group);
group = new SampleGroup("HLS");
sampleList.setAdapter(sampleAdapter); group.addAll(Samples.HLS);
sampleList.setOnItemClickListener(new OnItemClickListener() { sampleGroups.add(group);
group = new SampleGroup("Misc");
group.addAll(Samples.MISC);
sampleGroups.add(group);
ExpandableListView sampleList = (ExpandableListView) findViewById(R.id.sample_list);
sampleList.setAdapter(new SampleAdapter(this, sampleGroups));
sampleList.setOnChildClickListener(new OnChildClickListener() {
@Override @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { public boolean onChildClick(ExpandableListView parent, View view, int groupPosition,
Object item = sampleAdapter.getItem(position); int childPosition, long id) {
if (item instanceof Sample) { onSampleSelected(sampleGroups.get(groupPosition).samples.get(childPosition));
onSampleSelected((Sample) item); return true;
}
} }
}); });
} }
...@@ -88,49 +96,94 @@ public class SampleChooserActivity extends Activity { ...@@ -88,49 +96,94 @@ public class SampleChooserActivity extends Activity {
startActivity(mpdIntent); startActivity(mpdIntent);
} }
private static class SampleAdapter extends ArrayAdapter<Object> { private static final class SampleAdapter extends BaseExpandableListAdapter {
private final Context context;
private final List<SampleGroup> sampleGroups;
public SampleAdapter(Context context, List<SampleGroup> sampleGroups) {
this.context = context;
this.sampleGroups = sampleGroups;
}
public SampleAdapter(Context context) { @Override
super(context, 0); public Sample getChild(int groupPosition, int childPosition) {
return getGroup(groupPosition).samples.get(childPosition);
} }
@Override @Override
public View getView(int position, View convertView, ViewGroup parent) { public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
View view = convertView; View view = convertView;
if (view == null) { if (view == null) {
int layoutId = getItemViewType(position) == 1 ? android.R.layout.simple_list_item_1 view = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent,
: R.layout.sample_chooser_inline_header; false);
view = LayoutInflater.from(getContext()).inflate(layoutId, null, false);
} }
Object item = getItem(position); ((TextView) view).setText(getChild(groupPosition, childPosition).name);
String name = null; return view;
if (item instanceof Sample) { }
name = ((Sample) item).name;
} else if (item instanceof Header) { @Override
name = ((Header) item).name; public int getChildrenCount(int groupPosition) {
return getGroup(groupPosition).samples.size();
}
@Override
public SampleGroup getGroup(int groupPosition) {
return sampleGroups.get(groupPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
View view = convertView;
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.sample_chooser_inline_header, parent,
false);
} }
((TextView) view).setText(name); ((TextView) view).setText(getGroup(groupPosition).title);
return view; return view;
} }
@Override @Override
public int getItemViewType(int position) { public int getGroupCount() {
return (getItem(position) instanceof Sample) ? 1 : 0; return sampleGroups.size();
} }
@Override @Override
public int getViewTypeCount() { public boolean hasStableIds() {
return 2; return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
} }
} }
private static class Header { private static final class SampleGroup {
public final String title;
public final List<Sample> samples;
public final String name; public SampleGroup(String title) {
this.title = title;
this.samples = new ArrayList<>();
}
public Header(String name) { public void addAll(Sample[] samples) {
this.name = name; Collections.addAll(this.samples, samples);
} }
} }
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<ListView android:id="@+id/sample_list" <ExpandableListView android:id="@+id/sample_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent"/>
......
...@@ -20,6 +20,10 @@ ...@@ -20,6 +20,10 @@
android:textAllCaps="true" android:textAllCaps="true"
android:textColor="@android:color/white" android:textColor="@android:color/white"
android:textSize="14sp" android:textSize="14sp"
android:padding="8dp" android:paddingStart="?android:attr/expandableListPreferredItemPaddingLeft"
android:focusable="true" android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
android:paddingRight="8dp"
android:paddingEnd="8dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:background="#339999FF"/> android:background="#339999FF"/>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment