From d86a2a1977b8a27368956546d892e09c71a8963e Mon Sep 17 00:00:00 2001 From: Michael Scarito Date: Thu, 20 Nov 2014 14:14:10 -0800 Subject: Resume on headphone connect if paused by headphone disconnect --- .../core/service/playback/PlaybackService.java | 19 +++++++++++++++++++ .../service/playback/PlaybackServiceMediaPlayer.java | 4 ++++ 2 files changed, 23 insertions(+) (limited to 'core/src') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index a5560e3fb..0ff057a26 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -144,6 +144,10 @@ public class PlaybackService extends Service { * Is true if service has received a valid start command. */ public static boolean started = false; + /** + * Is true if the service was running, but paused due to headphone disconnect + */ + public static boolean headphonePause = false; private static final int NOTIFICATION_ID = 1; @@ -966,6 +970,7 @@ public class PlaybackService extends Service { private BroadcastReceiver headsetDisconnected = new BroadcastReceiver() { private static final String TAG = "headsetDisconnected"; private static final int UNPLUGGED = 0; + private static final int PLUGGED = 1; @Override public void onReceive(Context context, Intent intent) { @@ -978,6 +983,10 @@ public class PlaybackService extends Service { if (BuildConfig.DEBUG) Log.d(TAG, "Headset was unplugged during playback."); pauseIfPauseOnDisconnect(); + } else if (state == PLUGGED) { + if (BuildConfig.DEBUG) + Log.d(TAG, "Headset was plugged in during playback."); + unpauseIfPauseOnDisconnect(); } } else { Log.e(TAG, "Received invalid ACTION_HEADSET_PLUG intent"); @@ -1003,6 +1012,9 @@ public class PlaybackService extends Service { */ private void pauseIfPauseOnDisconnect() { if (UserPreferences.isPauseOnHeadsetDisconnect()) { + if (mediaPlayer.getPlayerStatus() == PlayerStatus.PLAYING) { + headphonePause = true; + } if (UserPreferences.isPersistNotify()) { mediaPlayer.pause(false, true); } else { @@ -1011,6 +1023,13 @@ public class PlaybackService extends Service { } } + private void unpauseIfPauseOnDisconnect() { + if (UserPreferences.isPauseOnHeadsetDisconnect() && headphonePause) { + headphonePause = false; + mediaPlayer.resume(); + } + } + private BroadcastReceiver shutdownReceiver = new BroadcastReceiver() { @Override diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java index dbf870eac..ad5154faf 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java @@ -586,6 +586,10 @@ public class PlaybackServiceMediaPlayer { return mediaType; } + public PlayerStatus getPlayerStatus() { + return playerStatus; + } + public boolean isStreaming() { return stream; } -- cgit v1.2.3 From d15acebd8b688132c8d13f6285e35e9b4b4afcb7 Mon Sep 17 00:00:00 2001 From: Michael Scarito Date: Thu, 20 Nov 2014 14:14:19 -0800 Subject: Renamed headphonePause to transientPause --- .../danoeh/antennapod/core/service/playback/PlaybackService.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'core/src') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index 0ff057a26..a2646b981 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -147,7 +147,7 @@ public class PlaybackService extends Service { /** * Is true if the service was running, but paused due to headphone disconnect */ - public static boolean headphonePause = false; + public static boolean transientPause = false; private static final int NOTIFICATION_ID = 1; @@ -1013,7 +1013,7 @@ public class PlaybackService extends Service { private void pauseIfPauseOnDisconnect() { if (UserPreferences.isPauseOnHeadsetDisconnect()) { if (mediaPlayer.getPlayerStatus() == PlayerStatus.PLAYING) { - headphonePause = true; + transientPause = true; } if (UserPreferences.isPersistNotify()) { mediaPlayer.pause(false, true); @@ -1024,8 +1024,8 @@ public class PlaybackService extends Service { } private void unpauseIfPauseOnDisconnect() { - if (UserPreferences.isPauseOnHeadsetDisconnect() && headphonePause) { - headphonePause = false; + if (UserPreferences.isPauseOnHeadsetDisconnect() && transientPause) { + transientPause = false; mediaPlayer.resume(); } } -- cgit v1.2.3 From d4a3095512a2b1eaf5517699e63f38b4d73546de Mon Sep 17 00:00:00 2001 From: Michael Scarito Date: Thu, 20 Nov 2014 14:14:25 -0800 Subject: Added bluetooth BroadcastReceiver to resume after disconnect --- .../core/service/playback/PlaybackService.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'core/src') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index a2646b981..b6e87f5ae 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -210,6 +210,8 @@ public class PlaybackService extends Service { Intent.ACTION_HEADSET_PLUG)); registerReceiver(shutdownReceiver, new IntentFilter( ACTION_SHUTDOWN_PLAYBACK_SERVICE)); + registerReceiver(bluetoothStateUpdated, new IntentFilter( + AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)); registerReceiver(audioBecomingNoisy, new IntentFilter( AudioManager.ACTION_AUDIO_BECOMING_NOISY)); registerReceiver(skipCurrentEpisodeReceiver, new IntentFilter( @@ -232,6 +234,7 @@ public class PlaybackService extends Service { unregisterReceiver(headsetDisconnected); unregisterReceiver(shutdownReceiver); + unregisterReceiver(bluetoothStateUpdated); unregisterReceiver(audioBecomingNoisy); unregisterReceiver(skipCurrentEpisodeReceiver); mediaPlayer.shutdown(); @@ -995,6 +998,21 @@ public class PlaybackService extends Service { } }; + private BroadcastReceiver bluetoothStateUpdated = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (StringUtils.equals(intent.getAction(), AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)) { + int state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1); + int prevState = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_PREVIOUS_STATE, -1); + if (state == AudioManager.SCO_AUDIO_STATE_CONNECTED) { + if (BuildConfig.DEBUG) + Log.d(TAG, "Received bluetooth connection intent"); + unpauseIfPauseOnDisconnect(); + } + } + } + }; + private BroadcastReceiver audioBecomingNoisy = new BroadcastReceiver() { @Override -- cgit v1.2.3 From 58f071e763ac6793f8494cb09d1382898116ed1a Mon Sep 17 00:00:00 2001 From: Michael Scarito Date: Fri, 21 Nov 2014 10:24:29 -0800 Subject: Created a user preference to enable the headphone resume feature --- .../danoeh/antennapod/core/preferences/UserPreferences.java | 11 +++++++++++ .../antennapod/core/service/playback/PlaybackService.java | 6 ++++-- core/src/main/res/values/strings.xml | 2 ++ 3 files changed, 17 insertions(+), 2 deletions(-) (limited to 'core/src') diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index f4d44c4da..85e849e32 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -37,6 +37,7 @@ public class UserPreferences implements private static final String TAG = "UserPreferences"; public static final String PREF_PAUSE_ON_HEADSET_DISCONNECT = "prefPauseOnHeadsetDisconnect"; + public static final String PREF_UNPAUSE_ON_HEADSET_RECONNECT = "prefUnpauseOnHeadsetReconnect"; public static final String PREF_FOLLOW_QUEUE = "prefFollowQueue"; public static final String PREF_DOWNLOAD_MEDIA_ON_WIFI_ONLY = "prefDownloadMediaOnWifiOnly"; public static final String PREF_UPDATE_INTERVAL = "prefAutoUpdateIntervall"; @@ -68,6 +69,7 @@ public class UserPreferences implements // Preferences private boolean pauseOnHeadsetDisconnect; + private boolean unpauseOnHeadsetReconnect; private boolean followQueue; private boolean downloadMediaOnWifiOnly; private long updateInterval; @@ -120,6 +122,8 @@ public class UserPreferences implements R.integer.episode_cache_size_unlimited); pauseOnHeadsetDisconnect = sp.getBoolean( PREF_PAUSE_ON_HEADSET_DISCONNECT, true); + unpauseOnHeadsetReconnect = sp.getBoolean( + PREF_UNPAUSE_ON_HEADSET_RECONNECT, true); followQueue = sp.getBoolean(PREF_FOLLOW_QUEUE, false); downloadMediaOnWifiOnly = sp.getBoolean( PREF_DOWNLOAD_MEDIA_ON_WIFI_ONLY, true); @@ -220,6 +224,11 @@ public class UserPreferences implements return instance.pauseOnHeadsetDisconnect; } + public static boolean isUnpauseOnHeadsetReconnect() { + instanceAvailable(); + return instance.unpauseOnHeadsetReconnect; + } + public static boolean isFollowQueue() { instanceAvailable(); return instance.followQueue; @@ -387,6 +396,8 @@ public class UserPreferences implements seekDeltaSecs = Integer.valueOf(sp.getString(PREF_SEEK_DELTA_SECS, "30")); } else if (key.equals(PREF_PAUSE_ON_HEADSET_DISCONNECT)) { pauseOnHeadsetDisconnect = sp.getBoolean(PREF_PAUSE_ON_HEADSET_DISCONNECT, true); + } else if (key.equals(PREF_UNPAUSE_ON_HEADSET_RECONNECT)) { + unpauseOnHeadsetReconnect = sp.getBoolean(PREF_UNPAUSE_ON_HEADSET_RECONNECT, true); } else if (key.equals(PREF_AUTO_FLATTR_PLAYED_DURATION_THRESHOLD)) { autoFlattrPlayedDurationThreshold = sp.getFloat(PREF_AUTO_FLATTR_PLAYED_DURATION_THRESHOLD, PREF_AUTO_FLATTR_PLAYED_DURATION_THRESHOLD_DEFAULT); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index b6e87f5ae..d657621e3 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -1042,9 +1042,11 @@ public class PlaybackService extends Service { } private void unpauseIfPauseOnDisconnect() { - if (UserPreferences.isPauseOnHeadsetDisconnect() && transientPause) { + if (transientPause) { transientPause = false; - mediaPlayer.resume(); + if (UserPreferences.isPauseOnHeadsetDisconnect() && UserPreferences.isUnpauseOnHeadsetReconnect()) { + mediaPlayer.resume(); + } } } diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 86f46a330..75376cef8 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -205,6 +205,7 @@ Services Flattr Pause playback when the headphones are disconnected + Resume playback when the headphones are reconnected Jump to next queue item when playback completes Playback Network @@ -214,6 +215,7 @@ Continuous playback WiFi media download Headphones disconnect + Headphones reconnect Mobile updates Allow updates over the mobile data connection Refreshing -- cgit v1.2.3 From e9ed796fd432f8bcd9b41f52c2777b00cadcbed8 Mon Sep 17 00:00:00 2001 From: Lee Yeong Khang Date: Thu, 11 Dec 2014 19:54:58 +0900 Subject: Combine play and pause button into 1 detailed in https://github.com/danieloeh/AntennaPod/issues/574 --- .../core/service/playback/PlaybackService.java | 52 +++++++++------------- 1 file changed, 22 insertions(+), 30 deletions(-) (limited to 'core/src') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index a5560e3fb..7df4af504 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -284,18 +284,13 @@ public class PlaybackService extends Service { private void handleKeycode(int keycode) { if (BuildConfig.DEBUG) Log.d(TAG, "Handling keycode: " + keycode); - final PlaybackServiceMediaPlayer.PSMPInfo info = mediaPlayer.getPSMPInfo(); final PlayerStatus status = info.playerStatus; switch (keycode) { case KeyEvent.KEYCODE_HEADSETHOOK: case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE: if (status == PlayerStatus.PLAYING) { - if (UserPreferences.isPersistNotify()) { - mediaPlayer.pause(false, true); - } else { - mediaPlayer.pause(true, true); - } + mediaPlayer.pause(false, true); } else if (status == PlayerStatus.PAUSED || status == PlayerStatus.PREPARED) { mediaPlayer.resume(); } else if (status == PlayerStatus.PREPARING) { @@ -315,11 +310,7 @@ public class PlaybackService extends Service { break; case KeyEvent.KEYCODE_MEDIA_PAUSE: if (status == PlayerStatus.PLAYING) { - if (UserPreferences.isPersistNotify()) { - mediaPlayer.pause(false, true); - } else { - mediaPlayer.pause(true, true); - } + mediaPlayer.pause(false, true); } break; case KeyEvent.KEYCODE_MEDIA_NEXT: @@ -333,7 +324,9 @@ public class PlaybackService extends Service { case KeyEvent.KEYCODE_MEDIA_STOP: if (status == PlayerStatus.PLAYING) { mediaPlayer.pause(true, true); + started = false; } + stopForeground(true); // gets rid of persistent notification break; default: @@ -409,12 +402,8 @@ public class PlaybackService extends Service { taskManager.cancelPositionSaver(); saveCurrentPosition(false, 0); taskManager.cancelWidgetUpdater(); - if (UserPreferences.isPersistNotify() && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - // do not remove notification on pause based on user pref and whether android version supports expanded notifications - } else { - // remove notifcation on pause - stopForeground(true); - } + setupNotification(newInfo); + break; case STOPPED: @@ -431,6 +420,7 @@ public class PlaybackService extends Service { taskManager.startPositionSaver(); taskManager.startWidgetUpdater(); setupNotification(newInfo); + started = true; break; case ERROR: writePlaybackPreferencesNoMediaPlaying(); @@ -734,8 +724,9 @@ public class PlaybackService extends Service { PlaybackServiceMediaPlayer.PSMPInfo newInfo = mediaPlayer.getPSMPInfo(); final int smallIcon = ClientConfig.playbackServiceCallbacks.getNotificationIconResource(getApplicationContext()); - if (!isCancelled() && info.playerStatus == PlayerStatus.PLAYING - && info.playable != null) { + if (!isCancelled() && + started == true && + info.playable != null) { String contentText = info.playable.getFeedTitle(); String contentTitle = info.playable.getEpisodeTitle(); Notification notification = null; @@ -775,14 +766,17 @@ public class PlaybackService extends Service { .setContentIntent(pIntent) .setLargeIcon(icon) .setSmallIcon(smallIcon) - .setPriority(UserPreferences.getNotifyPriority()) // set notification priority - .addAction(android.R.drawable.ic_media_play, //play action - getString(R.string.play_label), - playButtonPendingIntent) - .addAction(android.R.drawable.ic_media_pause, //pause action - getString(R.string.pause_label), - pauseButtonPendingIntent) - .addAction(android.R.drawable.ic_menu_close_clear_cancel, // stop action + .setPriority(UserPreferences.getNotifyPriority()); // set notification priority + if(newInfo.playerStatus==PlayerStatus.PLAYING){ + notificationBuilder.addAction(android.R.drawable.ic_media_pause, //pause action + getString(R.string.pause_label), + pauseButtonPendingIntent); + } else { + notificationBuilder.addAction(android.R.drawable.ic_media_play, //play action + getString(R.string.play_label), + playButtonPendingIntent); + } + notificationBuilder.addAction(android.R.drawable.ic_menu_close_clear_cancel, // stop action getString(R.string.stop_label), stopButtonPendingIntent); notification = notificationBuilder.build(); @@ -795,9 +789,7 @@ public class PlaybackService extends Service { .setSmallIcon(smallIcon); notification = notificationBuilder.getNotification(); } - if (newInfo.playerStatus == PlayerStatus.PLAYING) { - startForeground(NOTIFICATION_ID, notification); - } + startForeground(NOTIFICATION_ID, notification); if (BuildConfig.DEBUG) Log.d(TAG, "Notification set up"); } -- cgit v1.2.3 From 8083a064a0d94c90c1927932f2cb01bac69af6ad Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Thu, 4 Dec 2014 12:16:47 +0100 Subject: Improved look of ItemlistFragment header --- .../antennapod/core/asynctask/PicassoProvider.java | 250 +++++++++++++++++++++ core/src/main/res/values/colors.xml | 1 + core/src/main/res/values/styles.xml | 6 + 3 files changed, 257 insertions(+) (limited to 'core/src') diff --git a/core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java index 1ed29c23a..0b136afe7 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java +++ b/core/src/main/java/de/danoeh/antennapod/core/asynctask/PicassoProvider.java @@ -14,6 +14,7 @@ import com.squareup.picasso.OkHttpDownloader; import com.squareup.picasso.Picasso; import com.squareup.picasso.Request; import com.squareup.picasso.RequestHandler; +import com.squareup.picasso.Transformation; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -209,4 +210,253 @@ public class PicassoProvider { options.inJustDecodeBounds = false; } } + + public static final int BLUR_RADIUS = 10; + public static final String BLUR_KEY = "blur"; + + public static final Transformation blurTransformation = new Transformation() { + @Override + public Bitmap transform(Bitmap source) { + Bitmap result = fastblur(source, BLUR_RADIUS); + source.recycle(); + return result; + } + + @Override + public String key() { + return BLUR_KEY; + } + }; + + public static Bitmap fastblur(Bitmap sentBitmap, int radius) { + + // Stack Blur v1.0 from + // http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html + // + // Java Author: Mario Klingemann + // http://incubator.quasimondo.com + // created Feburary 29, 2004 + // Android port : Yahel Bouaziz + // http://www.kayenko.com + // ported april 5th, 2012 + + // This is a compromise between Gaussian Blur and Box blur + // It creates much better looking blurs than Box Blur, but is + // 7x faster than my Gaussian Blur implementation. + // + // I called it Stack Blur because this describes best how this + // filter works internally: it creates a kind of moving stack + // of colors whilst scanning through the image. Thereby it + // just has to add one new block of color to the right side + // of the stack and remove the leftmost color. The remaining + // colors on the topmost layer of the stack are either added on + // or reduced by one, depending on if they are on the right or + // on the left side of the stack. + // + // If you are using this algorithm in your code please add + // the following line: + // + // Stack Blur Algorithm by Mario Klingemann + + Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true); + + if (radius < 1) { + return (null); + } + + int w = bitmap.getWidth(); + int h = bitmap.getHeight(); + + int[] pix = new int[w * h]; + Log.e("pix", w + " " + h + " " + pix.length); + bitmap.getPixels(pix, 0, w, 0, 0, w, h); + + int wm = w - 1; + int hm = h - 1; + int wh = w * h; + int div = radius + radius + 1; + + int r[] = new int[wh]; + int g[] = new int[wh]; + int b[] = new int[wh]; + int rsum, gsum, bsum, x, y, i, p, yp, yi, yw; + int vmin[] = new int[Math.max(w, h)]; + + int divsum = (div + 1) >> 1; + divsum *= divsum; + int dv[] = new int[256 * divsum]; + for (i = 0; i < 256 * divsum; i++) { + dv[i] = (i / divsum); + } + + yw = yi = 0; + + int[][] stack = new int[div][3]; + int stackpointer; + int stackstart; + int[] sir; + int rbs; + int r1 = radius + 1; + int routsum, goutsum, boutsum; + int rinsum, ginsum, binsum; + + for (y = 0; y < h; y++) { + rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; + for (i = -radius; i <= radius; i++) { + p = pix[yi + Math.min(wm, Math.max(i, 0))]; + sir = stack[i + radius]; + sir[0] = (p & 0xff0000) >> 16; + sir[1] = (p & 0x00ff00) >> 8; + sir[2] = (p & 0x0000ff); + rbs = r1 - Math.abs(i); + rsum += sir[0] * rbs; + gsum += sir[1] * rbs; + bsum += sir[2] * rbs; + if (i > 0) { + rinsum += sir[0]; + ginsum += sir[1]; + binsum += sir[2]; + } else { + routsum += sir[0]; + goutsum += sir[1]; + boutsum += sir[2]; + } + } + stackpointer = radius; + + for (x = 0; x < w; x++) { + + r[yi] = dv[rsum]; + g[yi] = dv[gsum]; + b[yi] = dv[bsum]; + + rsum -= routsum; + gsum -= goutsum; + bsum -= boutsum; + + stackstart = stackpointer - radius + div; + sir = stack[stackstart % div]; + + routsum -= sir[0]; + goutsum -= sir[1]; + boutsum -= sir[2]; + + if (y == 0) { + vmin[x] = Math.min(x + radius + 1, wm); + } + p = pix[yw + vmin[x]]; + + sir[0] = (p & 0xff0000) >> 16; + sir[1] = (p & 0x00ff00) >> 8; + sir[2] = (p & 0x0000ff); + + rinsum += sir[0]; + ginsum += sir[1]; + binsum += sir[2]; + + rsum += rinsum; + gsum += ginsum; + bsum += binsum; + + stackpointer = (stackpointer + 1) % div; + sir = stack[(stackpointer) % div]; + + routsum += sir[0]; + goutsum += sir[1]; + boutsum += sir[2]; + + rinsum -= sir[0]; + ginsum -= sir[1]; + binsum -= sir[2]; + + yi++; + } + yw += w; + } + for (x = 0; x < w; x++) { + rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; + yp = -radius * w; + for (i = -radius; i <= radius; i++) { + yi = Math.max(0, yp) + x; + + sir = stack[i + radius]; + + sir[0] = r[yi]; + sir[1] = g[yi]; + sir[2] = b[yi]; + + rbs = r1 - Math.abs(i); + + rsum += r[yi] * rbs; + gsum += g[yi] * rbs; + bsum += b[yi] * rbs; + + if (i > 0) { + rinsum += sir[0]; + ginsum += sir[1]; + binsum += sir[2]; + } else { + routsum += sir[0]; + goutsum += sir[1]; + boutsum += sir[2]; + } + + if (i < hm) { + yp += w; + } + } + yi = x; + stackpointer = radius; + for (y = 0; y < h; y++) { + // Preserve alpha channel: ( 0xff000000 & pix[yi] ) + pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum]; + + rsum -= routsum; + gsum -= goutsum; + bsum -= boutsum; + + stackstart = stackpointer - radius + div; + sir = stack[stackstart % div]; + + routsum -= sir[0]; + goutsum -= sir[1]; + boutsum -= sir[2]; + + if (x == 0) { + vmin[y] = Math.min(y + r1, hm) * w; + } + p = x + vmin[y]; + + sir[0] = r[p]; + sir[1] = g[p]; + sir[2] = b[p]; + + rinsum += sir[0]; + ginsum += sir[1]; + binsum += sir[2]; + + rsum += rinsum; + gsum += ginsum; + bsum += binsum; + + stackpointer = (stackpointer + 1) % div; + sir = stack[stackpointer]; + + routsum += sir[0]; + goutsum += sir[1]; + boutsum += sir[2]; + + rinsum -= sir[0]; + ginsum -= sir[1]; + binsum -= sir[2]; + + yi += w; + } + } + + Log.e("pix", w + " " + h + " " + pix.length); + bitmap.setPixels(pix, 0, w, 0, 0, w, h); + + return (bitmap); + } } diff --git a/core/src/main/res/values/colors.xml b/core/src/main/res/values/colors.xml index ab48fafe7..f062f23ea 100644 --- a/core/src/main/res/values/colors.xml +++ b/core/src/main/res/values/colors.xml @@ -16,6 +16,7 @@ #EDEDED #060708 #669900 + #80000000 #FEBB20 diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml index df7ae385c..d9f6a775a 100644 --- a/core/src/main/res/values/styles.xml +++ b/core/src/main/res/values/styles.xml @@ -157,4 +157,10 @@ @string/new_label + + -- cgit v1.2.3 From 6962d139746347aff034e3a84eaecf3e98062160 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Thu, 4 Dec 2014 16:34:32 +0100 Subject: Updated audio player layout --- .../core/preferences/UserPreferences.java | 9 +++ .../antennapod/core/util/playback/Timeline.java | 2 +- core/src/main/res/values/colors.xml | 4 +- core/src/main/res/values/dimens.xml | 2 + core/src/main/res/values/styles.xml | 83 ++++++++++++++++++++++ 5 files changed, 97 insertions(+), 3 deletions(-) (limited to 'core/src') diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index ef4569e5d..186b390a8 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -291,6 +291,15 @@ public class UserPreferences implements return instance.theme; } + public static int getNoTitleTheme() { + int theme = getTheme(); + if (theme == R.style.Theme_AntennaPod_Dark) { + return R.style.Theme_AntennaPod_Dark_NoTitle; + } else { + return R.style.Theme_AntennaPod_Light_NoTitle; + } + } + public static boolean isEnableAutodownloadWifiFilter() { instanceAvailable(); return instance.enableAutodownloadWifiFilter; diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java index 443ff0ad1..f31297b41 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/Timeline.java @@ -28,7 +28,7 @@ import de.danoeh.antennapod.core.util.ShownotesProvider; public class Timeline { private static final String TAG = "Timeline"; - private static final String WEBVIEW_STYLE = "@font-face { font-family: 'Roboto-Light'; src: url('file:///android_asset/Roboto-Light.ttf'); } * { color: %s; font-family: roboto-Light; font-size: 11pt; } a { font-style: normal; text-decoration: none; font-weight: normal; color: #00A8DF; } a.timecode { color: #669900; } img { display: block; margin: 10 auto; max-width: %s; height: auto; } body { margin: %dpx %dpx %dpx %dpx; }"; + private static final String WEBVIEW_STYLE = "@font-face { font-family: 'Roboto-Light'; src: url('file:///android_asset/Roboto-Light.ttf'); } * { color: %s; font-family: roboto-Light; font-size: 13pt; } a { font-style: normal; text-decoration: none; font-weight: normal; color: #00A8DF; } a.timecode { color: #669900; } img { display: block; margin: 10 auto; max-width: %s; height: auto; } body { margin: %dpx %dpx %dpx %dpx; }"; private ShownotesProvider shownotesProvider; diff --git a/core/src/main/res/values/colors.xml b/core/src/main/res/values/colors.xml index f062f23ea..e558a5c4e 100644 --- a/core/src/main/res/values/colors.xml +++ b/core/src/main/res/values/colors.xml @@ -11,8 +11,8 @@ #CC0000 #E033B5E5 #E0EE5F52 - #262C31 - #DDDDDD + #2C2C2C + #FFFFFF #EDEDED #060708 #669900 diff --git a/core/src/main/res/values/dimens.xml b/core/src/main/res/values/dimens.xml index 38c14b024..81a55142a 100644 --- a/core/src/main/res/values/dimens.xml +++ b/core/src/main/res/values/dimens.xml @@ -33,4 +33,6 @@ 16dp 16dp + 64dp + \ No newline at end of file diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml index d9f6a775a..4d05a4cb9 100644 --- a/core/src/main/res/values/styles.xml +++ b/core/src/main/res/values/styles.xml @@ -82,6 +82,89 @@ @drawable/ic_fast_rewind_white_36dp + + + + -- cgit v1.2.3 From 6bba71469f1eb4d26ba4966f8e1febbe275f1782 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Thu, 4 Dec 2014 21:31:01 +0100 Subject: Moved settings button into navigation drawer --- .../main/res/drawable-hdpi/ic_settings_grey600_24dp.png | Bin 0 -> 572 bytes .../src/main/res/drawable-hdpi/ic_settings_white_24dp.png | Bin 0 -> 561 bytes .../main/res/drawable-xhdpi/ic_settings_grey600_24dp.png | Bin 0 -> 704 bytes .../main/res/drawable-xhdpi/ic_settings_white_24dp.png | Bin 0 -> 737 bytes .../main/res/drawable-xxhdpi/ic_settings_grey600_24dp.png | Bin 0 -> 994 bytes .../main/res/drawable-xxhdpi/ic_settings_white_24dp.png | Bin 0 -> 974 bytes core/src/main/res/values/attrs.xml | 1 + core/src/main/res/values/styles.xml | 4 ++++ 8 files changed, 5 insertions(+) create mode 100644 core/src/main/res/drawable-hdpi/ic_settings_grey600_24dp.png create mode 100644 core/src/main/res/drawable-hdpi/ic_settings_white_24dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_settings_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_settings_grey600_24dp.png create mode 100644 core/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png (limited to 'core/src') diff --git a/core/src/main/res/drawable-hdpi/ic_settings_grey600_24dp.png b/core/src/main/res/drawable-hdpi/ic_settings_grey600_24dp.png new file mode 100644 index 000000000..20d2b66e0 Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_settings_grey600_24dp.png differ diff --git a/core/src/main/res/drawable-hdpi/ic_settings_white_24dp.png b/core/src/main/res/drawable-hdpi/ic_settings_white_24dp.png new file mode 100644 index 000000000..f9a8915fd Binary files /dev/null and b/core/src/main/res/drawable-hdpi/ic_settings_white_24dp.png differ diff --git a/core/src/main/res/drawable-xhdpi/ic_settings_grey600_24dp.png b/core/src/main/res/drawable-xhdpi/ic_settings_grey600_24dp.png new file mode 100644 index 000000000..2251d2bbb Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_settings_grey600_24dp.png differ diff --git a/core/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png b/core/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png new file mode 100644 index 000000000..12e5d100d Binary files /dev/null and b/core/src/main/res/drawable-xhdpi/ic_settings_white_24dp.png differ diff --git a/core/src/main/res/drawable-xxhdpi/ic_settings_grey600_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_settings_grey600_24dp.png new file mode 100644 index 000000000..6a70402b4 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_settings_grey600_24dp.png differ diff --git a/core/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png new file mode 100644 index 000000000..6bb8f6e08 Binary files /dev/null and b/core/src/main/res/drawable-xxhdpi/ic_settings_white_24dp.png differ diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml index c46a2118f..f36119c8d 100644 --- a/core/src/main/res/values/attrs.xml +++ b/core/src/main/res/values/attrs.xml @@ -35,6 +35,7 @@ + diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml index 4d05a4cb9..a422a41da 100644 --- a/core/src/main/res/values/styles.xml +++ b/core/src/main/res/values/styles.xml @@ -40,6 +40,7 @@ @drawable/ic_pause_grey600_36dp @drawable/ic_fast_forward_grey600_36dp @drawable/ic_fast_rewind_grey600_36dp + @drawable/ic_settings_grey600_24dp