Java tutorial
//package com.java2s; /* * Copyright 2015. Appsi Mobile * * 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. */ import android.annotation.TargetApi; import android.content.ContentResolver; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; import android.graphics.Rect; import android.net.Uri; import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; public class Main { public static Bitmap getSidebarWallpaper(Context context, SharedPreferences preferences, int sidebarWidth, int sidebarHeight) { return getSidebarWallpaperApi10(context, preferences, sidebarWidth, sidebarHeight); } @TargetApi(10) private static Bitmap getSidebarWallpaperApi10(Context context, SharedPreferences preferences, int sidebarWidth, int sidebarHeight) { boolean useBackground = preferences.getBoolean("pref_sidebar_custom_background", false); if (!useBackground) return null; String path = preferences.getString("pref_sidebar_background_image", null); if (path == null) return null; try { BitmapFactory.Options bounds = decodeBounds(createWallpaperInputStream(context, path)); int decodeHeight = Math.min(bounds.outHeight, sidebarHeight); int decodeWidth = Math.min(bounds.outWidth, sidebarWidth); InputStream in = createWallpaperInputStream(context, path); try { BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(in, false); BitmapFactory.Options options = new BitmapFactory.Options(); return decoder.decodeRegion(new Rect(0, 0, decodeWidth, decodeHeight), options); } finally { in.close(); } } catch (IOException e) { return null; } } static BitmapFactory.Options decodeBounds(InputStream in) throws IOException { BitmapFactory.Options options = new BitmapFactory.Options(); try { // Decode image size options.inJustDecodeBounds = true; BitmapFactory.decodeStream(in, null, options); return options; } finally { in.close(); } } public static InputStream createWallpaperInputStream(Context context, String preferenceValue) throws FileNotFoundException { File file = new File(preferenceValue); if (file.exists()) { return new FileInputStream(file); } Uri uri = Uri.parse(preferenceValue); ContentResolver contentResolver = context.getContentResolver(); try { return contentResolver.openInputStream(uri); } catch (SecurityException e) { Log.i("ThemingUtils", "unable to open background image", e); FileNotFoundException fileNotFoundException = new FileNotFoundException(e.getMessage()); fileNotFoundException.initCause(e); throw fileNotFoundException; } } }