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