diff options
-rw-r--r-- | app/build.gradle | 12 | ||||
-rw-r--r-- | app/src/floss/java/github/daneren2005/dsub/util/compat/GoogleCompat.java | 31 | ||||
-rw-r--r-- | app/src/google/AndroidManifest.xml | 18 | ||||
-rw-r--r-- | app/src/google/java/github/daneren2005/dsub/service/ChromeCastController.java (renamed from app/src/main/java/github/daneren2005/dsub/service/ChromeCastController.java) | 1 | ||||
-rw-r--r-- | app/src/google/java/github/daneren2005/dsub/util/compat/GoogleCompat.java | 61 | ||||
-rw-r--r-- | app/src/main/AndroidManifest.xml | 11 | ||||
-rw-r--r-- | app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java | 6 | ||||
-rw-r--r-- | app/src/main/java/github/daneren2005/dsub/util/MediaRouteManager.java | 29 | ||||
-rw-r--r-- | app/src/main/java/github/daneren2005/dsub/util/compat/CastCompat.java | 56 |
9 files changed, 129 insertions, 96 deletions
diff --git a/app/build.gradle b/app/build.gradle index 26afb5ea..47604723 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,6 +28,16 @@ android { } } + productFlavors { + floss { + // FLOSS build (no proprietary libraries) + } + google { + // FLOSS build + Google libraries + // Adds ChromeCast support + } + } + packagingOptions { exclude 'META-INF/beans.xml' } @@ -51,7 +61,7 @@ dependencies { compile 'com.android.support:mediarouter-v7:24.2.+' compile 'com.android.support:recyclerview-v7:24.2.+' compile 'com.android.support:design:24.2.+' - compile 'com.google.android.gms:play-services-cast:8.1.0' + googleCompile 'com.google.android.gms:play-services-cast:8.1.0' compile 'com.sothree.slidinguppanel:library:3.0.0' compile 'de.hdodenhof:circleimageview:1.2.1' compile 'com.shehabic.droppy:Droppy:0.5.1@aar' diff --git a/app/src/floss/java/github/daneren2005/dsub/util/compat/GoogleCompat.java b/app/src/floss/java/github/daneren2005/dsub/util/compat/GoogleCompat.java new file mode 100644 index 00000000..08db4f1c --- /dev/null +++ b/app/src/floss/java/github/daneren2005/dsub/util/compat/GoogleCompat.java @@ -0,0 +1,31 @@ +package github.daneren2005.dsub.util.compat; + +import android.content.Context; +import android.support.v7.media.MediaRouter; + +import github.daneren2005.dsub.service.DownloadService; +import github.daneren2005.dsub.service.RemoteController; + + +// Provides stubs for Google-related functionality +public final class GoogleCompat { + + public static boolean playServicesAvailable(Context context) { + return false; + } + + public static void installProvider(Context context) throws Exception { + } + + public static boolean castAvailable() { + return false; + } + + public static RemoteController getController(DownloadService downloadService, MediaRouter.RouteInfo info) { + return null; + } + + public static String getCastControlCategory() { + return null; + } +} diff --git a/app/src/google/AndroidManifest.xml b/app/src/google/AndroidManifest.xml new file mode 100644 index 00000000..14827d43 --- /dev/null +++ b/app/src/google/AndroidManifest.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="github.daneren2005.dsub"> + + <meta-data + android:name="com.google.android.backup.api_key" + android:value="AEdPqrEAAAAIUhOMtwa_eG-f0oYUHnetl_Cz7cO9zae8ZXOK5w" /> + <meta-data + android:name="com.google.android.gms.version" + android:value="@integer/google_play_services_version" /> + <meta-data + android:name="com.google.android.gms.car.application" + android:resource="@xml/auto_app_description" /> + <meta-data + android:name="com.google.android.gms.car.notification.SmallIcon" + android:resource="@drawable/stat_notify_playing" /> + +</manifest> diff --git a/app/src/main/java/github/daneren2005/dsub/service/ChromeCastController.java b/app/src/google/java/github/daneren2005/dsub/service/ChromeCastController.java index f9e2bfb1..b2405705 100644 --- a/app/src/main/java/github/daneren2005/dsub/service/ChromeCastController.java +++ b/app/src/google/java/github/daneren2005/dsub/service/ChromeCastController.java @@ -45,7 +45,6 @@ import github.daneren2005.dsub.util.Constants; import github.daneren2005.dsub.util.EnvironmentVariables; import github.daneren2005.dsub.util.FileUtil; import github.daneren2005.dsub.util.Util; -import github.daneren2005.dsub.util.compat.CastCompat; import github.daneren2005.serverproxy.FileProxy; import github.daneren2005.serverproxy.ServerProxy; import github.daneren2005.serverproxy.WebProxy; diff --git a/app/src/google/java/github/daneren2005/dsub/util/compat/GoogleCompat.java b/app/src/google/java/github/daneren2005/dsub/util/compat/GoogleCompat.java new file mode 100644 index 00000000..63992b0f --- /dev/null +++ b/app/src/google/java/github/daneren2005/dsub/util/compat/GoogleCompat.java @@ -0,0 +1,61 @@ +package github.daneren2005.dsub.util.compat; + +import android.content.Context; +import android.support.v7.media.MediaRouter; +import android.util.Log; + +import com.google.android.gms.cast.CastDevice; +import com.google.android.gms.cast.CastMediaControlIntent; +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GoogleApiAvailability; +import com.google.android.gms.security.ProviderInstaller; + +import github.daneren2005.dsub.service.ChromeCastController; +import github.daneren2005.dsub.service.DownloadService; +import github.daneren2005.dsub.service.RemoteController; +import github.daneren2005.dsub.util.EnvironmentVariables; + +public final class GoogleCompat { + + private static final String TAG = GoogleCompat.class.getSimpleName(); + + public static boolean playServicesAvailable(Context context){ + int result = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context); + if(result != ConnectionResult.SUCCESS){ + Log.w(TAG, "No play services, failed with result: " + result); + return false; + } + return true; + } + + public static void installProvider(Context context) throws Exception{ + ProviderInstaller.installIfNeeded(context); + } + + public static boolean castAvailable() { + if (EnvironmentVariables.CAST_APPLICATION_ID == null) { + Log.w(TAG, "CAST_APPLICATION_ID not provided"); + return false; + } + try { + Class.forName("com.google.android.gms.cast.CastDevice"); + } catch (Exception ex) { + Log.w(TAG, "Chromecast library not available"); + return false; + } + return true; + } + + public static RemoteController getController(DownloadService downloadService, MediaRouter.RouteInfo info) { + CastDevice device = CastDevice.getFromBundle(info.getExtras()); + if(device != null) { + return new ChromeCastController(downloadService, device); + } else { + return null; + } + } + + public static String getCastControlCategory() { + return CastMediaControlIntent.categoryForCast(EnvironmentVariables.CAST_APPLICATION_ID); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 37643a21..06f79977 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -243,18 +243,7 @@ <meta-data android:name="android.app.default_searchable" android:value="github.daneren2005.dsub.activity.QueryReceiverActivity"/> - - <meta-data android:name="com.google.android.backup.api_key" - android:value="AEdPqrEAAAAIUhOMtwa_eG-f0oYUHnetl_Cz7cO9zae8ZXOK5w"/> - <meta-data - android:name="com.google.android.gms.version" - android:value="@integer/google_play_services_version" /> - - <meta-data android:name="com.google.android.gms.car.application" - android:resource="@xml/auto_app_description"/> - <meta-data android:name="com.google.android.gms.car.notification.SmallIcon" - android:resource="@drawable/stat_notify_playing" /> </application> </manifest> diff --git a/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java b/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java index 657ac4a9..a4987b09 100644 --- a/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java +++ b/app/src/main/java/github/daneren2005/dsub/service/RESTMusicService.java @@ -42,8 +42,6 @@ import android.net.NetworkInfo; import android.util.Base64; import android.util.Log; -import com.google.android.gms.security.ProviderInstaller; - import github.daneren2005.dsub.R; import github.daneren2005.dsub.domain.*; import github.daneren2005.dsub.fragments.MainFragment; @@ -81,6 +79,8 @@ import github.daneren2005.dsub.util.FileUtil; import github.daneren2005.dsub.util.ProgressListener; import github.daneren2005.dsub.util.SongDBHandler; import github.daneren2005.dsub.util.Util; +import github.daneren2005.dsub.util.compat.GoogleCompat; + import java.io.*; import java.util.Map; import java.util.zip.GZIPInputStream; @@ -1875,7 +1875,7 @@ public class RESTMusicService implements MusicService { private HttpURLConnection getConnectionDirect(Context context, String url, Map<String, String> headers, int minNetworkTimeout) throws Exception { if(!hasInstalledGoogleSSL) { try { - ProviderInstaller.installIfNeeded(context); + GoogleCompat.installProvider(context); } catch(Exception e) { // Just continue on anyways, doesn't really harm anything if this fails Log.w(TAG, "Failed to update to use Google Play SSL", e); diff --git a/app/src/main/java/github/daneren2005/dsub/util/MediaRouteManager.java b/app/src/main/java/github/daneren2005/dsub/util/MediaRouteManager.java index 73ec6aec..e19cc156 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/MediaRouteManager.java +++ b/app/src/main/java/github/daneren2005/dsub/util/MediaRouteManager.java @@ -19,10 +19,6 @@ import android.os.Build; import android.support.v7.media.MediaRouteProvider; import android.support.v7.media.MediaRouteSelector; import android.support.v7.media.MediaRouter; -import android.util.Log; - -import com.google.android.gms.common.ConnectionResult; -import com.google.android.gms.common.GooglePlayServicesUtil; import java.util.ArrayList; import java.util.List; @@ -32,7 +28,7 @@ import github.daneren2005.dsub.provider.DLNARouteProvider; import github.daneren2005.dsub.provider.JukeboxRouteProvider; import github.daneren2005.dsub.service.DownloadService; import github.daneren2005.dsub.service.RemoteController; -import github.daneren2005.dsub.util.compat.CastCompat; +import github.daneren2005.dsub.util.compat.GoogleCompat; import static android.support.v7.media.MediaRouter.RouteInfo; @@ -50,25 +46,10 @@ public class MediaRouteManager extends MediaRouter.Callback { private List<MediaRouteProvider> onlineProviders = new ArrayList<MediaRouteProvider>(); private DLNARouteProvider dlnaProvider; - static { - try { - CastCompat.checkAvailable(); - castAvailable = true; - } catch(Throwable t) { - castAvailable = false; - } - } - public MediaRouteManager(DownloadService downloadService) { this.downloadService = downloadService; router = MediaRouter.getInstance(downloadService); - - // Check if play services is available - int result = GooglePlayServicesUtil.isGooglePlayServicesAvailable(downloadService); - if(result != ConnectionResult.SUCCESS){ - Log.w(TAG, "No play services, failed with result: " + result); - castAvailable = false; - } + castAvailable = GoogleCompat.playServicesAvailable(downloadService) && GoogleCompat.castAvailable(); addProviders(); buildSelector(); @@ -83,7 +64,7 @@ public class MediaRouteManager extends MediaRouter.Callback { @Override public void onRouteSelected(MediaRouter router, RouteInfo info) { if(castAvailable) { - RemoteController controller = CastCompat.getController(downloadService, info); + RemoteController controller = GoogleCompat.getController(downloadService, info); if(controller != null) { downloadService.setRemoteEnabled(RemoteControlState.CHROMECAST, controller); } @@ -137,7 +118,7 @@ public class MediaRouteManager extends MediaRouter.Callback { } public RemoteController getRemoteController(RouteInfo info) { if(castAvailable) { - return CastCompat.getController(downloadService, info); + return GoogleCompat.getController(downloadService, info); } else { return null; } @@ -170,7 +151,7 @@ public class MediaRouteManager extends MediaRouter.Callback { builder.addControlCategory(JukeboxRouteProvider.CATEGORY_JUKEBOX_ROUTE); } if(castAvailable) { - builder.addControlCategory(CastCompat.getCastControlCategory()); + builder.addControlCategory(GoogleCompat.getCastControlCategory()); } if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { builder.addControlCategory(DLNARouteProvider.CATEGORY_DLNA); diff --git a/app/src/main/java/github/daneren2005/dsub/util/compat/CastCompat.java b/app/src/main/java/github/daneren2005/dsub/util/compat/CastCompat.java deleted file mode 100644 index 08bac263..00000000 --- a/app/src/main/java/github/daneren2005/dsub/util/compat/CastCompat.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - This file is part of Subsonic. - Subsonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - Subsonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with Subsonic. If not, see <http://www.gnu.org/licenses/>. - Copyright 2014 (C) Scott Jackson -*/ - -package github.daneren2005.dsub.util.compat; - -import android.support.v7.media.MediaRouter; - -import com.google.android.gms.cast.CastDevice; -import com.google.android.gms.cast.CastMediaControlIntent; - -import github.daneren2005.dsub.service.ChromeCastController; -import github.daneren2005.dsub.service.DownloadService; -import github.daneren2005.dsub.service.RemoteController; -import github.daneren2005.dsub.util.EnvironmentVariables; - -public final class CastCompat { - static { - if (EnvironmentVariables.CAST_APPLICATION_ID == null) { - throw new RuntimeException("CAST_APPLICATION_ID not provided"); - } - try { - Class.forName("com.google.android.gms.cast.CastDevice"); - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - - public static void checkAvailable() throws Throwable { - // Calling here forces class initialization. - } - - public static RemoteController getController(DownloadService downloadService, MediaRouter.RouteInfo info) { - CastDevice device = CastDevice.getFromBundle(info.getExtras()); - if(device != null) { - return new ChromeCastController(downloadService, device); - } else { - return null; - } - } - - public static String getCastControlCategory() { - return CastMediaControlIntent.categoryForCast(EnvironmentVariables.CAST_APPLICATION_ID); - } -} |