Webview in AudioPlayerActivity now saves and restores its scroll
position
This commit is contained in:
parent
16b049faa9
commit
aedead0106
|
@ -172,9 +172,11 @@ public class AudioplayerActivity extends MediaplayerActivity {
|
|||
-1);
|
||||
String playableId = prefs.getString(PREF_PLAYABLE_ID, "");
|
||||
|
||||
if (savedPosition != -1 && controller != null
|
||||
if (savedPosition != -1
|
||||
&& controller != null
|
||||
&& controller.getMedia() != null
|
||||
&& controller.getMedia().getIdentifier().toString().equals(playableId)) {
|
||||
&& controller.getMedia().getIdentifier().toString()
|
||||
.equals(playableId)) {
|
||||
switchToFragment(savedPosition);
|
||||
return true;
|
||||
} else if (controller == null || controller.getMedia() == null) {
|
||||
|
@ -265,7 +267,7 @@ public class AudioplayerActivity extends MediaplayerActivity {
|
|||
case POS_DESCR:
|
||||
if (descriptionFragment == null) {
|
||||
descriptionFragment = ItemDescriptionFragment
|
||||
.newInstance(media);
|
||||
.newInstance(media, true);
|
||||
}
|
||||
currentlyShownFragment = descriptionFragment;
|
||||
break;
|
||||
|
|
|
@ -99,7 +99,7 @@ public class ItemviewActivity extends SherlockFragmentActivity {
|
|||
FragmentTransaction fragmentTransaction = fragmentManager
|
||||
.beginTransaction();
|
||||
ItemDescriptionFragment fragment = ItemDescriptionFragment
|
||||
.newInstance(item);
|
||||
.newInstance(item, false);
|
||||
fragmentTransaction.replace(R.id.description_fragment, fragment);
|
||||
fragmentTransaction.commit();
|
||||
}
|
||||
|
@ -127,7 +127,7 @@ public class ItemviewActivity extends SherlockFragmentActivity {
|
|||
DownloadRequestErrorDialogCreator.newRequestErrorDialog(this,
|
||||
e.getMessage());
|
||||
}
|
||||
invalidateOptionsMenu();
|
||||
supportInvalidateOptionsMenu();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,9 @@ import android.app.Activity;
|
|||
import android.content.ClipData;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Picture;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
|
@ -21,8 +23,10 @@ import android.view.Menu;
|
|||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.webkit.WebChromeClient;
|
||||
import android.webkit.WebSettings.LayoutAlgorithm;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebView.PictureListener;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.actionbarsherlock.app.SherlockFragment;
|
||||
|
@ -40,10 +44,16 @@ import de.danoeh.antennapod.util.playback.Playable;
|
|||
public class ItemDescriptionFragment extends SherlockFragment {
|
||||
|
||||
private static final String TAG = "ItemDescriptionFragment";
|
||||
|
||||
private static final String PREF = "ItemDescriptionFragmentPrefs";
|
||||
private static final String PREF_SCROLL_Y = "prefScrollY";
|
||||
private static final String PREF_PLAYABLE_ID = "prefPlayableId";
|
||||
|
||||
private static final String ARG_PLAYABLE = "arg.playable";
|
||||
|
||||
private static final String ARG_FEED_ID = "arg.feedId";
|
||||
private static final String ARG_FEED_ITEM_ID = "arg.feeditemId";
|
||||
private static final String ARG_SAVE_STATE = "arg.saveState";
|
||||
|
||||
private WebView webvDescription;
|
||||
private Playable media;
|
||||
|
@ -57,19 +67,29 @@ public class ItemDescriptionFragment extends SherlockFragment {
|
|||
/** URL that was selected via long-press. */
|
||||
private String selectedURL;
|
||||
|
||||
public static ItemDescriptionFragment newInstance(Playable media) {
|
||||
/**
|
||||
* True if Fragment should save its state (e.g. scrolling position) in a
|
||||
* shared preference.
|
||||
*/
|
||||
private boolean saveState;
|
||||
|
||||
public static ItemDescriptionFragment newInstance(Playable media,
|
||||
boolean saveState) {
|
||||
ItemDescriptionFragment f = new ItemDescriptionFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putParcelable(ARG_PLAYABLE, media);
|
||||
args.putBoolean(ARG_SAVE_STATE, saveState);
|
||||
f.setArguments(args);
|
||||
return f;
|
||||
}
|
||||
|
||||
public static ItemDescriptionFragment newInstance(FeedItem item) {
|
||||
public static ItemDescriptionFragment newInstance(FeedItem item,
|
||||
boolean saveState) {
|
||||
ItemDescriptionFragment f = new ItemDescriptionFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putLong(ARG_FEED_ID, item.getFeed().getId());
|
||||
args.putLong(ARG_FEED_ITEM_ID, item.getId());
|
||||
args.putBoolean(ARG_SAVE_STATE, saveState);
|
||||
f.setArguments(args);
|
||||
return f;
|
||||
}
|
||||
|
@ -138,6 +158,7 @@ public class ItemDescriptionFragment extends SherlockFragment {
|
|||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Creating fragment");
|
||||
Bundle args = getArguments();
|
||||
saveState = args.getBoolean(ARG_SAVE_STATE, false);
|
||||
if (args.containsKey(ARG_PLAYABLE)) {
|
||||
media = args.getParcelable(ARG_PLAYABLE);
|
||||
} else if (args.containsKey(ARG_FEED_ID)
|
||||
|
@ -244,6 +265,7 @@ public class ItemDescriptionFragment extends SherlockFragment {
|
|||
}
|
||||
};
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@SuppressLint("NewApi")
|
||||
@Override
|
||||
public boolean onContextItemSelected(MenuItem item) {
|
||||
|
@ -314,6 +336,7 @@ public class ItemDescriptionFragment extends SherlockFragment {
|
|||
|
||||
String data;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
protected void onPostExecute(Void result) {
|
||||
super.onPostExecute(result);
|
||||
|
@ -327,6 +350,16 @@ public class ItemDescriptionFragment extends SherlockFragment {
|
|||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Webview loaded");
|
||||
webViewLoader = null;
|
||||
webvDescription.setPictureListener(new PictureListener() {
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public void onNewPicture(WebView view, Picture picture) {
|
||||
restoreFromPreference();
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -364,4 +397,56 @@ public class ItemDescriptionFragment extends SherlockFragment {
|
|||
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
savePreference();
|
||||
}
|
||||
|
||||
private void savePreference() {
|
||||
if (saveState) {
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Saving preferences");
|
||||
SharedPreferences prefs = getActivity().getSharedPreferences(PREF,
|
||||
Activity.MODE_PRIVATE);
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
if (media != null && webvDescription != null) {
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG,
|
||||
"Saving scroll position: "
|
||||
+ webvDescription.getScrollY());
|
||||
editor.putInt(PREF_SCROLL_Y, webvDescription.getScrollY());
|
||||
editor.putString(PREF_PLAYABLE_ID, media.getIdentifier()
|
||||
.toString());
|
||||
} else {
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG,
|
||||
"savePreferences was called while media or webview was null");
|
||||
editor.putInt(PREF_SCROLL_Y, -1);
|
||||
editor.putString(PREF_PLAYABLE_ID, "");
|
||||
}
|
||||
editor.commit();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean restoreFromPreference() {
|
||||
if (saveState) {
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Restoring from preferences");
|
||||
SharedPreferences prefs = getActivity().getSharedPreferences(PREF,
|
||||
Activity.MODE_PRIVATE);
|
||||
String id = prefs.getString(PREF_PLAYABLE_ID, "");
|
||||
int scrollY = prefs.getInt(PREF_SCROLL_Y, -1);
|
||||
if (scrollY != -1 && media != null
|
||||
&& id.equals(media.getIdentifier().toString())
|
||||
&& webvDescription != null) {
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Restored scroll Position: " + scrollY);
|
||||
webvDescription.scrollTo(webvDescription.getScrollX(), scrollY);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue