Skip to content

Commit

Permalink
[new]add seekbar
Browse files Browse the repository at this point in the history
  • Loading branch information
shaobin0604 committed Oct 18, 2010
1 parent 1d189c3 commit 1d757e0
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 43 deletions.
4 changes: 4 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
Pocket VOA - An online/offline reader for Voice of America news program.

Version 1.2.5
- New: Add SeekBar for local audio


Version 1.2.4 [19/09/2010]
- Fix: Cannot view article due to data source content format changed.
- New: Add category "Go English", "Word Master", "American Cafe", "Business Etiquette", "Sports English", "Words And Idioms".
Expand Down
10 changes: 9 additions & 1 deletion res/layout/show.xml
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,17 @@
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"
android:max="1000"
android:progress="0"
android:secondaryProgress="0" />
<SeekBar
android:id="@+id/sb_audio"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="1000"
android:progress="0"
android:secondaryProgress="0"/>

</LinearLayout>
<ImageButton
android:id="@+id/btn_pause"
Expand Down
4 changes: 4 additions & 0 deletions src/cn/yo2/aquarium/pocketvoa/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,8 @@ public void onConfigurationChanged(Configuration newConfig) {

@Override
protected void onSaveInstanceState(Bundle outState) {
dismissDialog(DLG_PROGRESS);

super.onSaveInstanceState(outState);
//TODO more state to save. current list, tab state, selection
Log.d(CLASSTAG, "[onSaveInstanceState]");
Expand All @@ -370,6 +372,8 @@ protected void onRestoreInstanceState(Bundle savedInstanceState) {
mCurrArticle = savedInstanceState.getParcelable(KEY_SAVED_ARTICLE);
mLastCommand = savedInstanceState.getInt(KEY_SAVED_COMMAND);
mLastError = savedInstanceState.getInt(KEY_SAVED_ERROR);

dismissDialog(DLG_PROGRESS);
}

/** Called when the activity is first created. */
Expand Down
41 changes: 22 additions & 19 deletions src/cn/yo2/aquarium/pocketvoa/MediaPlaybackService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package cn.yo2.aquarium.pocketvoa;

import java.io.IOException;
import java.lang.ref.WeakReference;

import android.app.Notification;
import android.app.NotificationManager;
Expand Down Expand Up @@ -693,58 +694,60 @@ private int getState() {

private Article mArticle;

private final IMediaPlaybackService.Stub mBinder = new IMediaPlaybackService.Stub()
{
private final IMediaPlaybackService.Stub mBinder = new ServiceStub(this);

static class ServiceStub extends IMediaPlaybackService.Stub {
WeakReference<MediaPlaybackService> mService;

ServiceStub(MediaPlaybackService service) {
mService = new WeakReference<MediaPlaybackService>(service);
}

@Override
public Article getArticle(){
return MediaPlaybackService.this.mArticle;
return mService.get().mArticle;
}

@Override
public int getState() {
return MediaPlaybackService.this.getState();
return mService.get().getState();
}

@Override
public boolean isInitialized() throws RemoteException {
return MediaPlaybackService.this.isInitialized();
return mService.get().isInitialized();
}


@Override
public void init() throws RemoteException {
MediaPlaybackService.this.init();
mService.get().init();
}



@Override
public void setArticle(Article article) {
MediaPlaybackService.this.mArticle = article;
mService.get().mArticle = article;
}



public boolean isPlaying() {
return MediaPlaybackService.this.isPlaying();
return mService.get().isPlaying();
}
public void stop() {
MediaPlaybackService.this.stop();
mService.get().stop();
}
public void pause() {
MediaPlaybackService.this.pause();
mService.get().pause();
}
public void play() {
MediaPlaybackService.this.play();
mService.get().play();
}
public long position() {
return MediaPlaybackService.this.position();
return mService.get().position();
}
public long duration() {
return MediaPlaybackService.this.duration();
return mService.get().duration();
}
public long seek(long pos) {
return MediaPlaybackService.this.seek(pos);
return mService.get().seek(pos);
}
};
}
109 changes: 86 additions & 23 deletions src/cn/yo2/aquarium/pocketvoa/ShowActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import android.os.IBinder;
import android.os.Message;
import android.os.RemoteException;
import android.os.SystemClock;
import android.text.format.DateUtils;
import android.util.Log;
import android.view.Menu;
Expand All @@ -37,9 +38,11 @@
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;
import android.widget.SeekBar.OnSeekBarChangeListener;
import cn.yo2.aquarium.pocketvoa.lyric.LyricView;

//import com.admob.android.ads.AdView;
Expand Down Expand Up @@ -72,12 +75,11 @@ public class ShowActivity extends Activity {
private static final int MENU_REMOTE_TRANSLATION = Menu.FIRST + 1;
private static final int MENU_REMOTE_LYRIC = Menu.FIRST + 2;
private static final int MENU_REMOTE_DOWNLOAD = Menu.FIRST + 3;


private static final int MENU_LOCAL_ORIGINAL = Menu.FIRST + 4;
private static final int MENU_LOCAL_TRANSLATION = Menu.FIRST + 5;
private static final int MENU_LOCAL_LYRIC = Menu.FIRST + 6;

private static final int MENU_REMOTE_HOME = Menu.FIRST + 7;
private static final int MENU_LOCAL_HOME = Menu.FIRST + 8;

Expand Down Expand Up @@ -110,8 +112,6 @@ public class ShowActivity extends Activity {

private static final int PROGRESS_MAX = 1000;



private enum Error {
LoadRemotePageError, LoadLocalPageError, PlayRemoteAudioError, PlayLocalAudioError, DownloadAudioError, DownloadTextError,
}
Expand Down Expand Up @@ -285,12 +285,12 @@ private void doPauseResume() {

if (mService.isPlaying()) {
mService.pause();
refreshProgress();
refreshNow();
if (mCurrentView == VIEW_LYRIC)
stopRefreshLyric();
} else {
mService.play();
long next = refreshProgress();
long next = refreshNow();
queueNextRefreshProgress(next);

if (mCurrentView == VIEW_LYRIC) {
Expand All @@ -304,13 +304,15 @@ private void doPauseResume() {
mService.init();
mBtnPause.setEnabled(false);
}
}
}
} catch (RemoteException ex) {
ex.printStackTrace();
}
}

private void refreshLyric() {
if (mService == null)
return;
try {
long position = mService.position();
if (position < 0)
Expand Down Expand Up @@ -370,7 +372,8 @@ private boolean isRemote() {
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);

menu.add(MENU_REMOTE_GROUP, MENU_REMOTE_HOME, Menu.NONE, R.string.menu_main);
menu.add(MENU_REMOTE_GROUP, MENU_REMOTE_HOME, Menu.NONE,
R.string.menu_main);
menu.add(MENU_REMOTE_GROUP, MENU_REMOTE_ORIGINAL, Menu.NONE,
R.string.menu_original);
menu.add(MENU_REMOTE_GROUP, MENU_REMOTE_TRANSLATION, Menu.NONE,
Expand All @@ -380,7 +383,8 @@ public boolean onCreateOptionsMenu(Menu menu) {
menu.add(MENU_REMOTE_GROUP, MENU_REMOTE_DOWNLOAD, Menu.NONE,
R.string.menu_download);

menu.add(MENU_LOCAL_GROUP, MENU_LOCAL_HOME, Menu.NONE, R.string.menu_main);
menu.add(MENU_LOCAL_GROUP, MENU_LOCAL_HOME, Menu.NONE,
R.string.menu_main);
menu.add(MENU_LOCAL_GROUP, MENU_LOCAL_ORIGINAL, Menu.NONE,
R.string.menu_original);
menu.add(MENU_LOCAL_GROUP, MENU_LOCAL_TRANSLATION, Menu.NONE,
Expand Down Expand Up @@ -770,25 +774,27 @@ private void setupWidgets() {

mWebViewEn = (WebView) findViewById(R.id.webview_en);
mWebViewZh = (WebView) findViewById(R.id.webview_zh);

String fontSize = mApp.mSharedPreferences.getString(getString(R.string.prefs_key_font_size), getString(R.string.prefs_default_font_size));


String fontSize = mApp.mSharedPreferences.getString(
getString(R.string.prefs_key_font_size),
getString(R.string.prefs_default_font_size));

TextSize[] textSizeValues = WebSettings.TextSize.values();

WebSettings settingsEn = mWebViewEn.getSettings();
WebSettings settingsZh = mWebViewZh.getSettings();
for (int i = 0; i < textSizeValues.length; i++) {
TextSize textSize = textSizeValues[i];
if (textSize.toString().equalsIgnoreCase(fontSize)) {
settingsEn.setTextSize(textSize);
settingsZh.setTextSize(textSize);

break;
}
}
settingsEn.setSupportZoom(true);
settingsEn.setBuiltInZoomControls(true);

settingsZh.setSupportZoom(true);
settingsZh.setBuiltInZoomControls(true);

Expand All @@ -804,13 +810,56 @@ private void setupWidgets() {
mTvEllapsedTime = (TextView) findViewById(R.id.tv_ellapsed_time);
mTvTotalTime = (TextView) findViewById(R.id.tv_total_time);

mProgressBar = (ProgressBar) findViewById(R.id.pb_audio);
mProgressBar.setMax(PROGRESS_MAX);
ProgressBar progressBar = (ProgressBar) findViewById(R.id.pb_audio);
SeekBar seekBar = (SeekBar) findViewById(R.id.sb_audio);

if (!isRemote()) {
mProgressBar.setSecondaryProgress(PROGRESS_MAX);
if (isRemote()) {
progressBar.setVisibility(View.VISIBLE);
seekBar.setVisibility(View.GONE);

mProgressBar = progressBar;
} else {
progressBar.setVisibility(View.GONE);
seekBar.setVisibility(View.VISIBLE);
seekBar.setOnSeekBarChangeListener(mSeekListener);
seekBar.setSecondaryProgress(PROGRESS_MAX);
mProgressBar = seekBar;
}

mProgressBar.setMax(PROGRESS_MAX);
}

private long mLastSeekEventTime;
private boolean mFromTouch = false;

private OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {
public void onStartTrackingTouch(SeekBar bar) {
mLastSeekEventTime = 0;
mFromTouch = true;
}
public void onProgressChanged(SeekBar bar, int progress, boolean fromuser) {
if (!fromuser || (mService == null)) return;
long now = SystemClock.elapsedRealtime();
if ((now - mLastSeekEventTime) > 250) {
mLastSeekEventTime = now;
mPosOverride = mDuration * progress / 1000;
try {
mService.seek(mPosOverride);
} catch (RemoteException ex) {
}

// trackball event, allow progress updates
if (!mFromTouch) {
refreshNow();
mPosOverride = -1;
}
}
}
public void onStopTrackingTouch(SeekBar bar) {
mPosOverride = -1;
mFromTouch = false;
}
};

private View.OnClickListener mToolBarBtnOnClickListener = new View.OnClickListener() {

Expand Down Expand Up @@ -978,6 +1027,18 @@ public void onClick(DialogInterface dialog, int which) {
}
return super.onCreateDialog(id);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
dismissDialog(DLG_PROGRESS_SPIN);
super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
dismissDialog(DLG_PROGRESS_SPIN);
}

@Override
protected void onPrepareDialog(int id, Dialog dialog) {
Expand Down Expand Up @@ -1060,12 +1121,12 @@ public void onServiceConnected(ComponentName classname, IBinder obj) {
case MediaPlaybackService.STATE_PAUSED:
setPauseButtonImage();
updateTrackInfo();
long next = refreshProgress();
long next = refreshNow();
queueNextRefreshProgress(next);
break;
case MediaPlaybackService.STATE_PLAYBACK_COMPLETED:
setPauseButtonImage();
refreshProgress();
refreshNow();
break;
default:
break;
Expand Down Expand Up @@ -1124,9 +1185,11 @@ protected void onResume() {
@Override
protected void onStop() {
paused = true;

mHandler.removeMessages(REFRESH);
unregisterReceiver(mStatusListener);
Utils.unbindFromService(this);
mService = null;
super.onStop();
}

Expand Down Expand Up @@ -1156,7 +1219,7 @@ private void stopRefreshProgress() {
mHandler.removeMessages(REFRESH);
}

private long refreshProgress() {
private long refreshNow() {
if (mService == null)
return 500;
try {
Expand Down Expand Up @@ -1199,7 +1262,7 @@ public void handleMessage(Message msg) {
switch (msg.what) {

case REFRESH:
long next = refreshProgress();
long next = refreshNow();
queueNextRefreshProgress(next);
break;

Expand Down

0 comments on commit 1d757e0

Please sign in to comment.