From a4c874ed06c34a742f10b6df6b33ac6d4df6131d Mon Sep 17 00:00:00 2001 From: Michel Roux Date: Mon, 9 Aug 2021 00:57:03 +0200 Subject: [PATCH] Add image download by url --- app/build.gradle | 5 +- app/src/main/AndroidManifest.xml | 15 ++++ .../setaswallpaper/SetWallpaperActivity.java | 74 ++++++++++++++++++- app/src/main/res/xml/file_paths.xml | 4 + 4 files changed, 94 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/xml/file_paths.xml diff --git a/app/build.gradle b/app/build.gradle index ce9e715..57fe680 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,7 +8,7 @@ android { defaultConfig { applicationId "net.crystalyx.setaswallpaper" - minSdkVersion 4 + minSdkVersion 14 targetSdkVersion 30 versionCode 1 versionName "1.0" @@ -27,4 +27,5 @@ android { } dependencies { -} \ No newline at end of file + implementation "androidx.core:core:1.6.0" +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 22446a9..211f0f4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + + + + + + + + + + diff --git a/app/src/main/java/net/crystalyx/setaswallpaper/SetWallpaperActivity.java b/app/src/main/java/net/crystalyx/setaswallpaper/SetWallpaperActivity.java index ad1409f..7e11228 100644 --- a/app/src/main/java/net/crystalyx/setaswallpaper/SetWallpaperActivity.java +++ b/app/src/main/java/net/crystalyx/setaswallpaper/SetWallpaperActivity.java @@ -4,6 +4,16 @@ import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.widget.Toast; +import androidx.core.content.FileProvider; + +import java.io.*; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.Random; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class SetWallpaperActivity extends Activity { @@ -12,11 +22,71 @@ public class SetWallpaperActivity extends Activity { super.onCreate(savedInstanceState); Intent intent = getIntent(); - if (Intent.ACTION_SEND.equals(intent.getAction())) { - launchWallpaperActivity(intent.getParcelableExtra(Intent.EXTRA_STREAM), intent.getType()); + String type = intent.getType(); + + if (Intent.ACTION_SEND.equals(intent.getAction()) && type != null) { + if ("text/plain".equals(type)) { + handleUrl(intent.getStringExtra(Intent.EXTRA_TEXT)); + } else if (type.startsWith("image/")) { + launchWallpaperActivity(intent.getParcelableExtra(Intent.EXTRA_STREAM), type); + } } } + private String generateRandomString() { + int leftLimit = 97; // letter 'a' + int rightLimit = 122; // letter 'z' + int targetStringLength = 3; + Random random = new Random(); + StringBuilder buffer = new StringBuilder(targetStringLength); + for (int i = 0; i < targetStringLength; i++) { + int randomLimitedInt = leftLimit + (int) + (random.nextFloat() * (rightLimit - leftLimit + 1)); + buffer.append((char) randomLimitedInt); + } + return buffer.toString(); + } + + private void handleUrl(String textUrl) { + URL url; + + try { + url = new URL(textUrl); + } catch (MalformedURLException e) { + Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); + return; + } + + ExecutorService executor = Executors.newSingleThreadExecutor(); + + executor.execute(() -> { + try { + File outputFile = File.createTempFile(generateRandomString(), generateRandomString(), getCacheDir()); + URLConnection connection = url.openConnection(); + connection.connect(); + + InputStream inputStream = connection.getInputStream(); + OutputStream outputStream = new FileOutputStream(outputFile); + + byte[] data = new byte[1024]; + int count; + + while ((count = inputStream.read(data)) != -1) { + outputStream.write(data, 0, count); + } + + outputStream.flush(); + outputStream.close(); + inputStream.close(); + + Uri uri = FileProvider.getUriForFile(getApplicationContext(), getPackageName() + ".provider", outputFile); + launchWallpaperActivity(uri, connection.getContentType()); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + private void launchWallpaperActivity(Uri uri, String mimeType) { Intent intent = new Intent(Intent.ACTION_ATTACH_DATA); intent.addCategory(Intent.CATEGORY_DEFAULT); diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..70d171f --- /dev/null +++ b/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,4 @@ + + + +