diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/BottomBarControls.java b/app/src/main/java/ch/blinkenlights/android/vanilla/BottomBarControls.java index 8e5efa3d..ecae0372 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/BottomBarControls.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/BottomBarControls.java @@ -293,7 +293,8 @@ public class BottomBarControls extends LinearLayout * Because ...reasons. */ private boolean menuMargin() { - return ThemeHelper.usesHoloTheme() == false; + // Was false for holo, maybe will be true again in the future? ;-) + return true; } /** diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/PlaybackService.java b/app/src/main/java/ch/blinkenlights/android/vanilla/PlaybackService.java index fd2c9a69..79b6b9ef 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/PlaybackService.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/PlaybackService.java @@ -527,9 +527,7 @@ public final class PlaybackService extends Service mAccelLast = SensorManager.GRAVITY_EARTH; setupSensor(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - ScheduledLibraryUpdate.scheduleUpdate(this); - } + ScheduledLibraryUpdate.scheduleUpdate(this); } @Override @@ -800,9 +798,6 @@ public final class PlaybackService extends Service if(mMediaPlayerInitialized != true) return; - if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) - return; /* setNextMediaPlayer is supported since JB */ - boolean doGapless = false; int fa = finishAction(mState); Song nextSong = getSong(1); diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/PlaylistObserver.java b/app/src/main/java/ch/blinkenlights/android/vanilla/PlaylistObserver.java index f5fc7180..1f2db9e6 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/PlaylistObserver.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/PlaylistObserver.java @@ -152,11 +152,7 @@ public class PlaylistObserver extends SQLiteOpenHelper implements Handler.Callba MediaLibrary.unregisterLibraryObserver(mLibraryObserver); mFileObserver.stopWatching(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - mHandlerThread.quitSafely(); - } else { - mHandlerThread.quit(); - } + mHandlerThread.quitSafely(); mHandlerThread = null; mHandler = null; } diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/PreferencesActivity.java b/app/src/main/java/ch/blinkenlights/android/vanilla/PreferencesActivity.java index 54455eff..fe3103b3 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/PreferencesActivity.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/PreferencesActivity.java @@ -86,9 +86,7 @@ public class PreferencesActivity extends PreferenceActivity loadHeadersFromResource(R.xml.preference_headers, tmp); for(Header obj : tmp) { - // Themes are 5.x only, so do not add PreferencesTheme on holo devices - if (!ThemeHelper.usesHoloTheme() || !obj.fragment.equals(PreferencesTheme.class.getName())) - target.add(obj); + target.add(obj); } } diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/RemoteControl.java b/app/src/main/java/ch/blinkenlights/android/vanilla/RemoteControl.java index e28a73b3..eaec8296 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/RemoteControl.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/RemoteControl.java @@ -27,10 +27,7 @@ public class RemoteControl { * Returns a RemoteControl.Client implementation */ public RemoteControl.Client getClient(Context context) { - return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? - new RemoteControlImplLp(context) : - new RemoteControlImplICS(context) // legacy implementation, kept until we drop 4.x support - ); + return new RemoteControlImplLp(context); } /** diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/RemoteControlImplICS.java b/app/src/main/java/ch/blinkenlights/android/vanilla/RemoteControlImplICS.java deleted file mode 100644 index 2d185f32..00000000 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/RemoteControlImplICS.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (C) 2015 Adrian Ulrich <adrian@blinkenlights.ch> - * Copyright (C) 2012 Christopher Eby <kreed@kreed.org> - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -package ch.blinkenlights.android.vanilla; - -import android.app.PendingIntent; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.graphics.Bitmap; -import android.media.AudioManager; -import android.media.MediaMetadataRetriever; -import android.media.RemoteControlClient; - -public class RemoteControlImplICS implements RemoteControl.Client { - /** - * Context of this instance - */ - private final Context mContext; - /** - * Used with updateRemote method. - */ - private RemoteControlClient mRemote; - /** - * Whether the cover should be shown. 1 for yes, 0 for no, -1 for - * uninitialized. - */ - private int mShowCover = -1; - - /** - * Creates a new instance - * - * @param context The context to use - */ - public RemoteControlImplICS(Context context) { - mContext = context; - } - - /** - * Perform initialization required for RemoteControlClient. - */ - public void initializeRemote() { - // make sure there is only one registered remote - unregisterRemote(); - - // Receive 'background' play button events - AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); - ComponentName receiver = new ComponentName(mContext.getPackageName(), MediaButtonReceiver.class.getName()); - audioManager.registerMediaButtonEventReceiver(receiver); - - Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); - mediaButtonIntent.setComponent(new ComponentName(mContext.getPackageName(), MediaButtonReceiver.class.getName())); - PendingIntent mediaPendingIntent = PendingIntent.getBroadcast(mContext, 0, mediaButtonIntent, 0); - RemoteControlClient remote = new RemoteControlClient(mediaPendingIntent); - - // Things we can do (eg: buttons to display on lock screen) - int flags = RemoteControlClient.FLAG_KEY_MEDIA_NEXT - | RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS - | RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE - | RemoteControlClient.FLAG_KEY_MEDIA_PLAY - | RemoteControlClient.FLAG_KEY_MEDIA_PAUSE; - remote.setTransportControlFlags(flags); - - audioManager.registerRemoteControlClient(remote); - mRemote = remote; - } - - /** - * Unregisters a remote control client - */ - public void unregisterRemote() { - if (mRemote != null) { - AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); - ComponentName receiver = new ComponentName(mContext.getPackageName(), MediaButtonReceiver.class.getName()); - audioManager.unregisterMediaButtonEventReceiver(receiver); - audioManager.unregisterRemoteControlClient(mRemote); - mRemote = null; - } - } - - /** - * Uninitializes our cached preferences, forcing a reload - */ - public void reloadPreference() - { - mShowCover = -1; - } - - /** - * Update the remote with new metadata. - * {@link #initializeRemote()} must have been called - * first. - * - * @param song The song containing the new metadata. - * @param state PlaybackService state, used to determine playback state. - * @param keepPaused whether or not to keep the remote updated in paused mode - */ - public void updateRemote(Song song, int state, boolean keepPaused) - { - RemoteControlClient remote = mRemote; - if (remote == null) - return; - - boolean isPlaying = ((state & PlaybackService.FLAG_PLAYING) != 0); - - if (mShowCover == -1) { - SharedPreferences settings = SharedPrefHelper.getSettings(mContext); - mShowCover = settings.getBoolean(PrefKeys.COVER_ON_LOCKSCREEN, PrefDefaults.COVER_ON_LOCKSCREEN) ? 1 : 0; - } - - remote.setPlaybackState(isPlaying ? RemoteControlClient.PLAYSTATE_PLAYING : RemoteControlClient.PLAYSTATE_PAUSED); - RemoteControlClient.MetadataEditor editor = remote.editMetadata(true); - if (song != null && song.artist != null && song.album != null) { - String artist_album = song.artist + " - " + song.album; - artist_album = (song.artist.length() == 0 ? song.album : artist_album); // no artist ? -> only display album - artist_album = (song.album.length() == 0 ? song.artist : artist_album); // no album ? -> only display artist - - editor.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, artist_album); - editor.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, song.title); - Bitmap bitmap = song.getMediumCover(mContext); - if (bitmap != null && mShowCover == 1 && (isPlaying || keepPaused)) { - // Create a copy of the cover art, since RemoteControlClient likes - // to recycle what we give it. - bitmap = bitmap.copy(Bitmap.Config.RGB_565, false); - } else { - // Some lockscreen implementations fail to clear the cover artwork - // if we send a null bitmap. We are creating a 16x16 transparent - // bitmap to work around this limitation. - bitmap = Bitmap.createBitmap(16, 16, Bitmap.Config.ARGB_8888); - } - editor.putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, bitmap); - } - editor.apply(); - } -} diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/ThemeHelper.java b/app/src/main/java/ch/blinkenlights/android/vanilla/ThemeHelper.java index 87e9a351..a8848695 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/ThemeHelper.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/ThemeHelper.java @@ -38,31 +38,28 @@ public class ThemeHelper { * and platform API. */ final public static int getThemeResource(Context context, int theme) { - if(usesHoloTheme() == false) { - TypedArray ar = null; - - switch (theme) { - case R.style.Playback: - ar = context.getResources().obtainTypedArray(R.array.theme_category_playback); - break; - case R.style.Library: - ar = context.getResources().obtainTypedArray(R.array.theme_category_library); - break; - case R.style.BackActionBar: - ar = context.getResources().obtainTypedArray(R.array.theme_category_backactionbar); - break; - case R.style.PopupDialog: - ar = context.getResources().obtainTypedArray(R.array.theme_category_popupdialog); - break; - case R.style.BottomSheetDialog: - ar = context.getResources().obtainTypedArray(R.array.theme_category_bottomsheetdialog); - break; - default: - throw new IllegalArgumentException("setTheme() called with unknown theme!"); - } - theme = ar.getResourceId(getSelectedThemeIndex(context), -1); - ar.recycle(); + TypedArray ar = null; + switch (theme) { + case R.style.Playback: + ar = context.getResources().obtainTypedArray(R.array.theme_category_playback); + break; + case R.style.Library: + ar = context.getResources().obtainTypedArray(R.array.theme_category_library); + break; + case R.style.BackActionBar: + ar = context.getResources().obtainTypedArray(R.array.theme_category_backactionbar); + break; + case R.style.PopupDialog: + ar = context.getResources().obtainTypedArray(R.array.theme_category_popupdialog); + break; + case R.style.BottomSheetDialog: + ar = context.getResources().obtainTypedArray(R.array.theme_category_bottomsheetdialog); + break; + default: + throw new IllegalArgumentException("setTheme() called with unknown theme!"); } + theme = ar.getResourceId(getSelectedThemeIndex(context), -1); + ar.recycle(); return theme; } @@ -73,14 +70,7 @@ public class ThemeHelper { */ final public static int getPlayButtonResource(boolean playing) { - int playButton = 0; - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - // Android >= 5.0 uses the dark version of this drawable - playButton = playing ? R.drawable.widget_pause : R.drawable.widget_play; - } else { - playButton = playing ? R.drawable.pause : R.drawable.play; - } - return playButton; + return playing ? R.drawable.widget_pause : R.drawable.widget_play; } /** @@ -89,12 +79,9 @@ public class ThemeHelper { */ final private static boolean usesDarkTheme(Context context) { - boolean useDark = false; - if(usesHoloTheme() == false) { - final int idx = getSelectedThemeIndex(context); - final String[] variants = context.getResources().getStringArray(R.array.theme_variant); - useDark = variants[idx].equals("dark"); - } + final int idx = getSelectedThemeIndex(context); + final String[] variants = context.getResources().getStringArray(R.array.theme_variant); + boolean useDark = variants[idx].equals("dark"); return useDark; } @@ -117,13 +104,6 @@ public class ThemeHelper { return 0; } - /** - * Returns TRUE if this device uses the HOLO (android 4) theme - */ - final public static boolean usesHoloTheme() { - return (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP); - } - /** * Fetches a color resource from the current theme */ @@ -138,9 +118,6 @@ public class ThemeHelper { * Returns the color to be used to draw the placeholder cover. */ final public static int[] getDefaultCoverColors(Context context) { - if (usesHoloTheme()) // pre material device - return new int[] { 0xff000000, 0xff404040 }; - int bg = fetchThemeColor(context, android.R.attr.colorBackground); int diff = 0x00171717 * (bg > 0xFF888888 ? -1 : 1); return new int[]{ bg, bg+diff }; diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/ui/FancyMenu.java b/app/src/main/java/ch/blinkenlights/android/vanilla/ui/FancyMenu.java index ea513abc..3e3059cf 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/ui/FancyMenu.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/ui/FancyMenu.java @@ -151,13 +151,9 @@ public class FancyMenu { */ private Adapter assembleAdapter(ArrayList<ArrayList<FancyMenuItem>> items) { final Adapter adapter = new Adapter(mContext, 0); - // spacers look awful on holo themes - final boolean usesSpacers = !ThemeHelper.usesHoloTheme(); for (ArrayList<FancyMenuItem> sub : items) { for (FancyMenuItem item : sub ) { - if (usesSpacers || !item.isSpacer()) { - adapter.add(item); - } + adapter.add(item); } } return adapter;