Sfoglia il codice sorgente

chore: refactoring

beautusg 7 anni fa
parent
commit
dfa7d1042a

+ 15 - 53
app/src/main/java/com/sduduzog/slimlauncher/MainActivity.kt

@@ -1,46 +1,36 @@
 package com.sduduzog.slimlauncher
 
-import android.content.Intent
 import android.content.SharedPreferences
 import android.content.res.Resources
 import android.os.Bundle
 import android.view.View
-import android.widget.Toast
 import androidx.appcompat.app.AppCompatActivity
 import androidx.lifecycle.ViewModelProviders
 import androidx.navigation.NavController
-import androidx.navigation.NavDestination
 import androidx.navigation.Navigation.findNavController
 import com.sduduzog.slimlauncher.ui.main.MainViewModel
+import com.sduduzog.slimlauncher.utils.Publisher
+import com.sduduzog.slimlauncher.utils.Subscriber
 
 
-class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener, NavController.OnDestinationChangedListener {
+class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener, Publisher {
 
     private lateinit var settings: SharedPreferences
-    private val label = "home_fragment"
-    private lateinit var currentLabel: String
     private lateinit var viewModel: MainViewModel
     private lateinit var navigator: NavController
-    var onBackPressedListener: OnBackPressedListener? = null
+    private val subscribers: MutableSet<Subscriber> = mutableSetOf()
 
+    override fun attatchSubscriber(s: Subscriber) {
+        subscribers.add(s)
+    }
 
-    var dispatcher: Subject = object : Subject() {
-
-        var observers: MutableSet<Observer> = mutableSetOf()
-        override fun attachObserver(o: Observer) {
-            observers.add(o)
-        }
-
-        override fun detachObserver(o: Observer) {
-            observers.remove(o)
-        }
-
-        override fun notifyObservers() {
-            for (o in observers) {
-                o.update("onBackPressed")
-            }
-        }
+    override fun detachSubscriber(s: Subscriber) {
+        subscribers.remove(s)
+    }
 
+    override fun dispatchBack() {
+        for (s in subscribers) if (s.onBack()) return
+        completeBackAction()
     }
 
     override fun onCreate(savedInstanceState: Bundle?) {
@@ -49,7 +39,6 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
         settings = getSharedPreferences(getString(R.string.prefs_settings), MODE_PRIVATE)
         settings.registerOnSharedPreferenceChangeListener(this)
         navigator = findNavController(this, R.id.nav_host_fragment)
-        navigator.addOnDestinationChangedListener(this)
         viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
     }
 
@@ -87,29 +76,7 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
         return theme
     }
 
-    override fun onBackPressed() {
-        dispatcher.notifyObservers()
-        if (currentLabel != label)
-            super.onBackPressed()
-        else onBackPressedListener?.onBackPress()
-    }
-
-    /**
-     * Make the activity aware of the current destination in our NavController.
-     */
-    override fun onDestinationChanged(controller: NavController, destination: NavDestination, arguments: Bundle?) {
-        currentLabel = destination.label.toString()
-    }
-
-    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
-        if (requestCode == REQUEST_CODE_ENABLE_ADMIN) {
-            if (resultCode == RESULT_OK) {
-                Toast.makeText(applicationContext, "Registered As Admin", Toast.LENGTH_SHORT).show()
-            } else {
-                Toast.makeText(applicationContext, "Failed to register as Admin", Toast.LENGTH_SHORT).show()
-            }
-        }
-    }
+    override fun onBackPressed() { dispatchBack() }
 
     private fun showSystemUI() {
         window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
@@ -153,12 +120,7 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh
             }
             return R.style.AppTheme
         }
-
-        const val REQUEST_CODE_ENABLE_ADMIN = 1
     }
 
-    interface OnBackPressedListener {
-        fun onBackPress()
-        fun onBackPressed()
-    }
+    private fun completeBackAction(){ super.onBackPressed() }
 }

+ 20 - 3
app/src/main/java/com/sduduzog/slimlauncher/ui/BaseFragment.kt

@@ -8,15 +8,16 @@ import androidx.appcompat.app.AppCompatActivity
 import androidx.core.app.ActivityOptionsCompat
 import androidx.fragment.app.Fragment
 import com.sduduzog.slimlauncher.R
+import com.sduduzog.slimlauncher.utils.Publisher
+import com.sduduzog.slimlauncher.utils.Subscriber
 
-abstract class BaseFragment: Fragment() {
+abstract class BaseFragment : Fragment(), Subscriber {
 
     abstract fun getFragmentView(): View
 
 
     override fun onResume() {
         super.onResume()
-        // When the Fragment resumes, check the theme and set the status bar color accordingly.
         val settings = context!!.getSharedPreferences(getString(R.string.prefs_settings), AppCompatActivity.MODE_PRIVATE)
         val active = settings.getInt(getString(R.string.prefs_settings_key_theme), 0)
 
@@ -35,7 +36,21 @@ abstract class BaseFragment: Fragment() {
         }
     }
 
-    protected fun launchActivity(view: View, intent: Intent){
+    override fun onStart() {
+        super.onStart()
+        with(activity as Publisher){
+            this.attatchSubscriber(this@BaseFragment)
+        }
+    }
+
+    override fun onStop() {
+        super.onStop()
+        with(activity as Publisher) {
+            this.detachSubscriber(this@BaseFragment)
+        }
+    }
+
+    protected fun launchActivity(view: View, intent: Intent) {
         val left = 0
         val top = 0
         val width = view.measuredWidth
@@ -43,4 +58,6 @@ abstract class BaseFragment: Fragment() {
         val opts = ActivityOptionsCompat.makeClipRevealAnimation(view, left, top, width, height)
         startActivity(intent, opts.toBundle())
     }
+
+    override fun onBack(): Boolean = false
 }

+ 9 - 44
app/src/main/java/com/sduduzog/slimlauncher/ui/main/HomeFragment.kt

@@ -8,11 +8,9 @@ import android.provider.MediaStore
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import androidx.core.app.ActivityOptionsCompat
 import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProviders
 import androidx.navigation.Navigation
-import com.sduduzog.slimlauncher.MainActivity
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.adapters.HomeAdapter
 import com.sduduzog.slimlauncher.data.HomeApp
@@ -24,7 +22,7 @@ import java.text.SimpleDateFormat
 import java.util.*
 
 
-class HomeFragment : BaseFragment(), MainActivity.OnBackPressedListener, OnLaunchAppListener {
+class HomeFragment : BaseFragment(), OnLaunchAppListener {
 
     private lateinit var receiver: BroadcastReceiver
     private lateinit var viewModel: MainViewModel
@@ -68,7 +66,7 @@ class HomeFragment : BaseFragment(), MainActivity.OnBackPressedListener, OnLaunc
     }
 
     override fun getFragmentView(): View {
-        return main_fragment2
+        return home_fragment
     }
 
     override fun onResume() {
@@ -76,47 +74,20 @@ class HomeFragment : BaseFragment(), MainActivity.OnBackPressedListener, OnLaunc
         updateUi()
     }
 
-    override fun onAttach(context: Context?) {
-        super.onAttach(context)
-        with(context as MainActivity) {
-            this.onBackPressedListener = this@HomeFragment
-        }
-    }
-
-    override fun onDetach() {
-        super.onDetach()
-        with(context as MainActivity) {
-            this.onBackPressedListener = null
-        }
-    }
-
     override fun onStop() {
         super.onStop()
         activity?.unregisterReceiver(receiver)
     }
 
-    override fun onBackPress() {
-    }
-
-    override fun onBackPressed() {
-        // Do nothing
-    }
-
     private fun setEventListeners() {
 
-
         home_fragment_time.setOnClickListener {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                 try {
                     val intent = Intent(AlarmClock.ACTION_SHOW_ALARMS)
                     intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
-                    val left = 0
-                    val top = 0
-                    val width = it.measuredWidth
-                    val height = it.measuredHeight
-                    val opts = ActivityOptionsCompat.makeClipRevealAnimation(it, left, top, width, height)
                     if (intent.resolveActivity(context!!.packageManager) != null)
-                        startActivity(intent, opts.toBundle())
+                        launchActivity(it, intent)
                 } catch (e: ActivityNotFoundException) {
                     // Do nothing, we've failed :(
                 }
@@ -128,12 +99,7 @@ class HomeFragment : BaseFragment(), MainActivity.OnBackPressedListener, OnLaunc
                 val intent = Intent(Intent.ACTION_MAIN)
                 intent.addCategory(Intent.CATEGORY_APP_CALENDAR)
                 intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
-                val left = 0
-                val top = 0
-                val width = it.measuredWidth
-                val height = it.measuredHeight
-                val opts = ActivityOptionsCompat.makeClipRevealAnimation(it, left, top, width, height)
-                startActivity(intent, opts.toBundle())
+                launchActivity(it, intent)
             } catch (e: ActivityNotFoundException) {
                 // Do nothing, we've failed :(
             }
@@ -142,12 +108,7 @@ class HomeFragment : BaseFragment(), MainActivity.OnBackPressedListener, OnLaunc
         home_fragment_call.setOnClickListener {
             try {
                 val intent = Intent(Intent.ACTION_DIAL)
-                val left = 0
-                val top = 0
-                val width = it.measuredWidth
-                val height = it.measuredHeight
-                val opts = ActivityOptionsCompat.makeClipRevealAnimation(it, left, top, width, height)
-                startActivity(intent, opts.toBundle())
+                launchActivity(it, intent)
             } catch (e: Exception) {
                 // Do nothing
             }
@@ -192,6 +153,10 @@ class HomeFragment : BaseFragment(), MainActivity.OnBackPressedListener, OnLaunc
         launchActivity(view, intent)
     }
 
+    override fun onBack(): Boolean {
+        return true
+    }
+
     inner class ClockReceiver : BroadcastReceiver() {
         override fun onReceive(ctx: Context?, intent: Intent?) {
             updateUi()

+ 0 - 15
app/src/main/java/com/sduduzog/slimlauncher/ui/main/notes/NoteFragment.kt

@@ -9,7 +9,6 @@ import android.view.ViewGroup
 import android.view.inputmethod.InputMethodManager
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.ViewModelProviders
-import com.sduduzog.slimlauncher.MainActivity
 import com.sduduzog.slimlauncher.Observer
 import com.sduduzog.slimlauncher.R
 import com.sduduzog.slimlauncher.data.Note
@@ -72,20 +71,6 @@ class NoteFragment : Fragment(), Observer {
         })
     }
 
-    override fun onAttach(context: Context?) {
-        super.onAttach(context)
-        with(context as MainActivity) {
-            this.dispatcher.attachObserver(this@NoteFragment)
-        }
-    }
-
-    override fun onDetach() {
-        super.onDetach()
-        with(context as MainActivity) {
-            this.dispatcher.detachObserver(this@NoteFragment)
-        }
-    }
-
     override fun update(on: String) {
         saveNote()
     }

+ 7 - 0
app/src/main/java/com/sduduzog/slimlauncher/utils/Publisher.kt

@@ -0,0 +1,7 @@
+package com.sduduzog.slimlauncher.utils
+
+interface Publisher {
+    fun attatchSubscriber(s: Subscriber)
+    fun detachSubscriber(s: Subscriber)
+    fun dispatchBack()
+}

+ 5 - 0
app/src/main/java/com/sduduzog/slimlauncher/utils/Subscriber.kt

@@ -0,0 +1,5 @@
+package com.sduduzog.slimlauncher.utils
+
+interface Subscriber {
+    fun onBack(): Boolean
+}