From 03093125f772fd331a872de57e85b9e799aaa4f5 Mon Sep 17 00:00:00 2001 From: Finn M Glas Date: Sat, 23 May 2020 17:24:55 +0200 Subject: [PATCH] Implement choosing of background images 'Custom theme' can now be applied --- .../java/com/finnmglas/launcher/Functions.kt | 6 ++ .../com/finnmglas/launcher/MainActivity.kt | 7 +- .../finnmglas/launcher/SettingsActivity.kt | 94 +++++++------------ app/src/main/res/layout/activity_main.xml | 8 ++ 4 files changed, 54 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/com/finnmglas/launcher/Functions.kt b/app/src/main/java/com/finnmglas/launcher/Functions.kt index 62845b4..43261be 100644 --- a/app/src/main/java/com/finnmglas/launcher/Functions.kt +++ b/app/src/main/java/com/finnmglas/launcher/Functions.kt @@ -8,6 +8,7 @@ import android.content.Intent import android.content.SharedPreferences import android.content.pm.PackageManager import android.content.pm.ResolveInfo +import android.graphics.Bitmap import android.net.Uri import android.os.Bundle import android.provider.Settings @@ -28,11 +29,16 @@ var clockApp = "" var appsList : MutableList = mutableListOf() +var background : Bitmap? = null + /** REQUEST CODES */ val REQUEST_PICK_IMAGE = 1 val REQUEST_CHOOSE_APP = 2 val REQUEST_UNINSTALL = 3 +val REQUEST_PERMISSION_STORAGE = 4 + +/** Animate */ // Taken from https://stackoverflow.com/questions/47293269 fun View.blink( diff --git a/app/src/main/java/com/finnmglas/launcher/MainActivity.kt b/app/src/main/java/com/finnmglas/launcher/MainActivity.kt index bab709e..71a9b02 100644 --- a/app/src/main/java/com/finnmglas/launcher/MainActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/MainActivity.kt @@ -6,9 +6,6 @@ import android.os.AsyncTask import android.os.Bundle import android.util.DisplayMetrics import android.view.* -import android.view.animation.Animation -import android.view.animation.LinearInterpolator -import android.view.animation.RotateAnimation import androidx.appcompat.app.AppCompatActivity import androidx.core.view.GestureDetectorCompat import kotlinx.android.synthetic.main.activity_main.* @@ -52,6 +49,7 @@ class MainActivity : AppCompatActivity(), window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) currentTheme = getSavedTheme(this) + setTheme( when (currentTheme) { "dark" -> R.style.darkTheme @@ -94,6 +92,9 @@ class MainActivity : AppCompatActivity(), // TODO: do this immediately after changing preferences if (currentTheme != getSavedTheme(this)) recreate() + if (background != null) { + background_image.setImageBitmap(background) + } val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()) val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault()) diff --git a/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt b/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt index ee3d6b2..ca2dfaa 100644 --- a/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt @@ -3,16 +3,12 @@ package com.finnmglas.launcher import android.Manifest import android.app.AlertDialog import android.content.* -import android.database.Cursor -import android.graphics.Bitmap -import android.graphics.ImageDecoder -import android.graphics.drawable.BitmapDrawable +import android.content.pm.PackageManager import android.net.Uri import android.os.Build import android.os.Bundle import android.provider.MediaStore import android.provider.Settings -import android.view.Gravity import android.view.View import android.view.WindowManager import android.widget.Toast @@ -24,8 +20,6 @@ import com.google.android.material.tabs.TabLayout import kotlinx.android.synthetic.main.activity_settings.* import kotlinx.android.synthetic.main.activity_settings.container import kotlinx.android.synthetic.main.fragment_settings_theme.* -import java.io.FileNotFoundException -import java.io.IOException class SettingsActivity : AppCompatActivity() { @@ -92,44 +86,8 @@ class SettingsActivity : AppCompatActivity() { loadSettings(sharedPref) } - REQUEST_PICK_IMAGE -> { - - if (resultCode == RESULT_OK) { - if (data != null) { - - val selectedImage: Uri? = data.data - var bitmap: Bitmap? = null - - try { - // different SDKs, different image choosing - if (Build.VERSION.SDK_INT >= 28) { - container.background = ImageDecoder.decodeDrawable( - ImageDecoder.createSource( - this.contentResolver, selectedImage!!)) - } else { - val b = BitmapDrawable( - MediaStore.Images.Media.getBitmap(this.contentResolver, selectedImage) - ) - b.gravity = Gravity.CENTER - container.background = b - } - - Toast.makeText(this, "Chose", Toast.LENGTH_SHORT).show() - - //val _image : ImageView = background_img - //_image.setImageBitmap(bitmap) - - } catch (e: FileNotFoundException) { - Toast.makeText(this, "File not found", Toast.LENGTH_SHORT).show() - e.printStackTrace() - } catch (e: IOException) { - Toast.makeText(this, "IO Except", Toast.LENGTH_SHORT).show() - e.printStackTrace() - } - } - } - } - + REQUEST_PERMISSION_STORAGE -> letUserPickImage() + REQUEST_PICK_IMAGE -> handlePickedImage(resultCode, data) else -> super.onActivityResult(requestCode, resultCode, data) } } @@ -264,23 +222,43 @@ class SettingsActivity : AppCompatActivity() { } fun chooseCustomTheme(view: View) { - /*val intent = Intent() + + // Request permission (on newer APIs) + if (Build.VERSION.SDK_INT >= 23) { + when { + ContextCompat.checkSelfPermission(this, + Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED + -> letUserPickImage() + shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE) + -> {} + else + -> requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_PERMISSION_STORAGE) + } + } + else letUserPickImage() + } + + private fun letUserPickImage() { + val intent = Intent() intent.type = "image/*" - intent.action = Intent.ACTION_GET_CONTENT - startActivityForResult(Intent.createChooser(intent, "Select Picture"), REQUEST_PICK_IMAGE)*/ - - */ - - // TODO: Runtime request permisson on newer APIs - - - val intent : Intent = Intent() - intent.type = "image/*" - intent.action = Intent.ACTION_PICK - intent.putExtra("crop", "true") + intent.action = Intent.ACTION_PICK // other option: Intent.ACTION_GET_CONTENT + //intent.putExtra("crop", "true") //intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()) startActivityForResult(intent, REQUEST_PICK_IMAGE) + } + private fun handlePickedImage(resultCode: Int, data: Intent?) { + + if (resultCode == RESULT_OK) { + if (data == null) return + + //BitmapFactory.(data.data) + val imageUri = data.data + background = MediaStore.Images.Media.getBitmap(this.contentResolver, imageUri) + + saveTheme(this, "custom") + recreate() + } } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 22f25bc..e21648a 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -9,6 +9,14 @@ android:longClickable="false" tools:context=".MainActivity"> + +