Added landscape layout to audio player

This commit is contained in:
daniel oeh 2013-04-04 12:30:28 +02:00
parent 09191d734e
commit 582107c13c
8 changed files with 253 additions and 18 deletions

View File

@ -75,9 +75,7 @@
android:label="@string/downloads_label" />
<activity
android:name=".activity.AudioplayerActivity"
android:configChanges="keyboardHidden|orientation"
android:launchMode="singleTask"
android:screenOrientation="portrait" >
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -362,6 +360,7 @@
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data
android:path="de.danoeh.antennapod"
android:scheme="package" />

View File

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<FrameLayout
android:id="@+id/contentView"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5" >
</FrameLayout>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:background="?attr/non_transparent_background"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/navBar"
android:layout_width="fill_parent"
android:layout_height="60dp"
android:layout_alignParentTop="true" >
<ImageButton
android:id="@+id/butNavLeft"
android:layout_width="60dp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:background="?attr/borderless_button"
android:padding="4dp" />
<ImageButton
android:id="@+id/butNavRight"
android:layout_width="60dp"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:background="?attr/borderless_button"
android:padding="4dp" />
<TextView
android:id="@+id/txtvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:layout_toLeftOf="@id/butNavRight"
android:layout_toRightOf="@id/butNavLeft"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:maxLines="1"
android:textColor="?android:attr/textColorPrimary"
android:textSize="@dimen/text_size_medium"
android:textStyle="bold" />
<TextView
android:id="@+id/txtvFeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/txtvTitle"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_toLeftOf="@id/butNavRight"
android:layout_toRightOf="@id/butNavLeft"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:maxLines="1"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/text_size_small" />
</RelativeLayout>
<View
android:id="@+id/navBarDivider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@id/navBar"
android:background="@color/bright_blue" />
<RelativeLayout
android:id="@+id/player_control"
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_alignParentBottom="true"
android:background="?attr/overlay_background" >
<ImageButton
android:id="@+id/butPlay"
android:layout_width="80dp"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="?attr/borderless_button"
android:src="?attr/av_pause" />
<ImageButton
android:id="@+id/butRev"
android:layout_width="80dp"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/butPlay"
android:background="?attr/borderless_button"
android:src="?attr/av_rewind" />
<ImageButton
android:id="@+id/butFF"
android:layout_width="80dp"
android:layout_height="match_parent"
android:layout_toRightOf="@id/butPlay"
android:background="?attr/borderless_button"
android:src="?attr/av_fast_forward" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/playtime_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/player_control"
android:layout_alignParentLeft="true"
android:background="?attr/overlay_drawable" >
<TextView
android:id="@+id/txtvPosition"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:layout_marginTop="16dp"
android:text="@string/position_default_label"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/text_size_micro" />
<TextView
android:id="@+id/txtvLength"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_centerVertical="true"
android:layout_marginRight="8dp"
android:layout_marginTop="16dp"
android:text="@string/position_default_label"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/text_size_micro" />
<SeekBar
android:id="@+id/sbPosition"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="16dp"
android:layout_toLeftOf="@id/txtvLength"
android:layout_toRightOf="@id/txtvPosition"
android:max="500" />
</RelativeLayout>
</RelativeLayout>
</LinearLayout>

View File

@ -11,6 +11,7 @@
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:adjustViewBounds="true"
android:scaleType="centerInside" />

View File

