Java tutorial
/* * This is the source code of Telegram for Android v. 3.x.x. * It is licensed under GNU GPL v. 2 or later. * You should have received a copy of the license in this archive (see LICENSE). * * Copyright Nikolai Kudashov, 2013-2017. */ package org.telegram.ui.Components; import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Point; import android.net.Uri; import android.os.Build; import android.provider.MediaStore; import android.support.v4.content.FileProvider; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.BuildConfig; import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; import org.telegram.messenger.ImageLoader; import org.telegram.messenger.LocaleController; import org.telegram.messenger.R; import org.telegram.messenger.Utilities; import org.telegram.ui.ActionBar.AlertDialog; import java.io.File; import java.io.FileOutputStream; public class WallpaperUpdater { private String currentPicturePath; private File picturePath = null; private Activity parentActivity; private WallpaperUpdaterDelegate delegate; private File currentWallpaperPath; public interface WallpaperUpdaterDelegate { void didSelectWallpaper(File file, Bitmap bitmap); void needOpenColorPicker(); } public WallpaperUpdater(Activity activity, WallpaperUpdaterDelegate wallpaperUpdaterDelegate) { parentActivity = activity; delegate = wallpaperUpdaterDelegate; currentWallpaperPath = new File(FileLoader.getInstance().getDirectory(FileLoader.MEDIA_DIR_CACHE), Utilities.random.nextInt() + ".jpg"); } public void showAlert(final boolean fromTheme) { AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity); CharSequence[] items; if (fromTheme) { items = new CharSequence[] { LocaleController.getString("FromCamera", R.string.FromCamera), LocaleController.getString("FromGalley", R.string.FromGalley), LocaleController.getString("SelectColor", R.string.SelectColor), LocaleController.getString("Default", R.string.Default), LocaleController.getString("Cancel", R.string.Cancel) }; } else { items = new CharSequence[] { LocaleController.getString("FromCamera", R.string.FromCamera), LocaleController.getString("FromGalley", R.string.FromGalley), LocaleController.getString("Cancel", R.string.Cancel) }; } builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { try { if (i == 0) { try { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File image = AndroidUtilities.generatePicturePath(); if (image != null) { if (Build.VERSION.SDK_INT >= 24) { takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile( parentActivity, BuildConfig.APPLICATION_ID + ".provider", image)); takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); } else { takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(image)); } currentPicturePath = image.getAbsolutePath(); } parentActivity.startActivityForResult(takePictureIntent, 10); } catch (Exception e) { FileLog.e(e); } } else if (i == 1) { Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); photoPickerIntent.setType("image/*"); parentActivity.startActivityForResult(photoPickerIntent, 11); } else if (fromTheme) { if (i == 2) { delegate.needOpenColorPicker(); } else if (i == 3) { delegate.didSelectWallpaper(null, null); } } } catch (Exception e) { FileLog.e(e); } } }); builder.show(); } public void cleanup() { currentWallpaperPath.delete(); } public File getCurrentWallpaperPath() { return currentWallpaperPath; } public String getCurrentPicturePath() { return currentPicturePath; } public void setCurrentPicturePath(String value) { currentPicturePath = value; } public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { if (requestCode == 10) { AndroidUtilities.addMediaToGallery(currentPicturePath); FileOutputStream stream = null; try { Point screenSize = AndroidUtilities.getRealScreenSize(); Bitmap bitmap = ImageLoader.loadBitmap(currentPicturePath, null, screenSize.x, screenSize.y, true); stream = new FileOutputStream(currentWallpaperPath); bitmap.compress(Bitmap.CompressFormat.JPEG, 87, stream); delegate.didSelectWallpaper(currentWallpaperPath, bitmap); } catch (Exception e) { FileLog.e(e); } finally { try { if (stream != null) { stream.close(); } } catch (Exception e) { FileLog.e(e); } } currentPicturePath = null; } else if (requestCode == 11) { if (data == null || data.getData() == null) { return; } try { Point screenSize = AndroidUtilities.getRealScreenSize(); Bitmap bitmap = ImageLoader.loadBitmap(null, data.getData(), screenSize.x, screenSize.y, true); FileOutputStream stream = new FileOutputStream(currentWallpaperPath); bitmap.compress(Bitmap.CompressFormat.JPEG, 87, stream); delegate.didSelectWallpaper(currentWallpaperPath, bitmap); } catch (Exception e) { FileLog.e(e); } } } } }