소스 검색

add abstraction to status bar theme code

sduduzog 7 년 전
부모
커밋
8e541f4d6b

+ 3 - 28
app/src/main/java/com/sduduzog/slimlauncher/ui/main/MainFragment.kt

@@ -2,23 +2,17 @@ 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
 import androidx.navigation.Navigation
 import com.google.android.material.bottomsheet.BottomSheetBehavior
 import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED
@@ -32,7 +26,7 @@ import java.text.SimpleDateFormat
 import java.util.*
 
 
-class MainFragment : Fragment(), MainActivity.OnBackPressedListener {
+class MainFragment : StatusBarThemeFragment(), MainActivity.OnBackPressedListener {
 
     private lateinit var receiver: BroadcastReceiver
     private lateinit var sheetBehavior: BottomSheetBehavior<FrameLayout>
@@ -59,31 +53,12 @@ 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 getFragmentView(): View {
+        return main
     }
 
     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()
     }
 

+ 47 - 0
app/src/main/java/com/sduduzog/slimlauncher/ui/main/StatusBarThemeFragment.kt

@@ -0,0 +1,47 @@
+package com.sduduzog.slimlauncher.ui.main
+
+import android.content.Context
+import android.graphics.Color
+import android.os.Build
+import android.util.TypedValue
+import android.view.View
+import android.view.Window
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.Fragment
+import com.sduduzog.slimlauncher.R
+
+abstract class StatusBarThemeFragment : Fragment(){
+
+    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
+        }
+    }
+
+
+    /**
+     * @return [android.view.View] of the [androidx.fragment.app.Fragment] extending this class to apply flags to
+     */
+    abstract fun getFragmentView() : View
+
+    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, getFragmentView())
+        } else {
+            clearLightStatusBar(activity!!.window, context!!)
+        }
+    }
+}

+ 3 - 35
app/src/main/java/com/sduduzog/slimlauncher/ui/main/settings/SettingsFragment.kt

@@ -1,29 +1,22 @@
 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 com.sduduzog.slimlauncher.ui.main.StatusBarThemeFragment
 import kotlinx.android.synthetic.main.settings_fragment.*
 
 
-class SettingsFragment : Fragment() {
+class SettingsFragment : StatusBarThemeFragment() {
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                               savedInstanceState: Bundle?): View? {
@@ -86,32 +79,7 @@ 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!!)
-        }
-    }
+    override fun getFragmentView(): View = settings_fragment
 
     private fun initComponents() {
         val settings = context!!.getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)

+ 4 - 1
app/src/main/java/com/sduduzog/slimlauncher/ui/main/setup/SetupFragment.kt

@@ -9,10 +9,11 @@ import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentManager
 import androidx.fragment.app.FragmentPagerAdapter
 import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.ui.main.StatusBarThemeFragment
 import kotlinx.android.synthetic.main.setup_fragment.*
 
 
-class SetupFragment : Fragment() {
+class SetupFragment : StatusBarThemeFragment() {
 
     private lateinit var onPagerListener: OnPagerListener
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
@@ -38,6 +39,8 @@ class SetupFragment : Fragment() {
         }
     }
 
+    override fun getFragmentView(): View = setup_view_pager
+
     inner class SectionsPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {
 
         override fun getItem(position: Int): Fragment {

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

@@ -95,4 +95,7 @@
     <string name="settings_use_slim_s_built_in_dialer">Use Slim\'s built-in dialer</string>
     <string name="settings_faster_shortcut_to_your_calls">Faster shortcut to your calls</string>
 
+    <!-- TODO: Remove or change this placeholder text -->
+    <string name="hello_blank_fragment">Hello blank fragment</string>
+
 </resources>