/* * This is the source code of Telegram for Android v. 5.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-2018. */ package org.telegram.ui.Components; import android.Manifest; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.Point; import android.net.Uri; import android.os.Build; import android.provider.MediaStore; import androidx.core.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.SendMessagesHelper; import org.telegram.messenger.Utilities; import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.PhotoAlbumPickerActivity; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; import kotlin.Unit; import tw.nekomimi.nekogram.BottomBuilder; public class WallpaperUpdater { private String currentPicturePath; private File picturePath = null; private Activity parentActivity; private BaseFragment parentFragment; private WallpaperUpdaterDelegate delegate; private File currentWallpaperPath; public interface WallpaperUpdaterDelegate { void didSelectWallpaper(File file, Bitmap bitmap, boolean gallery); void needOpenColorPicker(); } public WallpaperUpdater(Activity activity, BaseFragment fragment, WallpaperUpdaterDelegate wallpaperUpdaterDelegate) { parentActivity = activity; parentFragment = fragment; delegate = wallpaperUpdaterDelegate; } public void showAlert(final boolean fromTheme) { BottomBuilder builder = new BottomBuilder(parentActivity); builder.addTitle(LocaleController.getString("ChoosePhoto", R.string.ChoosePhoto), true); String[] items; int[] icons; if (fromTheme) { items = new String[]{LocaleController.getString("ChooseTakePhoto", R.string.ChooseTakePhoto), LocaleController.getString("SelectFromGallery", R.string.SelectFromGallery), LocaleController.getString("SelectColor", R.string.SelectColor), LocaleController.getString("Default", R.string.Default)}; icons = null; } else { items = new String[]{LocaleController.getString("ChooseTakePhoto", R.string.ChooseTakePhoto), LocaleController.getString("SelectFromGallery", R.string.SelectFromGallery)}; icons = new int[]{R.drawable.baseline_camera_alt_24, R.drawable.baseline_image_24}; } builder.addItems(items, icons, (i, t, c) -> { 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) { openGallery(); } else if (fromTheme) { if (i == 2) { delegate.needOpenColorPicker(); } else if (i == 3) { delegate.didSelectWallpaper(null, null, false); } } } catch (Exception e) { FileLog.e(e); } return Unit.INSTANCE; }); builder.show(); } public void openGallery() { if (parentFragment != null) { if (Build.VERSION.SDK_INT >= 23 && parentFragment.getParentActivity() != null) { if (parentFragment.getParentActivity().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { parentFragment.getParentActivity().requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 4); return; } } PhotoAlbumPickerActivity fragment = new PhotoAlbumPickerActivity(PhotoAlbumPickerActivity.SELECT_TYPE_WALLPAPER, false, false, null); fragment.setAllowSearchImages(false); fragment.setDelegate(new PhotoAlbumPickerActivity.PhotoAlbumPickerActivityDelegate() { @Override public void didSelectPhotos(ArrayList photos, boolean notify, int scheduleDate) { WallpaperUpdater.this.didSelectPhotos(photos); } @Override public void startPhotoSelectActivity() { try { Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); photoPickerIntent.setType("image/*"); parentActivity.startActivityForResult(photoPickerIntent, 11); } catch (Exception e) { FileLog.e(e); } } }); parentFragment.presentFragment(fragment); } else { Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); photoPickerIntent.setType("image/*"); parentActivity.startActivityForResult(photoPickerIntent, 11); } } private void didSelectPhotos(ArrayList photos) { try { if (!photos.isEmpty()) { SendMessagesHelper.SendingMediaInfo info = photos.get(0); if (info.path != null) { currentWallpaperPath = new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), Utilities.random.nextInt() + ".jpg"); Point screenSize = AndroidUtilities.getRealScreenSize(); Bitmap bitmap = ImageLoader.loadBitmap(info.path, null, screenSize.x, screenSize.y, true); FileOutputStream stream = new FileOutputStream(currentWallpaperPath); bitmap.compress(Bitmap.CompressFormat.JPEG, 87, stream); delegate.didSelectWallpaper(currentWallpaperPath, bitmap, true); } } } catch (Throwable e) { FileLog.e(e); } } public void cleanup() { /*if (currentWallpaperPath != null) { currentWallpaperPath.delete(); }*/ } 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 { currentWallpaperPath = new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), Utilities.random.nextInt() + ".jpg"); 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, false); } 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 { currentWallpaperPath = new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), Utilities.random.nextInt() + ".jpg"); 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, false); } catch (Exception e) { FileLog.e(e); } } } } }