Prepare to add icon pack support, reorganise code

This commit is contained in:
Patryk Michalik
2021-03-01 23:14:35 +01:00
parent 67220f78b6
commit 907ffa7807
12 changed files with 107 additions and 26 deletions
+1 -1
View File
@@ -20,7 +20,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:name="ch.deletescape.lawnchair.LawnchairApp">
<activity android:name="ch.deletescape.lawnchair.settings.SettingsActivity"
<activity android:name="ch.deletescape.lawnchair.settings.activities.SettingsActivity"
android:autoRemoveFromRecents="true" android:label="@string/settings_button_text"
android:theme="@style/Theme.Lawnchair">
<intent-filter android:priority="1">
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
android:layout_height="48dp">
<RadioButton
android:id="@+id/radio_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/icon"
android:layout_width="36dp"
android:layout_height="36dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/radio_button"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@drawable/all_apps_edu_circle" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textAppearance="?attr/textAppearanceBody1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/icon"
app:layout_constraintTop_toTopOf="parent"
tools:text="Icon Pack" />
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
+2
View File
@@ -15,4 +15,6 @@
</intent>
</com.android.launcher3.settings.NotificationDotsPreference>
<Preference android:title="Icon Pack" android:fragment="ch.deletescape.lawnchair.settings.fragments.IconPackSettingsFragment" />
</androidx.preference.PreferenceScreen>
+2 -2
View File
@@ -6,12 +6,12 @@
android:title="General"
android:summary="Notification Dots"
android:icon="@drawable/ic_general"
android:fragment="ch.deletescape.lawnchair.settings.GeneralSettingsFragment" />
android:fragment="ch.deletescape.lawnchair.settings.fragments.GeneralSettingsFragment" />
<Preference
android:title="Home Screen"
android:summary="Rotation, Grid Options"
android:icon="@drawable/ic_home_screen"
android:fragment="ch.deletescape.lawnchair.settings.HomeScreenSettingsFragment" />
android:fragment="ch.deletescape.lawnchair.settings.fragments.HomeScreenSettingsFragment" />
</androidx.preference.PreferenceScreen>
@@ -1,4 +1,4 @@
package ch.deletescape.lawnchair.settings
package ch.deletescape.lawnchair.settings.activities
import android.os.Bundle
import android.view.View
@@ -8,19 +8,27 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import ch.deletescape.lawnchair.settings.fragments.SettingsFragment
import ch.deletescape.lawnchair.settings.interfaces.TitledFragment
import com.android.launcher3.R
import com.google.android.material.appbar.MaterialToolbar
class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
class SettingsActivity : AppCompatActivity(),
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
private lateinit var topAppBar: MaterialToolbar
private val context = this
private val fragmentListener = object: FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentViewCreated(fm: FragmentManager, fragment: Fragment, v: View, savedInstanceState: Bundle?) {
if (fragment !is SettingsFragment && topAppBar.navigationIcon == null) {
topAppBar.navigationIcon = ContextCompat.getDrawable(context, R.drawable.ic_back)
} else {
private val fragmentListener = object : FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentViewCreated(
fm: FragmentManager,
fragment: Fragment,
v: View,
savedInstanceState: Bundle?
) {
if (fragment is SettingsFragment) {
topAppBar.navigationIcon = null
} else if (topAppBar.navigationIcon == null) {
topAppBar.navigationIcon = ContextCompat.getDrawable(context, R.drawable.ic_back)
}
topAppBar.title = (fragment as? TitledFragment)?.title
}
@@ -40,11 +48,15 @@ class SettingsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPrefere
.commit()
}
override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean {
override fun onPreferenceStartFragment(
caller: PreferenceFragmentCompat,
pref: Preference
): Boolean {
val args = pref.extras
val fragment = supportFragmentManager.fragmentFactory.instantiate(
classLoader,
pref.fragment)
pref.fragment
)
fragment.arguments = args
fragment.setTargetFragment(caller, 0)
supportFragmentManager.beginTransaction()
@@ -1,24 +1,28 @@
package ch.deletescape.lawnchair.settings
package ch.deletescape.lawnchair.settings.fragments
import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
import ch.deletescape.lawnchair.settings.interfaces.TitledFragment
import com.android.launcher3.LauncherFiles
import com.google.android.material.transition.MaterialSharedAxis
interface TitledFragment {
val title: String
}
abstract class BasePreferenceFragment(var preferenceResource: Int, var isTopLevelFragment: Boolean = false) : PreferenceFragmentCompat(), TitledFragment {
abstract class BasePreferenceFragment(
var preferenceResource: Int,
var hasChild: Boolean,
var hasParent: Boolean
) : PreferenceFragmentCompat(),
TitledFragment {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(preferenceResource, rootKey)
preferenceManager.sharedPreferencesName = LauncherFiles.SHARED_PREFERENCES_KEY
if (isTopLevelFragment) {
if (hasChild) {
exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
} else {
}
if (hasParent) {
enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
}
@@ -1,8 +1,8 @@
package ch.deletescape.lawnchair.settings
package ch.deletescape.lawnchair.settings.fragments
import com.android.launcher3.R
class GeneralSettingsFragment : BasePreferenceFragment(R.xml.general_settings) {
class GeneralSettingsFragment : BasePreferenceFragment(R.xml.general_settings, true, true) {
override val title: String
get() = "General"
}
@@ -1,8 +1,8 @@
package ch.deletescape.lawnchair.settings
package ch.deletescape.lawnchair.settings.fragments
import com.android.launcher3.R
class HomeScreenSettingsFragment : BasePreferenceFragment(R.xml.home_screen_settings) {
class HomeScreenSettingsFragment : BasePreferenceFragment(R.xml.home_screen_settings, false, true) {
override val title: String
get() = "Home Screen"
}
@@ -0,0 +1,18 @@
package ch.deletescape.lawnchair.settings.fragments
import android.os.Bundle
import androidx.fragment.app.Fragment
import ch.deletescape.lawnchair.settings.interfaces.TitledFragment
import com.android.launcher3.R
import com.google.android.material.transition.MaterialSharedAxis
class IconPackSettingsFragment : Fragment(R.layout.icon_pack_settings_fragment), TitledFragment {
override val title: String
get() = "Icon Pack"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
}
}
@@ -1,10 +1,10 @@
package ch.deletescape.lawnchair.settings
package ch.deletescape.lawnchair.settings.fragments
import com.android.launcher3.R
// TODO: Migrate missing code from ch.deletescape.settings.ui.SettingsActivity.
class SettingsFragment : BasePreferenceFragment(R.xml.settings, true) {
class SettingsFragment : BasePreferenceFragment(R.xml.settings, true, false) {
override val title: String
get() = "Settings"
}
@@ -0,0 +1,5 @@
package ch.deletescape.lawnchair.settings.interfaces
interface TitledFragment {
val title: String
}