• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package js.kbars;
2 
3 import android.app.Activity;
4 import android.content.Intent;
5 import android.graphics.Bitmap;
6 import android.graphics.Bitmap.CompressFormat;
7 import android.graphics.BitmapFactory;
8 import android.graphics.drawable.BitmapDrawable;
9 import android.net.Uri;
10 import android.util.Log;
11 import android.view.Menu;
12 import android.view.MenuItem;
13 import android.view.MenuItem.OnMenuItemClickListener;
14 import android.view.View;
15 import java.io.File;
16 import java.io.FileNotFoundException;
17 import java.io.FileOutputStream;
18 import java.io.IOException;
19 
20 public final class ImageBackgroundMenuItem implements OnMenuItemClickListener {
21     public static final int REQUEST_CODE = 234;
22     private static final String TAG = ImageBackgroundMenuItem.class.getSimpleName();
23     private final Activity mActivity;
24     private final View mTarget;
25 
ImageBackgroundMenuItem(Menu menu, Activity activity, View target)26     public ImageBackgroundMenuItem(Menu menu, Activity activity, View target) {
27         this.mActivity = activity;
28         this.mTarget = target;
29         menu.add("Select image background...").setOnMenuItemClickListener(this);
30         loadBitmap();
31     }
32 
onMenuItemClick(MenuItem item)33     public boolean onMenuItemClick(MenuItem item) {
34         chooseBackground();
35         return true;
36     }
37 
onActivityResult(int resultCode, Intent data)38     public void onActivityResult(int resultCode, Intent data) {
39         if (resultCode == -1) {
40             Uri image = data.getData();
41             try {
42                 Bitmap bitmap = BitmapFactory.decodeStream(this.mActivity.getContentResolver().openInputStream(image));
43                 if (bitmap != null) {
44                     setTargetBackground(bitmap);
45                     saveBitmap(bitmap);
46                 }
47             } catch (FileNotFoundException e) {
48                 Log.w(TAG, "Error getting image " + image, e);
49             }
50         }
51     }
52 
chooseBackground()53     private void chooseBackground() {
54         Intent photoPickerIntent = new Intent("android.intent.action.PICK");
55         photoPickerIntent.setType("image/*");
56         this.mActivity.startActivityForResult(photoPickerIntent, REQUEST_CODE);
57     }
58 
bitmapFile()59     private File bitmapFile() {
60         return new File(this.mActivity.getCacheDir(), "background.png");
61     }
62 
saveBitmap(Bitmap bitmap)63     private void saveBitmap(Bitmap bitmap) {
64         FileNotFoundException e;
65         Throwable th;
66         File f = bitmapFile();
67         if (f.exists()) {
68             f.delete();
69         }
70         if (bitmap != null) {
71             try {
72                 FileOutputStream out = new FileOutputStream(f);
73                 bitmap.compress(CompressFormat.PNG, 100, out);
74                 out.close();
75             } catch (IOException e1) {
76                 e1.printStackTrace();
77             }
78         }
79     }
80 
loadBitmap()81     private void loadBitmap() {
82         Bitmap bitmap = loadBitmapFromCache();
83         if (bitmap == null) {
84             bitmap = loadBitmapFromAssets();
85         }
86         setTargetBackground(bitmap);
87     }
88 
loadBitmapFromCache()89     private Bitmap loadBitmapFromCache() {
90         File f = bitmapFile();
91         return f.exists() ? BitmapFactory.decodeFile(f.getAbsolutePath()) : null;
92     }
93 
loadBitmapFromAssets()94     private Bitmap loadBitmapFromAssets() {
95         try {
96             return BitmapFactory.decodeStream(this.mActivity.getAssets().open("background.png"));
97         } catch (IOException e) {
98             throw new RuntimeException(e);
99         }
100     }
101 
setTargetBackground(Bitmap bitmap)102     private void setTargetBackground(Bitmap bitmap) {
103         if (bitmap == null) {
104             this.mTarget.setBackground(null);
105         } else {
106             this.mTarget.setBackground(new BitmapDrawable(this.mActivity.getResources(), bitmap));
107         }
108     }
109 }
110