Explorar el Código

Add light status bar for supported devices

sduduzog hace 7 años
padre
commit
e4a0f049b3

+ 19 - 0
app/src/main/java/com/sduduzog/slimlauncher/MainActivity.kt

@@ -1,9 +1,16 @@
 package com.sduduzog.slimlauncher
 
+import android.content.Context
 import android.content.SharedPreferences
 import android.content.pm.PackageManager
 import android.content.res.Resources
+import android.graphics.Color
+import android.os.Build
 import android.os.Bundle
+import android.util.TypedValue
+import android.view.View
+import android.view.Window
+import android.view.WindowManager
 import androidx.appcompat.app.AppCompatActivity
 import androidx.lifecycle.ViewModelProviders
 import androidx.navigation.NavController
@@ -67,6 +74,17 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
         viewModel.refreshApps()
     }
 
+    override fun onResume() {
+        super.onResume()
+//        val isHidden = settings.getBoolean(getString(R.string.prefs_settings_key_hide_status_bar), true)
+//        if (isHidden) {
+//        window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN)
+//        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+//        }
+        val flags = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+        window.decorView.systemUiVisibility = flags
+    }
+
     override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, s: String?) {
         if (s.equals(getString(R.string.prefs_settings_key_theme), true)) {
             recreate()
@@ -112,6 +130,7 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
     }
 
     companion object {
+
         fun resolveTheme(i: Int): Int {
             when (i) {
                 1 -> {

+ 32 - 4
app/src/main/java/com/sduduzog/slimlauncher/ui/main/MainFragment.kt

@@ -2,15 +2,20 @@ package com.sduduzog.slimlauncher.ui.main
 
 import android.content.*
 import android.content.pm.PackageManager
+import android.graphics.Color
 import android.net.Uri
+import android.os.Build
 import android.os.Bundle
 import android.provider.AlarmClock
 import android.provider.MediaStore
 import android.provider.Settings
+import android.util.TypedValue
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.view.Window
 import android.widget.FrameLayout
+import androidx.appcompat.app.AppCompatActivity
 import androidx.core.app.ActivityCompat
 import androidx.core.content.ContextCompat
 import androidx.fragment.app.Fragment
@@ -22,6 +27,7 @@ import com.sduduzog.slimlauncher.MainActivity
 import com.sduduzog.slimlauncher.R
 import kotlinx.android.synthetic.main.main_bottom_sheet.*
 import kotlinx.android.synthetic.main.main_content.*
+import kotlinx.android.synthetic.main.main_fragment.*
 import java.text.SimpleDateFormat
 import java.util.*
 
@@ -53,9 +59,31 @@ class MainFragment : Fragment(), MainActivity.OnBackPressedListener {
         doBounceAnimation(ivExpand)
     }
 
+    private fun setLightStatusBar(window: Window, view: View) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            val flags = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
+            view.systemUiVisibility = flags
+            window.statusBarColor = Color.WHITE
+        }
+    }
+
+    private fun clearLightStatusBar(window: Window, context: Context) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            val value = TypedValue()
+            context.theme.resolveAttribute(R.attr.colorPrimary, value, true)
+            window.statusBarColor = value.data
+        }
+    }
 
     override fun onResume() {
         super.onResume()
+        val settings = context!!.getSharedPreferences(getString(R.string.prefs_settings), AppCompatActivity.MODE_PRIVATE)
+        val active = settings.getInt(getString(R.string.prefs_settings_key_theme), 0)
+        if (active == 0) {
+            setLightStatusBar(activity!!.window, main)
+        } else {
+            clearLightStatusBar(activity!!.window, context!!)
+        }
         updateUi()
     }
 
@@ -189,10 +217,10 @@ class MainFragment : Fragment(), MainActivity.OnBackPressedListener {
         targetView.animate()
                 .setStartDelay(500)
                 .translationYBy(-20f).withEndAction {
-            targetView.animate()
-                    .setStartDelay(0)
-                    .translationYBy(20f).duration = 100
-        }.duration = 100
+                    targetView.animate()
+                            .setStartDelay(0)
+                            .translationYBy(20f).duration = 100
+                }.duration = 100
     }
 
     fun updateUi() {

+ 34 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/settings/SettingsFragment.kt

@@ -1,18 +1,25 @@
 package com.sduduzog.slimlauncher.ui.main.settings
 
 
+import android.content.Context
 import android.content.Context.MODE_PRIVATE
 import android.graphics.Canvas
+import android.graphics.Color
+import android.os.Build
 import android.os.Bundle
+import android.util.TypedValue
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.view.Window
+import androidx.appcompat.app.AppCompatActivity
 import androidx.core.content.edit
 import androidx.fragment.app.Fragment
 import androidx.recyclerview.widget.ItemTouchHelper
 import androidx.recyclerview.widget.RecyclerView
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.ui.main.OnItemActionListener
+import kotlinx.android.synthetic.main.main_fragment.*
 import kotlinx.android.synthetic.main.settings_fragment.*
 
 
@@ -79,6 +86,33 @@ class SettingsFragment : Fragment() {
         initComponents()
     }
 
+    private fun setLightStatusBar(window: Window, view: View) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            val flags = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
+            view.systemUiVisibility = flags
+            window.statusBarColor = Color.WHITE
+        }
+    }
+
+    private fun clearLightStatusBar(window: Window, context: Context) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            val value = TypedValue()
+            context.theme.resolveAttribute(R.attr.colorPrimary, value, true)
+            window.statusBarColor = value.data
+        }
+    }
+
+    override fun onResume() {
+        super.onResume()
+        val settings = context!!.getSharedPreferences(getString(R.string.prefs_settings), AppCompatActivity.MODE_PRIVATE)
+        val active = settings.getInt(getString(R.string.prefs_settings_key_theme), 0)
+        if (active == 0) {
+            setLightStatusBar(activity!!.window, settings_fragment)
+        } else {
+            clearLightStatusBar(activity!!.window, context!!)
+        }
+    }
+
     private fun initComponents() {
         val settings = context!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
         clockSwitch.isChecked = settings.getBoolean(getString(R.string.prefs_settings_key_clock_type), false)

+ 1 - 1
app/src/main/res/layout/settings_fragment.xml

@@ -2,7 +2,7 @@
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/frameLayout"
+    android:id="@+id/settings_fragment"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     tools:context=".ui.main.settings.SettingsFragment">

+ 7 - 8
app/src/main/res/values-v23/styles.xml

@@ -1,13 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
-        <item name="colorAccent">@color/colorAccent</item>
-        <item name="android:colorForeground">@android:color/black</item>
-        <!--<item name="android:statusBarColor">@color/colorWhiteDark</item>-->
-        <item name="colorPrimary">@color/colorWhite</item>
-        <item name="colorPrimaryDark">@color/colorWhiteDark</item>
-        <item name="android:colorBackground">@color/colorWhite</item>
-        <item name="android:statusBarColor">?android:attr/colorPrimaryDark</item>
-        <item name="android:windowLightStatusBar">true</item>
+        <!--<item name="android:statusBarColor">?android:attr/colorPrimary</item>-->
+        <!--<item name="android:windowLightStatusBar">true</item>-->
+    </style>
+
+    <style name="AppDarkTheme" parent="@style/Theme.AppCompat.NoActionBar">
+        <!--<item name="android:statusBarColor">?android:attr/colorPrimary</item>-->
+        <!--<item name="android:windowLightStatusBar">false</item>-->
     </style>
 </resources>

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -15,6 +15,7 @@
     <string name="prefs_settings">settings</string>
     <string name="prefs_settings_key_theme">key_theme</string>
     <string name="prefs_settings_key_clock_type">clock_type</string>
+    <string name="prefs_settings_key_hide_status_bar">hide_status_bar</string>
     <string name="prefs_settings_key_app_dialer">app_dialer</string>
     <string name="prefs_settings_key_fresh_install_setup">key_fresh_install_setup</string>