117d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen/* 217d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * Copyright (C) 2014 Google Inc. All Rights Reserved. 317d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * 417d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * Licensed under the Apache License, Version 2.0 (the "License"); 517d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * you may not use this file except in compliance with the License. 617d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * You may obtain a copy of the License at 717d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * 817d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * http://www.apache.org/licenses/LICENSE-2.0 917d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * 1017d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * Unless required by applicable law or agreed to in writing, software 1117d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * distributed under the License is distributed on an "AS IS" BASIS, 1217d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1317d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * See the License for the specific language governing permissions and 1417d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * limitations under the License. 1517d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen */ 1617d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen 1717d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chenpackage com.example.android.musicservicedemo; 1817d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen 1917d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chenimport android.graphics.Bitmap; 2017d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chenimport android.graphics.BitmapFactory; 2117d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chenimport android.util.Log; 2217d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen 2317d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chenimport java.io.IOException; 2417d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chenimport java.io.InputStream; 2517d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chenimport java.net.HttpURLConnection; 2617d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chenimport java.net.URL; 2717d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen 2817d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chenpublic class Utils { 2917d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen 3017d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen private static final String TAG = "Utils"; 3117d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen 3217d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen /** 3317d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * Utility method to check that parameters are not null 3417d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * 3517d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * @param object 3617d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen */ 3717d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen public static final void checkNotNull(Object object) { 3817d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen if (object == null) { 3917d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen throw new NullPointerException(); 4017d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen } 4117d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen } 4217d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen 4317d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen /** 4417d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * Utility to download a bitmap 4517d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * 4617d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * @param source 4717d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * @return 4817d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen */ 4917d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen public static Bitmap getBitmapFromURL(String source) { 5017d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen try { 5117d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen URL url = new URL(source); 5217d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); 5317d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen httpConnection.setDoInput(true); 5417d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen httpConnection.connect(); 5517d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen InputStream inputStream = httpConnection.getInputStream(); 5617d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen return BitmapFactory.decodeStream(inputStream); 5717d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen } catch (IOException e) { 5817d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen Log.e(TAG, "getBitmapFromUrl: " + source, e); 5917d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen } 6017d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen return null; 6117d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen } 6217d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen 6317d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen /** 6417d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * Utility method to wrap an index 6517d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * 6617d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * @param i 6717d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * @param size 6817d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen * @return 6917d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen */ 7017d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen public static int wrapIndex(int i, int size) { 7117d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen int m = i % size; 7217d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen if (m < 0) { // java modulus can be negative 7317d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen m += size; 7417d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen } 7517d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen return m; 7617d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen } 7717d47989ee53c9e54f250d29a343ba949edf0ff9Yao Chen} 78