Merge branch 'master' into develop
This commit is contained in:
commit
8d2df1afa1
|
@ -22,8 +22,8 @@ android {
|
||||||
// "1.2.3-SNAPSHOT" -> 1020300
|
// "1.2.3-SNAPSHOT" -> 1020300
|
||||||
// "1.2.3-RC4" -> 1020304
|
// "1.2.3-RC4" -> 1020304
|
||||||
// "1.2.3" -> 1020395
|
// "1.2.3" -> 1020395
|
||||||
versionCode 2000395
|
versionCode 2010002
|
||||||
versionName "2.0.3"
|
versionName "2.1.0-RC2"
|
||||||
|
|
||||||
multiDexEnabled false
|
multiDexEnabled false
|
||||||
vectorDrawables.useSupportLibrary true
|
vectorDrawables.useSupportLibrary true
|
||||||
|
|
|
@ -16,6 +16,7 @@ import android.view.KeyEvent;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.EditText;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
@ -542,6 +543,11 @@ public class MainActivity extends CastEnabledActivity {
|
||||||
//Hardware keyboard support
|
//Hardware keyboard support
|
||||||
@Override
|
@Override
|
||||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
||||||
|
View currentFocus = getCurrentFocus();
|
||||||
|
if (currentFocus instanceof EditText) {
|
||||||
|
return super.onKeyUp(keyCode, event);
|
||||||
|
}
|
||||||
|
|
||||||
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
|
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
|
||||||
Integer customKeyCode = null;
|
Integer customKeyCode = null;
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ import android.view.KeyEvent;
|
||||||
import android.view.animation.AlphaAnimation;
|
import android.view.animation.AlphaAnimation;
|
||||||
import android.view.animation.AnimationSet;
|
import android.view.animation.AnimationSet;
|
||||||
import android.view.animation.ScaleAnimation;
|
import android.view.animation.ScaleAnimation;
|
||||||
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
|
||||||
import androidx.appcompat.view.menu.ActionMenuItem;
|
import androidx.appcompat.view.menu.ActionMenuItem;
|
||||||
|
@ -489,6 +490,11 @@ public class VideoplayerActivity extends MediaplayerActivity {
|
||||||
//Hardware keyboard support
|
//Hardware keyboard support
|
||||||
@Override
|
@Override
|
||||||
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
||||||
|
View currentFocus = getCurrentFocus();
|
||||||
|
if (currentFocus instanceof EditText) {
|
||||||
|
return super.onKeyUp(keyCode, event);
|
||||||
|
}
|
||||||
|
|
||||||
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
|
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
|
||||||
|
|
||||||
switch (keyCode) {
|
switch (keyCode) {
|
||||||
|
|
|
@ -88,7 +88,9 @@ public class AddFeedFragment extends Fragment {
|
||||||
intentGetContentAction.setType("*/*");
|
intentGetContentAction.setType("*/*");
|
||||||
startActivityForResult(intentGetContentAction, REQUEST_CODE_CHOOSE_OPML_IMPORT_PATH);
|
startActivityForResult(intentGetContentAction, REQUEST_CODE_CHOOSE_OPML_IMPORT_PATH);
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
Log.e(TAG, "No activity found. Should never happen...");
|
e.printStackTrace();
|
||||||
|
((MainActivity) getActivity())
|
||||||
|
.showSnackbarAbovePlayer(R.string.unable_to_start_system_file_manager, Snackbar.LENGTH_LONG);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
root.findViewById(R.id.btn_add_local_folder).setOnClickListener(v -> {
|
root.findViewById(R.id.btn_add_local_folder).setOnClickListener(v -> {
|
||||||
|
@ -100,7 +102,9 @@ public class AddFeedFragment extends Fragment {
|
||||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||||
startActivityForResult(intent, REQUEST_CODE_ADD_LOCAL_FOLDER);
|
startActivityForResult(intent, REQUEST_CODE_ADD_LOCAL_FOLDER);
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
Log.e(TAG, "No activity found. Should never happen...");
|
e.printStackTrace();
|
||||||
|
((MainActivity) getActivity())
|
||||||
|
.showSnackbarAbovePlayer(R.string.unable_to_start_system_file_manager, Snackbar.LENGTH_LONG);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (Build.VERSION.SDK_INT < 21) {
|
if (Build.VERSION.SDK_INT < 21) {
|
||||||
|
|
|
@ -176,7 +176,7 @@ public class DownloadLogFragment extends ListFragment {
|
||||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||||
if (!super.onOptionsItemSelected(item)) {
|
if (!super.onOptionsItemSelected(item)) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.clear_history_item:
|
case R.id.clear_logs_item:
|
||||||
DBWriter.clearDownloadLog();
|
DBWriter.clearDownloadLog();
|
||||||
return true;
|
return true;
|
||||||
case R.id.refresh_item:
|
case R.id.refresh_item:
|
||||||
|
|
|
@ -90,7 +90,6 @@ public class OnlineSearchFragment extends Fragment {
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
// Inflate the layout for this fragment
|
// Inflate the layout for this fragment
|
||||||
View root = inflater.inflate(R.layout.fragment_itunes_search, container, false);
|
View root = inflater.inflate(R.layout.fragment_itunes_search, container, false);
|
||||||
setupToolbar(root.findViewById(R.id.toolbar));
|
|
||||||
root.findViewById(R.id.spinner_country).setVisibility(INVISIBLE);
|
root.findViewById(R.id.spinner_country).setVisibility(INVISIBLE);
|
||||||
gridView = root.findViewById(R.id.gridView);
|
gridView = root.findViewById(R.id.gridView);
|
||||||
adapter = new ItunesAdapter(getActivity(), new ArrayList<>());
|
adapter = new ItunesAdapter(getActivity(), new ArrayList<>());
|
||||||
|
@ -110,6 +109,7 @@ public class OnlineSearchFragment extends Fragment {
|
||||||
txtvEmpty = root.findViewById(android.R.id.empty);
|
txtvEmpty = root.findViewById(android.R.id.empty);
|
||||||
TextView txtvPoweredBy = root.findViewById(R.id.search_powered_by);
|
TextView txtvPoweredBy = root.findViewById(R.id.search_powered_by);
|
||||||
txtvPoweredBy.setText(getString(R.string.search_powered_by, searchProvider.getName()));
|
txtvPoweredBy.setText(getString(R.string.search_powered_by, searchProvider.getName()));
|
||||||
|
setupToolbar(root.findViewById(R.id.toolbar));
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
We are proud to release version 2.0 with a new logo and refreshed user interface.
|
This is a beta release for AntennaPod 2.1.0
|
||||||
Thank you to 6420 users who participated in the vote for the new logo!
|
|
||||||
|
|
||||||
- Support for chapter images (only new episodes, by @ByteHamster)
|
- A long-standing wish of many: playing local files! In the 'Add podcast' screen simply tap 'Add local folder' and select a location on your phone! (@ByteHamster, @igoralmeida & @damoasda)
|
||||||
- Skip intro and ending per feed (by @tonytamsf)
|
- Pick a country for the 'Discover' screen (@tonytamsf)
|
||||||
- Option to show notifications after episodes have been auto-downloaded (by @shortspider)
|
- Keyboard shortcuts (@asdoi)
|
||||||
- Bug fixes and improvements (by @ebraminio, @tonytamsf, @JessieVela, @ByteHamster and more)
|
- Search the PodcastIndex.org database (@edwinhere)
|
||||||
|
- Pull to refresh (@asdoi)
|
||||||
|
- Playback speed & filter dialogs (@ByteHamster & @bws9000)
|
||||||
|
- Smooth sleep timer volume (@olivoto)
|
||||||
|
|
|
@ -114,7 +114,7 @@
|
||||||
android:title="@string/pref_skip_keeps_episodes_title"/>
|
android:title="@string/pref_skip_keeps_episodes_title"/>
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/media_player">
|
<PreferenceCategory android:title="@string/experimental_pref">
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:defaultValue="exoplayer"
|
android:defaultValue="exoplayer"
|
||||||
android:entries="@array/media_player_options"
|
android:entries="@array/media_player_options"
|
||||||
|
@ -122,9 +122,6 @@
|
||||||
android:title="@string/media_player"
|
android:title="@string/media_player"
|
||||||
android:summary="@string/pref_media_player_message"
|
android:summary="@string/pref_media_player_message"
|
||||||
android:entryValues="@array/media_player_values"/>
|
android:entryValues="@array/media_player_values"/>
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/experimental_pref">
|
|
||||||
<SwitchPreferenceCompat
|
<SwitchPreferenceCompat
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package de.danoeh.antennapod.core.feed.util;
|
package de.danoeh.antennapod.core.feed.util;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
import de.danoeh.antennapod.core.feed.Feed;
|
import de.danoeh.antennapod.core.feed.Feed;
|
||||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||||
|
@ -14,6 +15,7 @@ import static de.danoeh.antennapod.core.feed.FeedPreferences.SPEED_USE_GLOBAL;
|
||||||
* Utility class to use the appropriate playback speed based on {@link PlaybackPreferences}
|
* Utility class to use the appropriate playback speed based on {@link PlaybackPreferences}
|
||||||
*/
|
*/
|
||||||
public final class PlaybackSpeedUtils {
|
public final class PlaybackSpeedUtils {
|
||||||
|
private static final String TAG = "PlaybackSpeedUtils";
|
||||||
|
|
||||||
private PlaybackSpeedUtils() {
|
private PlaybackSpeedUtils() {
|
||||||
}
|
}
|
||||||
|
@ -33,8 +35,10 @@ public final class PlaybackSpeedUtils {
|
||||||
FeedItem item = ((FeedMedia) media).getItem();
|
FeedItem item = ((FeedMedia) media).getItem();
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
Feed feed = item.getFeed();
|
Feed feed = item.getFeed();
|
||||||
if (feed != null) {
|
if (feed != null && feed.getPreferences() != null) {
|
||||||
playbackSpeed = feed.getPreferences().getFeedPlaybackSpeed();
|
playbackSpeed = feed.getPreferences().getFeedPlaybackSpeed();
|
||||||
|
} else {
|
||||||
|
Log.d(TAG, "Can not get feed specific playback speed: " + feed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -517,11 +517,12 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe(
|
.subscribe(
|
||||||
playableLoaded -> {
|
playableLoaded -> {
|
||||||
mediaPlayer.playMediaObject(playable, stream, startWhenPrepared,
|
mediaPlayer.playMediaObject(playableLoaded, stream, startWhenPrepared,
|
||||||
prepareImmediately);
|
prepareImmediately);
|
||||||
addPlayableToQueue(playable);
|
addPlayableToQueue(playableLoaded);
|
||||||
}, error -> {
|
}, error -> {
|
||||||
Log.d(TAG, "Playable was not found. Stopping service.");
|
Log.d(TAG, "Playable was not found. Stopping service.");
|
||||||
|
error.printStackTrace();
|
||||||
stateManager.stopService();
|
stateManager.stopService();
|
||||||
});
|
});
|
||||||
return Service.START_NOT_STICKY;
|
return Service.START_NOT_STICKY;
|
||||||
|
@ -729,6 +730,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
|
||||||
addPlayableToQueue(playable);
|
addPlayableToQueue(playable);
|
||||||
}, error -> {
|
}, error -> {
|
||||||
Log.d(TAG, "Playable was not loaded from preferences. Stopping service.");
|
Log.d(TAG, "Playable was not loaded from preferences. Stopping service.");
|
||||||
|
error.printStackTrace();
|
||||||
stateManager.stopService();
|
stateManager.stopService();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -236,7 +236,7 @@
|
||||||
<string-array name="media_player_options">
|
<string-array name="media_player_options">
|
||||||
<item>@string/media_player_builtin</item>
|
<item>@string/media_player_builtin</item>
|
||||||
<item>@string/media_player_sonic</item>
|
<item>@string/media_player_sonic</item>
|
||||||
<item>@string/media_player_exoplayer</item>
|
<item>@string/media_player_exoplayer_recommended</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="media_player_values">
|
<string-array name="media_player_values">
|
||||||
|
|
|
@ -501,7 +501,7 @@
|
||||||
<string name="pref_enqueue_downloaded_summary">Add downloaded episodes to the queue</string>
|
<string name="pref_enqueue_downloaded_summary">Add downloaded episodes to the queue</string>
|
||||||
<string name="media_player_builtin">Built-in Android player</string>
|
<string name="media_player_builtin">Built-in Android player</string>
|
||||||
<string name="media_player_sonic" translatable="false">Sonic Media Player</string>
|
<string name="media_player_sonic" translatable="false">Sonic Media Player</string>
|
||||||
<string name="media_player_exoplayer" translatable="false">ExoPlayer</string>
|
<string name="media_player_exoplayer_recommended">ExoPlayer (recommended)</string>
|
||||||
<string name="media_player_switch_to_exoplayer">Switch to ExoPlayer</string>
|
<string name="media_player_switch_to_exoplayer">Switch to ExoPlayer</string>
|
||||||
<string name="media_player_switched_to_exoplayer">Switched to ExoPlayer.</string>
|
<string name="media_player_switched_to_exoplayer">Switched to ExoPlayer.</string>
|
||||||
<string name="pref_skip_silence_title">Skip Silence in Audio</string>
|
<string name="pref_skip_silence_title">Skip Silence in Audio</string>
|
||||||
|
@ -739,6 +739,7 @@
|
||||||
<string name="reconnect_local_folder">Re-connect local folder</string>
|
<string name="reconnect_local_folder">Re-connect local folder</string>
|
||||||
<string name="reconnect_local_folder_warning">In case of permission denials, you can use this to re-connect to the exact same folder. Do not select another folder.</string>
|
<string name="reconnect_local_folder_warning">In case of permission denials, you can use this to re-connect to the exact same folder. Do not select another folder.</string>
|
||||||
<string name="local_feed_description">This virtual podcast was created by adding a folder to AntennaPod.</string>
|
<string name="local_feed_description">This virtual podcast was created by adding a folder to AntennaPod.</string>
|
||||||
|
<string name="unable_to_start_system_file_manager">Unable to start system file manager</string>
|
||||||
|
|
||||||
<string name="filter">Filter</string>
|
<string name="filter">Filter</string>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue