1de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang/*
2de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * Copyright (C) 2015 The Android Open Source Project
3de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang *
4de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * Licensed under the Apache License, Version 2.0 (the "License");
5de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * you may not use this file except in compliance with the License.
6de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * You may obtain a copy of the License at
7de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang *
8de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang *      http://www.apache.org/licenses/LICENSE-2.0
9de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang *
10de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * Unless required by applicable law or agreed to in writing, software
11de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * distributed under the License is distributed on an "AS IS" BASIS,
12de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * See the License for the specific language governing permissions and
14de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * limitations under the License.
15de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang */
16de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
174cead8034aab0e20e402baee87cbe9129db00192Stephen Hinespackage com.android.rs.refocus;
18de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
19de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport android.content.Context;
20de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport android.content.Intent;
21de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport android.graphics.Bitmap;
22de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport android.net.Uri;
23de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport android.os.Build;
24de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport android.os.Environment;
25de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
26de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport java.io.File;
27de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport java.io.FileNotFoundException;
28de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport java.io.FileOutputStream;
29de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangimport java.io.IOException;
30de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
31de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang/**
32de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang * Utility class to save images into android image database
33de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang */
34de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wangpublic class MediaStoreSaver {
35de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    public static final String savePNG(Bitmap bitmap,
36de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang                                       String folderName,
37de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang                                       String imageName,
38de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang                                        Context mContext) {
39de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
40de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        String folder_path = folder.getAbsolutePath();
41de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        String file_path = folder_path + "/" + folderName;
42de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        File dir = new File(file_path);
43de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
44de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        if (!dir.exists()) {
45de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang            System.out.println("make directory: " + dir.getAbsolutePath());
46de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang            dir.mkdirs();
47de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        }
48de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        int n = dir.listFiles().length;
49de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        File file = new File(dir, imageName + n + ".png");
50de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        try {
51de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang            FileOutputStream fOut = new FileOutputStream(file);
52de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang            bitmap.compress(Bitmap.CompressFormat.PNG, 0, fOut);
53de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang            System.out.println("saved image: " + file.getAbsolutePath());
54de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang            fOut.flush();
55de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang            fOut.close();
56de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        } catch (FileNotFoundException e) {
57de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang            e.printStackTrace();
58de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        } catch (IOException e) {
59de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang            e.printStackTrace();
60de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        }
61de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
62de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        MediaStorageScan(mContext, file);
63de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        return file.getAbsolutePath();
64de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    }
65de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    /*
66de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang     * Refresh image files to view them on computer
67de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang     */
68de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    private static void MediaStorageScan(Context context, final File file) {
69de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        final Uri fileUri = Uri.fromFile(file);
70de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
71de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        // New way
72de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
73de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang            context.sendBroadcast(new Intent("android.hardware.action.NEW_PICTURE", fileUri));
74de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        }
75de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
76de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        // Keep compatibility
77de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        context.sendBroadcast(new Intent("com.android.camera.NEW_PICTURE", fileUri));
78de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
79de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        // Usual way
80de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        final Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
81de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        intent.setData(fileUri);
82de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang        context.sendBroadcast(intent);
83de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang    }
84de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang
85de2f182fdb522689e05280e449a39ec2c1b53e1fCindy Wang}
86