7
7
import android .content .Intent ;
8
8
import android .content .pm .PackageManager ;
9
9
import android .graphics .Bitmap ;
10
+ import android .net .Uri ;
10
11
import android .os .Bundle ;
12
+ import android .os .Environment ;
11
13
import android .provider .MediaStore ;
12
14
import android .support .annotation .NonNull ;
13
15
import android .support .v4 .app .ActivityCompat ;
26
28
import com .sdsmdg .kd .trianglify .models .Palette ;
27
29
import com .sdsmdg .kd .trianglify .views .TrianglifyView ;
28
30
31
+ import java .io .File ;
32
+ import java .io .FileNotFoundException ;
33
+ import java .io .FileOutputStream ;
29
34
import java .io .IOException ;
35
+ import java .io .OutputStream ;
36
+ import java .text .SimpleDateFormat ;
37
+ import java .util .Date ;
38
+ import java .util .Locale ;
30
39
import java .util .Random ;
31
40
32
41
public class MainActivity extends AppCompatActivity {
@@ -225,7 +234,12 @@ public int pxToDp(int px) {
225
234
public boolean onOptionsItemSelected (MenuItem item ) {
226
235
switch (item .getItemId ()) {
227
236
case R .id .action_save :
228
- exportImage ();
237
+ try {
238
+ exportImage ();
239
+ } catch (IOException e ) {
240
+ Toast .makeText (MainActivity .this ,
241
+ "Storage access failed!" ,Toast .LENGTH_LONG ).show ();
242
+ }
229
243
break ;
230
244
case R .id .action_about :
231
245
Intent aboutActivityIntent = new Intent (this , AboutActivity .class );
@@ -268,7 +282,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
268
282
}
269
283
}
270
284
271
- private void exportImage () {
285
+ private void exportImage () throws IOException {
272
286
// Checks if permission is required for android version > 6
273
287
boolean permissionStatus = ContextCompat .checkSelfPermission (this ,
274
288
Manifest .permission .WRITE_EXTERNAL_STORAGE ) != PackageManager .PERMISSION_GRANTED ;
@@ -279,18 +293,22 @@ private void exportImage() {
279
293
PERMISSION_CODE );
280
294
} else {
281
295
Bitmap bitmap = trianglifyView .getBitmap ();
282
- if (bitmap != null ) {
296
+ if (bitmap != null )
283
297
addImageToGallery (bitmap , this );
284
- Toast .makeText (this , "Saved!" , Toast .LENGTH_SHORT ).show ();
285
- } else {
298
+ else
286
299
Toast .makeText (this , "Unable to generate image, please try again" ,
287
300
Toast .LENGTH_LONG ).show ();
288
- }
301
+
289
302
}
290
303
}
291
304
292
- public static void addImageToGallery (Bitmap bitmap , Context context ) {
293
- MediaStore .Images .Media .insertImage (context .getContentResolver (), bitmap , "" , "" );
305
+ public static void addImageToGallery (Bitmap bitmap , Context context ) throws IOException {
306
+ String timeStamp = "IMG_" + new SimpleDateFormat ("yyyyMMdd_HHmmss" , Locale .US ).format (new Date ()) + ".png" ;
307
+ OutputStream os = new FileOutputStream (Environment .getExternalStoragePublicDirectory (Environment .DIRECTORY_PICTURES ) + File .separator + timeStamp );
308
+ bitmap .compress (Bitmap .CompressFormat .PNG , 100 , os );
309
+ os .flush ();
310
+ os .close ();
311
+ Toast .makeText (context , "Saved!" , Toast .LENGTH_SHORT ).show ();
294
312
}
295
313
296
314
// Sets bitmap from trianglify view as wallpaper of device
@@ -328,7 +346,12 @@ public void onRequestPermissionsResult(int requestCode,
328
346
case PERMISSION_CODE :
329
347
if (grantResults .length > 0
330
348
&& grantResults [0 ] == PackageManager .PERMISSION_GRANTED ) {
331
- exportImage ();
349
+ try {
350
+ exportImage ();
351
+ } catch (IOException e ) {
352
+ Toast .makeText (MainActivity .this ,
353
+ "Storage access failed!" ,Toast .LENGTH_LONG ).show ();
354
+ }
332
355
} else {
333
356
Toast .makeText (this , "Storage access failed, check permission" ,
334
357
Toast .LENGTH_LONG ).show ();
0 commit comments