@ -1,6 +1,7 @@
package de.danoeh.antennapod.activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@ -47,6 +48,8 @@ public class AudioplayerActivity extends MediaplayerActivity {
private Fragment currentlyShownFragment;
private int currentlyShownPosition = -1;
/** Saved and restored on orientation change. */
private int savedPosition = -1;
private TextView txtvTitle;
private TextView txtvFeed;
@ -54,6 +57,37 @@ public class AudioplayerActivity extends MediaplayerActivity {
private ImageButton butNavRight;
private void resetFragmentView() {
FragmentTransaction fT = getSupportFragmentManager().beginTransaction();
if (coverFragment != null) {
if (AppConfig.DEBUG)
Log.d(TAG, "Removing cover fragment");
fT.remove(coverFragment);
}
if (descriptionFragment != null) {
if (AppConfig.DEBUG)
Log.d(TAG, "Removing description fragment");
fT.remove(descriptionFragment);
}
if (chapterFragment != null) {
if (AppConfig.DEBUG)
Log.d(TAG, "Removing chapter fragment");
fT.remove(chapterFragment);
}
if (currentlyShownFragment != null) {
if (AppConfig.DEBUG)
Log.d(TAG, "Removing currently shown fragment");
fT.remove(currentlyShownFragment);
}
for (int i = 0; i < detachedFragments.length; i++) {
Fragment f = detachedFragments[i];
if (f != null) {
if (AppConfig.DEBUG)
Log.d(TAG, "Removing detached fragment");
fT.remove(f);
}
}
fT.commit();
currentlyShownFragment = null;
coverFragment = null;
descriptionFragment = null;
@ -65,7 +99,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
@Override
protected void onStop() {
super.onStop();
resetFragmentView();
if (AppConfig.DEBUG) Log.d(TAG, "onStop");
}
@ -77,6 +111,33 @@ public class AudioplayerActivity extends MediaplayerActivity {
detachedFragments = new Fragment[NUM_CONTENT_FRAGMENTS];
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("selectedPosition", currentlyShownPosition);
resetFragmentView();
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (AppConfig.DEBUG)
Log.d(TAG, "Restoring instance state");
if (savedInstanceState != null) {
int p = savedInstanceState.getInt("selectedPosition", -1);
if (p != -1) {
savedPosition = p;
switchToFragment(savedPosition);
}
}
}
@Override
protected void onResume() {
super.onResume();
@ -187,6 +248,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
ft.add(R.id.contentView, currentlyShownFragment);
}
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.disallowAddToBackStack();
ft.commit();
updateNavButtonDrawable();
}
@ -211,8 +273,8 @@ public class AudioplayerActivity extends MediaplayerActivity {
@Override
public void run() {
ImageLoader.getInstance().loadThumbnailBitmap(
media, butNavLeft);
ImageLoader.getInstance().loadThumbnailBitmap(media,
butNavLeft);
}
});
butNavRight.setImageDrawable(drawables.getDrawable(1));
@ -223,8 +285,8 @@ public class AudioplayerActivity extends MediaplayerActivity {
@Override
public void run() {
ImageLoader.getInstance().loadThumbnailBitmap(
media, butNavLeft);
ImageLoader.getInstance().loadThumbnailBitmap(media,
butNavLeft);
}
});
butNavRight.setImageDrawable(drawables.getDrawable(0));
@ -291,8 +353,13 @@ public class AudioplayerActivity extends MediaplayerActivity {
}
if (currentlyShownPosition == -1) {
if (savedPosition != -1) {
switchToFragment(savedPosition);
savedPosition = -1;
} else {
switchToFragment(POS_COVER);
}
}
if (currentlyShownFragment instanceof AudioplayerContentFragment) {
((AudioplayerContentFragment) currentlyShownFragment)
.onDataSetChanged(media);
@ -333,4 +400,9 @@ public class AudioplayerActivity extends MediaplayerActivity {
public void onDataSetChanged(Playable media);
}
@Override
protected int getContentViewResourceId() {
return R.layout.audioplayer_activity;
}
}

View File

@ -3,7 +3,6 @@ package de.danoeh.antennapod.activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.net.Uri;
import android.os.Bundle;
@ -331,13 +330,6 @@ public abstract class MediaplayerActivity extends SherlockFragmentActivity
controller.init();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// ignore orientation change
}
/**
* Called by 'handleStatus()' when the PlaybackService is in the
* AWAITING_VIDEO_SURFACE state.
@ -399,7 +391,7 @@ public abstract class MediaplayerActivity extends SherlockFragmentActivity
}
protected void setupGUI() {
setContentView(R.layout.mediaplayer_activity);
setContentView(getContentViewResourceId());
sbPosition = (SeekBar) findViewById(R.id.sbPosition);
txtvPosition = (TextView) findViewById(R.id.txtvPosition);
txtvLength = (TextView) findViewById(R.id.txtvLength);
@ -421,6 +413,8 @@ public abstract class MediaplayerActivity extends SherlockFragmentActivity
}
protected abstract int getContentViewResourceId();
void handleError(int errorCode) {
final AlertDialog.Builder errorDialog = new AlertDialog.Builder(this);
errorDialog.setTitle(R.string.error_label);

View File

@ -287,4 +287,9 @@ public class VideoplayerActivity extends MediaplayerActivity implements
videoOverlay.setVisibility(View.GONE);
}
@Override
protected int getContentViewResourceId() {
return R.layout.videoplayer_activity;
}
}