diff --git a/build.gradle b/build.gradle index 33c940f..ee7f343 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,6 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:2.3.1' - classpath 'com.google.gms:google-services:3.0.0' } } diff --git a/main/build.gradle b/main/build.gradle index 0f5ac90..067f6c6 100644 --- a/main/build.gradle +++ b/main/build.gradle @@ -114,10 +114,6 @@ configurations { dependencies { compile "com.squareup.okhttp3:okhttp:$rootProject.ext.okhttpVersion" compile "com.squareup.picasso:picasso:$rootProject.ext.picassoVersion" - compile "com.google.android.gms:play-services-wearable:$rootProject.ext.googlePlayServicesVersion" - compile "com.google.firebase:firebase-core:$rootProject.ext.googlePlayServicesVersion" - // Only use crash reporting in the "prod" product flavor - prodCompile "com.google.firebase:firebase-crash:$rootProject.ext.googlePlayServicesVersion" compile "com.twofortyfouram:android-plugin-api-for-locale:1.0.2" compile "org.greenrobot:eventbus:3.0.0" compile "com.android.support:appcompat-v7:$rootProject.ext.supportLibraryVersion" @@ -131,8 +127,4 @@ dependencies { compile project(':android-client-common') compile project(':source-featured-art') compile project(':source-gallery') - prodReleaseWearApp project(path: ':wearable', configuration: 'prodRelease') - prodPublicBetaWearApp project(path: ':wearable', configuration: 'prodPublicBeta') } - -apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/main/src/main/java/com/google/android/apps/muzei/MuzeiActivity.java b/main/src/main/java/com/google/android/apps/muzei/MuzeiActivity.java index 27e9f20..97fc8ea 100644 --- a/main/src/main/java/com/google/android/apps/muzei/MuzeiActivity.java +++ b/main/src/main/java/com/google/android/apps/muzei/MuzeiActivity.java @@ -75,7 +75,6 @@ import com.google.android.apps.muzei.util.DrawInsetsFrameLayout; import com.google.android.apps.muzei.util.PanScaleProxyView; import com.google.android.apps.muzei.util.ScrimUtil; import com.google.android.apps.muzei.util.TypefaceUtil; -import com.google.firebase.analytics.FirebaseAnalytics; import net.nurik.roman.muzei.BuildConfig; import net.nurik.roman.muzei.R; @@ -259,7 +258,6 @@ public class MuzeiActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.muzei_activity); - FirebaseAnalytics.getInstance(this).setUserProperty("device_type", BuildConfig.DEVICE_TYPE); mContainerView = (DrawInsetsFrameLayout) findViewById(R.id.container); @@ -322,7 +320,6 @@ public class MuzeiActivity extends AppCompatActivity { findViewById(R.id.activate_muzei_button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - FirebaseAnalytics.getInstance(MuzeiActivity.this).logEvent("activate", null); try { startActivity(new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER) .putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, @@ -419,7 +416,6 @@ public class MuzeiActivity extends AppCompatActivity { // Special work if (newUiMode == UI_MODE_INTRO) { - FirebaseAnalytics.getInstance(this).logEvent(FirebaseAnalytics.Event.TUTORIAL_BEGIN, null); final View activateButton = findViewById(R.id.activate_muzei_button); activateButton.setAlpha(0); final AnimatedMuzeiLogoFragment logoFragment = (AnimatedMuzeiLogoFragment) @@ -516,7 +512,6 @@ public class MuzeiActivity extends AppCompatActivity { } if (newUiMode == UI_MODE_ART_DETAIL) { - FirebaseAnalytics.getInstance(this).logEvent(FirebaseAnalytics.Event.TUTORIAL_COMPLETE, null); } mPanScaleProxyView.setVisibility(newUiMode == UI_MODE_ART_DETAIL @@ -694,7 +689,6 @@ public class MuzeiActivity extends AppCompatActivity { switch (menuItem.getItemId()) { case R.id.action_settings: - FirebaseAnalytics.getInstance(MuzeiActivity.this).logEvent("settings_open", null); startActivity(new Intent(MuzeiActivity.this, SettingsActivity.class)); return true; } diff --git a/main/src/main/java/com/google/android/apps/muzei/MuzeiWallpaperService.java b/main/src/main/java/com/google/android/apps/muzei/MuzeiWallpaperService.java index 986366c..754e2fe 100644 --- a/main/src/main/java/com/google/android/apps/muzei/MuzeiWallpaperService.java +++ b/main/src/main/java/com/google/android/apps/muzei/MuzeiWallpaperService.java @@ -47,8 +47,6 @@ import com.google.android.apps.muzei.render.RenderController; import com.google.android.apps.muzei.settings.Prefs; import com.google.android.apps.muzei.shortcuts.ArtworkInfoShortcutController; import com.google.android.apps.muzei.sync.TaskQueueService; -import com.google.android.apps.muzei.wearable.WearableController; -import com.google.firebase.analytics.FirebaseAnalytics; import net.nurik.roman.muzei.BuildConfig; import net.rbgrn.android.glwallpaperservice.GLWallpaperService; @@ -62,8 +60,6 @@ public class MuzeiWallpaperService extends GLWallpaperService { private NetworkChangeReceiver mNetworkChangeReceiver; private HandlerThread mNotificationHandlerThread; private ContentObserver mNotificationContentObserver; - private HandlerThread mWearableHandlerThread; - private ContentObserver mWearableContentObserver; private HandlerThread mArtworkInfoShortcutHandlerThread; private ContentObserver mArtworkInfoShortcutContentObserver; @@ -91,7 +87,6 @@ public class MuzeiWallpaperService extends GLWallpaperService { } private void initialize() { - FirebaseAnalytics.getInstance(this).setUserProperty("device_type", BuildConfig.DEVICE_TYPE); SourceManager.subscribeToSelectedSource(MuzeiWallpaperService.this); mNetworkChangeReceiver = new NetworkChangeReceiver(); IntentFilter networkChangeFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); @@ -116,18 +111,6 @@ public class MuzeiWallpaperService extends GLWallpaperService { getContentResolver().registerContentObserver(MuzeiContract.Artwork.CONTENT_URI, true, mNotificationContentObserver); - // Set up a thread to update Android Wear whenever the artwork changes - mWearableHandlerThread = new HandlerThread("MuzeiWallpaperService-Wearable"); - mWearableHandlerThread.start(); - mWearableContentObserver = new ContentObserver(new Handler(mWearableHandlerThread.getLooper())) { - @Override - public void onChange(final boolean selfChange, final Uri uri) { - WearableController.updateArtwork(MuzeiWallpaperService.this); - } - }; - getContentResolver().registerContentObserver(MuzeiContract.Artwork.CONTENT_URI, - true, mWearableContentObserver); - // Set up a thread to update the Artwork Info shortcut whenever the artwork changes if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { mArtworkInfoShortcutHandlerThread = new HandlerThread("MuzeiWallpaperService-ArtworkInfoShortcut"); @@ -154,8 +137,6 @@ public class MuzeiWallpaperService extends GLWallpaperService { getContentResolver().unregisterContentObserver(mArtworkInfoShortcutContentObserver); mArtworkInfoShortcutHandlerThread.quitSafely(); } - getContentResolver().unregisterContentObserver(mWearableContentObserver); - mWearableHandlerThread.quitSafely(); getContentResolver().unregisterContentObserver(mNotificationContentObserver); mNotificationHandlerThread.quitSafely(); if (mNetworkChangeReceiver != null) { @@ -273,7 +254,6 @@ public class MuzeiWallpaperService extends GLWallpaperService { private void activateWallpaper() { mWallpaperActivated = true; - FirebaseAnalytics.getInstance(MuzeiWallpaperService.this).logEvent("wallpaper_created", null); EventBus.getDefault().postSticky(new WallpaperActiveStateChangedEvent(true)); } @@ -290,7 +270,6 @@ public class MuzeiWallpaperService extends GLWallpaperService { public void onDestroy() { EventBus.getDefault().unregister(this); if (mWallpaperActivated) { - FirebaseAnalytics.getInstance(MuzeiWallpaperService.this).logEvent("wallpaper_destroyed", null); EventBus.getDefault().postSticky(new WallpaperActiveStateChangedEvent(false)); } else if (!isPreview()) { unregisterReceiver(mEngineUnlockReceiver); diff --git a/main/src/main/java/com/google/android/apps/muzei/PhotoSetAsTargetActivity.java b/main/src/main/java/com/google/android/apps/muzei/PhotoSetAsTargetActivity.java index 928a386..c1905a2 100644 --- a/main/src/main/java/com/google/android/apps/muzei/PhotoSetAsTargetActivity.java +++ b/main/src/main/java/com/google/android/apps/muzei/PhotoSetAsTargetActivity.java @@ -25,7 +25,6 @@ import android.os.Bundle; import com.google.android.apps.muzei.gallery.GalleryArtSource; import com.google.android.apps.muzei.gallery.GalleryContract; -import com.google.firebase.analytics.FirebaseAnalytics; public class PhotoSetAsTargetActivity extends Activity { @Override @@ -39,11 +38,6 @@ public class PhotoSetAsTargetActivity extends Activity { Uri photoUri = getIntent().getData(); // Select the gallery source - Bundle bundle = new Bundle(); - bundle.putString(FirebaseAnalytics.Param.ITEM_ID, - new ComponentName(this, GalleryArtSource.class).flattenToShortString()); - bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "sources"); - FirebaseAnalytics.getInstance(this).logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle); SourceManager.selectSource(this, new ComponentName(this, GalleryArtSource.class)); // Add and publish the chosen photo diff --git a/main/src/main/java/com/google/android/apps/muzei/SourceManager.java b/main/src/main/java/com/google/android/apps/muzei/SourceManager.java index 7f8289b..ed5e225 100644 --- a/main/src/main/java/com/google/android/apps/muzei/SourceManager.java +++ b/main/src/main/java/com/google/android/apps/muzei/SourceManager.java @@ -33,7 +33,6 @@ import com.google.android.apps.muzei.api.MuzeiContract; import com.google.android.apps.muzei.api.UserCommand; import com.google.android.apps.muzei.featuredart.FeaturedArtSource; import com.google.android.apps.muzei.sync.TaskQueueService; -import com.google.firebase.analytics.FirebaseAnalytics; import net.nurik.roman.muzei.BuildConfig; @@ -117,7 +116,6 @@ public class SourceManager { try { context.getContentResolver().applyBatch(MuzeiContract.AUTHORITY, operations); sharedPrefs.edit().remove(PREF_SELECTED_SOURCE).remove(PREF_SOURCE_STATES).apply(); - sendSelectedSourceAnalytics(context, selectedSource); } catch (RemoteException | OperationApplicationException e) { Log.e(TAG, "Error writing sources to ContentProvider", e); } @@ -163,7 +161,6 @@ public class SourceManager { try { context.getContentResolver().applyBatch(MuzeiContract.AUTHORITY, operations); - sendSelectedSourceAnalytics(context, source); } catch (RemoteException | OperationApplicationException e) { Log.e(TAG, "Error writing sources to ContentProvider", e); } @@ -174,24 +171,6 @@ public class SourceManager { context.startService(TaskQueueService.getDownloadCurrentArtworkIntent(context)); } - private static void sendSelectedSourceAnalytics(Context context, ComponentName selectedSource) { - // The current limit for user property values - final int MAX_VALUE_LENGTH = 36; - String packageName = selectedSource.getPackageName(); - if (packageName.length() > MAX_VALUE_LENGTH) { - packageName = packageName.substring(packageName.length() - MAX_VALUE_LENGTH); - } - FirebaseAnalytics.getInstance(context).setUserProperty(USER_PROPERTY_SELECTED_SOURCE_PACKAGE, - packageName); - String className = selectedSource.flattenToShortString(); - className = className.substring(className.indexOf('/')+1); - if (className.length() > MAX_VALUE_LENGTH) { - className = className.substring(className.length() - MAX_VALUE_LENGTH); - } - FirebaseAnalytics.getInstance(context).setUserProperty(USER_PROPERTY_SELECTED_SOURCE, - className); - } - public static ComponentName getSelectedSource(Context context) { try (Cursor data = context.getContentResolver().query(MuzeiContract.Sources.CONTENT_URI, new String[] {MuzeiContract.Sources.COLUMN_NAME_COMPONENT_NAME}, diff --git a/main/src/main/java/com/google/android/apps/muzei/quicksettings/NextArtworkTileService.java b/main/src/main/java/com/google/android/apps/muzei/quicksettings/NextArtworkTileService.java index a797676..5a78aad 100644 --- a/main/src/main/java/com/google/android/apps/muzei/quicksettings/NextArtworkTileService.java +++ b/main/src/main/java/com/google/android/apps/muzei/quicksettings/NextArtworkTileService.java @@ -35,7 +35,6 @@ import com.google.android.apps.muzei.SourceManager; import com.google.android.apps.muzei.api.MuzeiArtSource; import com.google.android.apps.muzei.api.MuzeiContract; import com.google.android.apps.muzei.event.WallpaperActiveStateChangedEvent; -import com.google.firebase.analytics.FirebaseAnalytics; import net.nurik.roman.muzei.R; @@ -54,7 +53,6 @@ public class NextArtworkTileService extends TileService { @Override public void onTileAdded() { - FirebaseAnalytics.getInstance(this).logEvent("tile_next_artwork_added", null); } @Override @@ -133,8 +131,6 @@ public class NextArtworkTileService extends TileService { return; } if (tile.getState() == Tile.STATE_ACTIVE) { - FirebaseAnalytics.getInstance(NextArtworkTileService.this).logEvent( - "tile_next_artwork_click", null); // Active means we send the 'Next Artwork' command SourceManager.sendAction(this, MuzeiArtSource.BUILTIN_COMMAND_ID_NEXT_ARTWORK); } else { @@ -142,8 +138,6 @@ public class NextArtworkTileService extends TileService { unlockAndRun(new Runnable() { @Override public void run() { - FirebaseAnalytics.getInstance(NextArtworkTileService.this).logEvent( - "tile_next_artwork_activate", null); try { startActivityAndCollapse(new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER) .putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, @@ -172,6 +166,5 @@ public class NextArtworkTileService extends TileService { @Override public void onTileRemoved() { - FirebaseAnalytics.getInstance(this).logEvent("tile_next_artwork_removed", null); } } diff --git a/main/src/main/java/com/google/android/apps/muzei/settings/SettingsActivity.java b/main/src/main/java/com/google/android/apps/muzei/settings/SettingsActivity.java index f24deb8..cca86d4 100644 --- a/main/src/main/java/com/google/android/apps/muzei/settings/SettingsActivity.java +++ b/main/src/main/java/com/google/android/apps/muzei/settings/SettingsActivity.java @@ -44,7 +44,6 @@ import android.widget.Toast; import com.google.android.apps.muzei.event.WallpaperActiveStateChangedEvent; import com.google.android.apps.muzei.render.MuzeiRendererFragment; import com.google.android.apps.muzei.util.DrawInsetsFrameLayout; -import com.google.firebase.analytics.FirebaseAnalytics; import net.nurik.roman.muzei.R; @@ -94,7 +93,6 @@ public class SettingsActivity extends AppCompatActivity if (getIntent() != null && getIntent().getCategories() != null && getIntent().getCategories().contains(Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES)) { - FirebaseAnalytics.getInstance(this).logEvent("notification_preferences_open", null); mStartSection = START_SECTION_ADVANCED; } @@ -224,7 +222,6 @@ public class SettingsActivity extends AppCompatActivity public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_get_more_sources: - FirebaseAnalytics.getInstance(SettingsActivity.this).logEvent("more_sources_open", null); try { Intent playStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/search?q=Muzei&c=apps")) @@ -239,7 +236,6 @@ public class SettingsActivity extends AppCompatActivity return true; case R.id.action_about: - FirebaseAnalytics.getInstance(SettingsActivity.this).logEvent("about_open", null); startActivity(new Intent(SettingsActivity.this, AboutActivity.class)); return true; } diff --git a/main/src/main/java/com/google/android/apps/muzei/settings/SettingsChooseSourceFragment.java b/main/src/main/java/com/google/android/apps/muzei/settings/SettingsChooseSourceFragment.java index 3ad9ef0..9a1a490 100644 --- a/main/src/main/java/com/google/android/apps/muzei/settings/SettingsChooseSourceFragment.java +++ b/main/src/main/java/com/google/android/apps/muzei/settings/SettingsChooseSourceFragment.java @@ -60,7 +60,6 @@ import com.google.android.apps.muzei.api.MuzeiContract; import com.google.android.apps.muzei.util.CheatSheet; import com.google.android.apps.muzei.util.ObservableHorizontalScrollView; import com.google.android.apps.muzei.util.Scrollbar; -import com.google.firebase.analytics.FirebaseAnalytics; import net.nurik.roman.muzei.R; @@ -132,10 +131,6 @@ public class SettingsChooseSourceFragment extends Fragment implements LoaderMana if (!(activity instanceof Callbacks)) { throw new ClassCastException("Activity must implement fragment callbacks."); } - - Bundle bundle = new Bundle(); - bundle.putString(FirebaseAnalytics.Param.ITEM_CATEGORY, "sources"); - FirebaseAnalytics.getInstance(getActivity()).logEvent(FirebaseAnalytics.Event.VIEW_ITEM_LIST, bundle); } @Override @@ -467,17 +462,10 @@ public class SettingsChooseSourceFragment extends Fragment implements LoaderMana ((Callbacks) getActivity()).onRequestCloseActivity(); } else if (source.setupActivity != null) { Bundle bundle = new Bundle(); - bundle.putString(FirebaseAnalytics.Param.ITEM_ID, source.componentName.flattenToShortString()); - bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, source.label); - bundle.putString(FirebaseAnalytics.Param.ITEM_CATEGORY, "sources"); - FirebaseAnalytics.getInstance(getActivity()).logEvent(FirebaseAnalytics.Event.VIEW_ITEM, bundle); mCurrentInitialSetupSource = source.componentName; launchSourceSetup(source); } else { Bundle bundle = new Bundle(); - bundle.putString(FirebaseAnalytics.Param.ITEM_ID, source.componentName.flattenToShortString()); - bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "sources"); - FirebaseAnalytics.getInstance(getActivity()).logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle); SourceManager.selectSource(getContext(), source.componentName); } } @@ -558,9 +546,6 @@ public class SettingsChooseSourceFragment extends Fragment implements LoaderMana if (requestCode == REQUEST_EXTENSION_SETUP) { if (resultCode == Activity.RESULT_OK && mCurrentInitialSetupSource != null) { Bundle bundle = new Bundle(); - bundle.putString(FirebaseAnalytics.Param.ITEM_ID, mCurrentInitialSetupSource.flattenToShortString()); - bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "sources"); - FirebaseAnalytics.getInstance(getActivity()).logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle); SourceManager.selectSource(getContext(), mCurrentInitialSetupSource); } diff --git a/main/src/main/java/com/google/android/apps/muzei/wearable/NotificationOpenListenerService.java b/main/src/main/java/com/google/android/apps/muzei/wearable/NotificationOpenListenerService.java deleted file mode 100644 index aa55e66..0000000 --- a/main/src/main/java/com/google/android/apps/muzei/wearable/NotificationOpenListenerService.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2014 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.muzei.wearable; - -import android.content.Intent; -import android.content.pm.PackageManager; - -import com.google.android.gms.wearable.MessageEvent; -import com.google.android.gms.wearable.WearableListenerService; - -public class NotificationOpenListenerService extends WearableListenerService { - @Override - public void onMessageReceived(MessageEvent messageEvent) { - // Only notification/open actions trigger this WearableListenerService - PackageManager packageManager = getPackageManager(); - Intent mainIntent = packageManager.getLaunchIntentForPackage(getPackageName()); - startActivity(mainIntent); - } -} diff --git a/main/src/main/java/com/google/android/apps/muzei/wearable/WearableController.java b/main/src/main/java/com/google/android/apps/muzei/wearable/WearableController.java deleted file mode 100644 index 29fd060..0000000 --- a/main/src/main/java/com/google/android/apps/muzei/wearable/WearableController.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2014 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.muzei.wearable; - -import android.content.ContentResolver; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Matrix; -import android.support.media.ExifInterface; -import android.util.Log; - -import com.google.android.apps.muzei.api.Artwork; -import com.google.android.apps.muzei.api.MuzeiContract; -import com.google.android.apps.muzei.render.ImageUtil; -import com.google.android.gms.common.ConnectionResult; -import com.google.android.gms.common.GoogleApiAvailability; -import com.google.android.gms.common.api.GoogleApiClient; -import com.google.android.gms.wearable.Asset; -import com.google.android.gms.wearable.DataMap; -import com.google.android.gms.wearable.PutDataMapRequest; -import com.google.android.gms.wearable.Wearable; - -import java.io.ByteArrayOutputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.concurrent.TimeUnit; - -/** - * Controller for working with the Android Wear API. Also in charge of dealing with - * Google Play Services. - */ -public class WearableController { - private static final String TAG = "WearableController"; - - public static synchronized void updateArtwork(Context context) { - if (ConnectionResult.SUCCESS != GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context)) { - return; - } - GoogleApiClient googleApiClient = new GoogleApiClient.Builder(context) - .addApi(Wearable.API) - .build(); - ConnectionResult connectionResult = googleApiClient.blockingConnect(5, TimeUnit.SECONDS); - if (!connectionResult.isSuccess()) { - if (connectionResult.getErrorCode() != ConnectionResult.API_UNAVAILABLE) { - Log.w(TAG, "onConnectionFailed: " + connectionResult); - } - return; - } - ContentResolver contentResolver = context.getContentResolver(); - Bitmap image = null; - try { - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inJustDecodeBounds = true; - BitmapFactory.decodeStream(contentResolver.openInputStream( - MuzeiContract.Artwork.CONTENT_URI), null, options); - options.inJustDecodeBounds = false; - if (options.outWidth > options.outHeight) { - options.inSampleSize = ImageUtil.calculateSampleSize(options.outHeight, 320); - } else { - options.inSampleSize = ImageUtil.calculateSampleSize(options.outWidth, 320); - } - image = BitmapFactory.decodeStream(contentResolver.openInputStream( - MuzeiContract.Artwork.CONTENT_URI), null, options); - } catch (FileNotFoundException e) { - Log.e(TAG, "Unable to read artwork to update Android Wear", e); - } - if (image != null) { - int rotation = getRotation(context); - if (rotation != 0) { - // Rotate the image so that Wear always gets a right side up image - Matrix matrix = new Matrix(); - matrix.postRotate(rotation); - image = Bitmap.createBitmap(image, 0, 0, image.getWidth(), image.getHeight(), - matrix, true); - } - final ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); - image.compress(Bitmap.CompressFormat.PNG, 100, byteStream); - Asset asset = Asset.createFromBytes(byteStream.toByteArray()); - PutDataMapRequest dataMapRequest = PutDataMapRequest.create("/artwork"); - Artwork artwork = MuzeiContract.Artwork.getCurrentArtwork(context); - dataMapRequest.getDataMap().putDataMap("artwork", DataMap.fromBundle(artwork.toBundle())); - dataMapRequest.getDataMap().putAsset("image", asset); - Wearable.DataApi.putDataItem(googleApiClient, dataMapRequest.asPutDataRequest().setUrgent()).await(); - } - googleApiClient.disconnect(); - } - - private static int getRotation(Context context) { - ContentResolver contentResolver = context.getContentResolver(); - int rotation = 0; - try (InputStream in = contentResolver.openInputStream( - MuzeiContract.Artwork.CONTENT_URI)) { - if (in == null) { - return 0; - } - ExifInterface exifInterface = new ExifInterface(in); - int orientation = exifInterface.getAttributeInt( - ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); - switch (orientation) { - case ExifInterface.ORIENTATION_ROTATE_90: rotation = 90; break; - case ExifInterface.ORIENTATION_ROTATE_180: rotation = 180; break; - case ExifInterface.ORIENTATION_ROTATE_270: rotation = 270; break; - } - } catch (IOException|NumberFormatException|StackOverflowError ignored) { - } - return rotation; - } -} diff --git a/settings.gradle b/settings.gradle index eac0130..37a120e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':api', ':android-client-common', ':source-featured-art', ':source-gallery', ':main', ':wearable', ':example-source-500px', 'example-watchface' +include ':api', ':android-client-common', ':source-featured-art', ':source-gallery', ':main', ':example-source-500px'