From 3bbfc5374cff47d3082525ce75193cb5fefa8f26 Mon Sep 17 00:00:00 2001 From: Finn M Glas Date: Sun, 24 May 2020 21:19:25 +0200 Subject: [PATCH] Enable automatic UI adjustment + Now the colors are chosen automatically from the background image selected + This is just amazing and I am very excited (I will tell 2000 ppl about it, spread the word please ^^) --- app/build.gradle | 1 + .../com/finnmglas/launcher/ChooseActivity.kt | 6 +++ .../launcher/FirstStartupActivity.kt | 10 +++-- .../com/finnmglas/launcher/MainActivity.kt | 4 ++ .../finnmglas/launcher/SettingsActivity.kt | 13 +++++++ .../finnmglas/launcher/extern/Functions.kt | 8 +++- .../launcher/settings/SettingsFragmentApps.kt | 19 +++++++++- .../launcher/settings/SettingsFragmentMeta.kt | 17 +++++++-- .../settings/SettingsFragmentTheme.kt | 37 +++++++++++++------ 9 files changed, 94 insertions(+), 21 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 50a82e2..854a15a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,4 +37,5 @@ dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation 'com.google.android.material:material:1.1.0' implementation 'androidx.gridlayout:gridlayout:1.0.0' + implementation 'androidx.palette:palette:1.0.0' } diff --git a/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt b/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt index 24aa627..7037d03 100644 --- a/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/ChooseActivity.kt @@ -33,6 +33,12 @@ class ChooseActivity : AppCompatActivity() { ) setContentView(R.layout.activity_choose) + if (getSavedTheme(this) == "custom") { + activity_choose_container.setBackgroundColor(dominantColor) + activity_choose_app_bar.setBackgroundColor(dominantColor) + activity_choose_close.setTextColor(vibrantColor) + } + // As older APIs somehow do not recognize the xml defined onClick activity_choose_close.setOnClickListener() { finish() } diff --git a/app/src/main/java/com/finnmglas/launcher/FirstStartupActivity.kt b/app/src/main/java/com/finnmglas/launcher/FirstStartupActivity.kt index bfc1a4c..be43ead 100644 --- a/app/src/main/java/com/finnmglas/launcher/FirstStartupActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/FirstStartupActivity.kt @@ -6,9 +6,7 @@ import android.os.Bundle import android.util.TypedValue import android.view.* import androidx.appcompat.app.AppCompatActivity -import com.finnmglas.launcher.extern.blink -import com.finnmglas.launcher.extern.getSavedTheme -import com.finnmglas.launcher.extern.resetSettings +import com.finnmglas.launcher.extern.* import kotlinx.android.synthetic.main.activity_firststartup.* @@ -41,6 +39,12 @@ class FirstStartupActivity : AppCompatActivity(){ ) setContentView(R.layout.activity_firststartup) + if (getSavedTheme(this) == "custom") { + activity_firststartup_app_bar.setBackgroundColor(dominantColor) + activity_firststartup_container.setBackgroundColor(dominantColor) + activity_firststartup_close.setTextColor(vibrantColor) + } + activity_firststartup_hint_text.blink() // animate loadMenu(this) diff --git a/app/src/main/java/com/finnmglas/launcher/MainActivity.kt b/app/src/main/java/com/finnmglas/launcher/MainActivity.kt index b7ad586..466abcb 100644 --- a/app/src/main/java/com/finnmglas/launcher/MainActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/MainActivity.kt @@ -93,6 +93,10 @@ class MainActivity : AppCompatActivity(), loadSettings(sharedPref) + if (currentTheme == "custom") { + activity_main_settings_icon.setTextColor(vibrantColor) + } + mDetector = GestureDetectorCompat(this, this) mDetector.setOnDoubleTapListener(this) diff --git a/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt b/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt index debf26b..36af54a 100644 --- a/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt +++ b/app/src/main/java/com/finnmglas/launcher/SettingsActivity.kt @@ -56,6 +56,19 @@ class SettingsActivity : AppCompatActivity() { } } + override fun onStart() { + super.onStart() + + if (getSavedTheme(this) == "custom") { + activity_settings_container.setBackgroundColor(dominantColor) + activity_settings_app_bar.setBackgroundColor(dominantColor) + + activity_settings_device_settings.setTextColor(vibrantColor) + activity_settings_close.setTextColor(vibrantColor) + activity_settings_tabs.setSelectedTabIndicatorColor(vibrantColor) + } + } + fun backHome(view: View) { finish() } /** Theme - related */ diff --git a/app/src/main/java/com/finnmglas/launcher/extern/Functions.kt b/app/src/main/java/com/finnmglas/launcher/extern/Functions.kt index b345a7a..2049178 100644 --- a/app/src/main/java/com/finnmglas/launcher/extern/Functions.kt +++ b/app/src/main/java/com/finnmglas/launcher/extern/Functions.kt @@ -37,6 +37,9 @@ var appsList : MutableList = mutableListOf() var background : Bitmap? = null +var dominantColor = 0 +var vibrantColor = 0 + /** REQUEST CODES */ val REQUEST_PICK_IMAGE = 1 @@ -218,6 +221,9 @@ fun loadSettings(sharedPref : SharedPreferences){ calendarApp = sharedPref.getString("action_calendarApp", "").toString() clockApp = sharedPref.getString("action_clockApp", "").toString() + + dominantColor = sharedPref.getInt("custom_dominant", 0) + vibrantColor = sharedPref.getInt("custom_vibrant", 0) } fun resetSettings(sharedPref : SharedPreferences, context: Context) : MutableList{ @@ -318,7 +324,7 @@ fun getDominantColor(bitmap: Bitmap?): Int { fun setButtonColor(btn: Button, color: Int) { if (Build.VERSION.SDK_INT >= 29) - btn.background.colorFilter = BlendModeColorFilter(color, BlendMode.DST_OVER) + btn.background.colorFilter = BlendModeColorFilter(color, BlendMode.MULTIPLY) else btn.background.setColorFilter(color, PorterDuff.Mode.MULTIPLY) } \ No newline at end of file diff --git a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentApps.kt b/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentApps.kt index b7cdfb0..62189ad 100644 --- a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentApps.kt +++ b/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentApps.kt @@ -13,8 +13,7 @@ import android.view.ViewGroup import android.widget.Toast import com.finnmglas.launcher.ChooseActivity import com.finnmglas.launcher.R -import com.finnmglas.launcher.extern.REQUEST_CHOOSE_APP -import com.finnmglas.launcher.extern.loadSettings +import com.finnmglas.launcher.extern.* import kotlinx.android.synthetic.main.fragment_settings_apps.* /** The 'Apps' Tab associated Fragment in Settings */ @@ -32,6 +31,22 @@ class SettingsFragmentApps : Fragment() { } override fun onStart() { + + if (getSavedTheme(context!!) == "custom") { + fragment_settings_apps_container.setBackgroundColor(dominantColor) + + setButtonColor(fragment_settings_apps_choose_up_btn, vibrantColor) + setButtonColor(fragment_settings_apps_choose_down_btn, vibrantColor) + setButtonColor(fragment_settings_apps_choose_left_btn, vibrantColor) + setButtonColor(fragment_settings_apps_choose_right_btn, vibrantColor) + setButtonColor(fragment_settings_apps_choose_vol_up_btn, vibrantColor) + setButtonColor(fragment_settings_apps_choose_vol_down_btn, vibrantColor) + + setButtonColor(fragment_settings_apps_launch_btn, vibrantColor) + setButtonColor(fragment_settings_apps_install_btn, vibrantColor) + setButtonColor(fragment_settings_apps_remove_btn, vibrantColor) + } + // Action - selecting buttons fragment_settings_apps_choose_up_btn.setOnClickListener{ chooseApp("upApp") } fragment_settings_apps_choose_down_btn.setOnClickListener{ chooseApp("downApp") } diff --git a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentMeta.kt b/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentMeta.kt index 16f721d..56b1a64 100644 --- a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentMeta.kt +++ b/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentMeta.kt @@ -15,9 +15,7 @@ import android.view.View import android.view.ViewGroup import com.finnmglas.launcher.FirstStartupActivity import com.finnmglas.launcher.R -import com.finnmglas.launcher.extern.openAppSettings -import com.finnmglas.launcher.extern.openNewTabWindow -import com.finnmglas.launcher.extern.resetSettings +import com.finnmglas.launcher.extern.* import kotlinx.android.synthetic.main.fragment_settings_meta.* /** The 'Meta' Tab associated Fragment in Settings */ @@ -34,6 +32,19 @@ class SettingsFragmentMeta : Fragment() { } override fun onStart() { + + if (getSavedTheme(context!!) == "custom") { + fragment_settings_meta_container.setBackgroundColor(dominantColor) + + setButtonColor(fragment_settings_meta_select_launcher_btn, vibrantColor) + setButtonColor(fragment_settings_meta_view_tutorial_btn, vibrantColor) + setButtonColor(fragment_settings_meta_reset_settings_btn, vibrantColor) + + fragment_settings_meta_footer_play_icon.setTextColor(vibrantColor) + fragment_settings_meta_footer_github_icon.setTextColor(vibrantColor) + fragment_settings_meta_footer_globe_icon.setTextColor(vibrantColor) + } + // Button onClicks fragment_settings_meta_select_launcher_btn.setOnClickListener { diff --git a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentTheme.kt b/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentTheme.kt index 7d479ed..43441f5 100644 --- a/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentTheme.kt +++ b/app/src/main/java/com/finnmglas/launcher/settings/SettingsFragmentTheme.kt @@ -14,6 +14,7 @@ import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat +import androidx.palette.graphics.Palette import com.finnmglas.launcher.R import com.finnmglas.launcher.extern.* import kotlinx.android.synthetic.main.fragment_settings_theme.* @@ -33,28 +34,32 @@ class SettingsFragmentTheme : Fragment() { override fun onStart(){ // Hide 'select' button for the selected theme or allow customisation - when (getSavedTheme(this.context!!)) { + when (getSavedTheme(context!!)) { "dark" -> fragment_settings_theme_select_dark_btn.visibility = View.INVISIBLE "finn" -> fragment_settings_theme_select_finn_btn.visibility = View.INVISIBLE "custom" -> { fragment_settings_theme_select_custom_btn.text = getString(R.string.settings_select_image) + fragment_settings_theme_container.setBackgroundColor(dominantColor) + setButtonColor(fragment_settings_theme_select_finn_btn, vibrantColor) + setButtonColor(fragment_settings_theme_select_dark_btn, vibrantColor) + setButtonColor(fragment_settings_theme_select_custom_btn, vibrantColor) } } // Theme changing buttons fragment_settings_theme_select_dark_btn.setOnClickListener { - saveTheme(this.context!!, "dark") + saveTheme(context!!, "dark") activity!!.recreate() } fragment_settings_theme_select_finn_btn.setOnClickListener { - saveTheme(this.context!!, "finn") + saveTheme(context!!, "finn") activity!!.recreate() } fragment_settings_theme_select_custom_btn.setOnClickListener { // Request permission (on newer APIs) if (Build.VERSION.SDK_INT >= 23) { when { - ContextCompat.checkSelfPermission(this.context!!, + ContextCompat.checkSelfPermission(context!!, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED -> letUserPickImage() shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE) @@ -94,17 +99,25 @@ class SettingsFragmentTheme : Fragment() { if (data == null) return val imageUri = data.data + background = MediaStore.Images.Media.getBitmap(context!!.contentResolver, imageUri) - /* Save image Uri as string */ - val editor: SharedPreferences.Editor = context!!.getSharedPreferences( - context!!.getString(R.string.preference_file_key), Context.MODE_PRIVATE).edit() - editor.putString("background_uri", imageUri.toString()) - editor.apply() + Palette.Builder(background!!).generate { + it?.let { palette -> + dominantColor = palette.getDominantColor(ContextCompat.getColor(context!!, R.color.darkTheme_accent_color)) + vibrantColor = palette.getVibrantColor(ContextCompat.getColor(context!!, R.color.darkTheme_accent_color)) - background = MediaStore.Images.Media.getBitmap(this.context!!.contentResolver, imageUri) + /* Save image Uri as string */ + val editor: SharedPreferences.Editor = context!!.getSharedPreferences( + context!!.getString(R.string.preference_file_key), Context.MODE_PRIVATE).edit() + editor.putString("background_uri", imageUri.toString()) + editor.putInt("custom_dominant", dominantColor) + editor.putInt("custom_vibrant", vibrantColor) + editor.apply() - saveTheme(this.context!!, "custom") - activity!!.recreate() + saveTheme(context!!, "custom") + activity!!.recreate() + } + } } } } \ No newline at end of file