mirror of https://github.com/NekoX-Dev/NekoX.git
222 lines
9.6 KiB
Java
222 lines
9.6 KiB
Java
/*
|
|
* 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<SendMessagesHelper.SendingMediaInfo> 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<SendMessagesHelper.SendingMediaInfo> 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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|