mirror of
https://github.com/jrpie/Launcher.git
synced 2025-02-23 06:21:31 +01:00
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 ^^)
This commit is contained in:
parent
9681c7021f
commit
3bbfc5374c
9 changed files with 94 additions and 21 deletions
|
@ -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'
|
||||
}
|
||||
|
|
|
@ -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() }
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -37,6 +37,9 @@ var appsList : MutableList<ResolveInfo> = 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<String>{
|
||||
|
@ -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)
|
||||
}
|
|
@ -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") }
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue