backup
diff --git a/app/build.gradle b/app/build.gradle
index d069598..42243f7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -32,7 +32,7 @@
 }
 
 dependencies {
-
+    implementation fileTree(dir: 'libs', include: ['*.jar'])
     implementation 'androidx.core:core-ktx:1.6.0'
     implementation 'androidx.appcompat:appcompat:1.3.1'
     implementation 'com.google.android.material:material:1.4.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c882ef9..e46aed6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,10 @@
 
     <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
         tools:ignore="QueryAllPackagesPermission" />
+    <uses-permission android:name="android.permission.WRITE_SETTINGS"
+        tools:ignore="ProtectedPermissions" />
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"
+        tools:ignore="ProtectedPermissions" />
 
     <application
         android:allowBackup="true"
diff --git a/app/src/main/java/org/omnirom/control/AppListFragment.kt b/app/src/main/java/org/omnirom/control/AppListFragment.kt
new file mode 100644
index 0000000..5c37ff4
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/AppListFragment.kt
@@ -0,0 +1,142 @@
+package org.omnirom.control
+
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.os.Bundle
+import android.provider.Settings
+import androidx.appcompat.app.AppCompatActivity
+import androidx.preference.Preference
+import androidx.preference.PreferenceCategory
+import androidx.preference.PreferenceFragmentCompat
+
+class AppListFragment : PreferenceFragmentCompat() {
+    val KEY_APPS_LIST = "apps_list"
+    val OMNISTORE_APP_PKG = "org.omnirom.omnistore"
+    val OMNISTORE_INSTALL_PKG = "org.omnirom.omnistoreinstaller"
+    lateinit var appManager: ApplicationManager
+
+    fun isAvailableApp(packageName: String): Boolean {
+        val pm: PackageManager = requireContext().getPackageManager()
+        return try {
+            val enabled = pm.getApplicationEnabledSetting(packageName)
+            enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED &&
+                    enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER
+        } catch (e: Exception) {
+            false
+        }
+    }
+
+    override fun onResume() {
+        super.onResume()
+        (activity as? AppCompatActivity)?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
+        (activity as? SettingsActivity)?.updateFragmentTitle(resources.getString(R.string.applist_settings_title))
+    }
+
+    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+        setPreferencesFromResource(R.xml.applist_preferences, rootKey)
+
+        appManager = ApplicationManager(requireContext())
+
+        appManager.addApp(
+            "org.omnirom.omniswitch",
+            "org.omnirom.omniswitch.SettingsActivity",
+            resources.getString(R.string.omniswitch_title),
+            resources.getString(R.string.omniswitch_summary)
+        )
+
+        appManager.addApp(
+            "org.omnirom.omnichange",
+            "org.omnirom.omnichange.OmniMain",
+            resources.getString(R.string.changelog_title),
+            resources.getString(R.string.changelog_summary)
+        )
+
+        appManager.addApp(
+            "org.omnirom.omnijaws",
+            "org.omnirom.omnijaws.SettingsActivity",
+            resources.getString(R.string.weather_config_title),
+            resources.getString(R.string.weather_config_summary)
+        )
+
+        appManager.addApp(
+            "org.omnirom.logcat",
+            "com.pluscubed.logcat.ui.LogcatActivity",
+            resources.getString(R.string.matlog_title),
+            resources.getString(R.string.matlog_summary)
+        )
+
+        appManager.addApp(
+            "org.omnirom.omniremote",
+            "org.omnirom.omniremote.MainActivity",
+            resources.getString(R.string.omni_remote_title),
+            resources.getString(R.string.omni_remote_summary)
+        )
+
+        appManager.addApp(
+            "org.omnirom.omnistore",
+            "org.omnirom.omnistore.MainActivity",
+            resources.getString(R.string.omnistore_title),
+            resources.getString(R.string.omnistore_summary)
+        )
+
+        appManager.addApp(
+            "org.omnirom.omnistoreinstaller",
+            "org.omnirom.omnistoreinstaller.MainActivity",
+            resources.getString(R.string.omnistore_title),
+            resources.getString(R.string.omnistore_summary)
+        )
+
+        appManager.addApp(
+            "org.omnirom.omnistyle",
+            "org.omnirom.omnistyle.WallpaperActivity",
+            getString(R.string.wallpaper_title),
+            getString(R.string.wallpaper_summary)
+        )
+
+        appManager.addApp(
+                "org.omnirom.device",
+                "org.omnirom.device.DeviceSettings",
+                getString(R.string.device_settings_title),
+                getString(R.string.device_settings_summary)
+        )
+        createAppList()
+    }
+
+    fun createAppList() {
+        var appCategory: PreferenceCategory? = findPreference(KEY_APPS_LIST)
+        if (appCategory != null) {
+            appCategory.removeAll()
+            for (app in appManager.mAppList) {
+                if (!isAvailableApp(app.mPackage)) {
+                    continue
+                }
+                if (app.mPackage.equals(OMNISTORE_INSTALL_PKG) && isAvailableApp(
+                        OMNISTORE_APP_PKG
+                    )
+                ) {
+                    continue
+                }
+                val preference = Preference(requireContext())
+                preference.key = app.mPackage
+                preference.title = app.mTitle
+                preference.summary = app.mSummary
+                val intent = Intent()
+                intent.component = app.getComponentName()
+                preference.intent = intent
+                preference.icon = appManager.getAppIcon(app)
+
+                appCategory.addPreference(preference)
+            }
+        }
+    }
+    override fun onPreferenceTreeClick(preference: Preference?): Boolean {
+        if (preference?.key != null) {
+            var app: Application? = appManager.getAppOfPackage(preference.key)
+            if (app != null) {
+                appManager.startApp(app)
+                return true
+            }
+        }
+        return super.onPreferenceTreeClick(preference)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/omnirom/control/Application.kt b/app/src/main/java/org/omnirom/control/Application.kt
new file mode 100644
index 0000000..16e246c
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/Application.kt
@@ -0,0 +1,20 @@
+package org.omnirom.control
+
+import android.content.ComponentName
+
+class Application {
+    val mPackage: String
+    val mActivity:String
+    val mTitle: String
+    val mSummary: String
+
+    constructor(packageName: String, activity: String, title: String, summary: String){
+        mActivity=activity
+        mPackage=packageName
+        mTitle=title
+        mSummary=summary
+    }
+    fun getComponentName() : ComponentName{
+        return ComponentName(mPackage, mActivity)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/omnirom/control/ApplicationManager.kt b/app/src/main/java/org/omnirom/control/ApplicationManager.kt
new file mode 100644
index 0000000..b281d8a
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/ApplicationManager.kt
@@ -0,0 +1,89 @@
+package org.omnirom.control
+
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.graphics.drawable.Drawable
+import android.graphics.drawable.BitmapDrawable
+
+import android.graphics.Bitmap
+import android.graphics.Canvas
+import android.graphics.Paint
+
+import android.graphics.PaintFlagsDrawFilter
+
+
+
+
+class ApplicationManager {
+
+    val mContext: Context
+    val mAppList: ArrayList<Application> = ArrayList()
+    val mIconSize: Int
+
+    constructor(context: Context) {
+        mContext = context
+        mIconSize = mContext.resources.getDimensionPixelSize(R.dimen.applist_icon_size)
+    }
+
+    fun getAppIcon(app: Application): Drawable {
+        val pm: PackageManager = mContext.getPackageManager()
+        return try {
+            resizeAppIcon(pm.getApplicationIcon(app.mPackage), mIconSize, 0)
+        } catch (e: PackageManager.NameNotFoundException) {
+            pm.defaultActivityIcon
+        }
+    }
+
+    fun startApp(app: Application) {
+        val intent = Intent()
+        intent.component = app.getComponentName()
+        try {
+            mContext.startActivity(intent)
+        } catch (e: Exception) {
+
+        }
+    }
+
+    fun addApp(packageName: String, activity: String, title: String, summary: String) {
+        mAppList.add(Application(packageName, activity, title, summary))
+    }
+
+    fun getAppOfPackage(packageName: String): Application? {
+        for (app in mAppList) {
+            if (app.mPackage.equals(packageName)) return app
+        }
+        return null
+    }
+
+    fun isAvailableApp(app: Application): Boolean {
+        val pm: PackageManager = mContext.getPackageManager()
+        return try {
+            val enabled = pm.getApplicationEnabledSetting(app.mPackage)
+            enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED &&
+                    enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER
+        } catch (e: PackageManager.NameNotFoundException) {
+            false
+        }
+    }
+
+    fun resizeAppIcon(image: Drawable,
+        size: Int, border: Int): Drawable {
+        val canvas = Canvas()
+        canvas.setDrawFilter(
+            PaintFlagsDrawFilter(
+                Paint.ANTI_ALIAS_FLAG,
+                Paint.FILTER_BITMAP_FLAG
+            )
+        )
+        val bmResult = Bitmap.createBitmap(
+            size + border, size + border,
+            Bitmap.Config.ARGB_8888
+        )
+        canvas.setBitmap(bmResult)
+        image.setBounds(border / 2, border / 2, size, size)
+        image.draw(canvas)
+        return BitmapDrawable(mContext.resources, bmResult)
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/omnirom/control/BarsSettingsFragment.kt b/app/src/main/java/org/omnirom/control/BarsSettingsFragment.kt
new file mode 100644
index 0000000..c0b4c6f
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/BarsSettingsFragment.kt
@@ -0,0 +1,25 @@
+package org.omnirom.control
+
+import android.os.Bundle
+import android.provider.Settings
+import androidx.appcompat.app.AppCompatActivity
+import androidx.preference.Preference
+import androidx.preference.PreferenceFragmentCompat
+
+
+class BarsSettingsFragment : PreferenceFragmentCompat() {
+
+    override fun onResume() {
+        super.onResume()
+        (activity as? AppCompatActivity)?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
+        (activity as? SettingsActivity)?.updateFragmentTitle(resources.getString(R.string.bars_settings_title))
+    }
+
+    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+        setPreferencesFromResource(R.xml.bars_settings_preferences, rootKey)
+    }
+
+    override fun onPreferenceTreeClick(preference: Preference?): Boolean {
+        return super.onPreferenceTreeClick(preference)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/omnirom/control/GridViewFragment.kt b/app/src/main/java/org/omnirom/control/GridViewFragment.kt
new file mode 100644
index 0000000..e86c197
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/GridViewFragment.kt
@@ -0,0 +1,111 @@
+package org.omnirom.control
+
+import android.content.Context
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.*
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.Fragment
+
+
+class GridViewFragment() : Fragment() {
+    lateinit var gridView: GridView
+    val gridItems: ArrayList<GridItem>
+
+    init {
+        this.gridItems = ArrayList<GridItem>()
+        gridItems.add(
+            GridItem(
+                R.string.applist_settings_title,
+                R.drawable.applist_icon,
+                AppListFragment()
+            )
+        )
+        gridItems.add(
+            GridItem(
+                R.string.bars_settings_title,
+                R.drawable.ic_bars_tile,
+                BarsSettingsFragment()
+            )
+        )
+        gridItems.add(
+            GridItem(
+                R.string.more_settings_title,
+                R.drawable.ic_settings_more,
+                MoreSettingsFragment()
+            )
+        )
+    }
+
+    class GridItem(text: Int, icon: Int, fragment: Fragment) {
+        val gridText: Int
+        val gridIcon: Int
+        val gridFragment: Fragment
+
+        init {
+            gridText = text
+            gridIcon = icon
+            gridFragment = fragment
+        }
+    }
+
+    class GridViewAdapter(context: Context, gridItems: List<GridItem>) :
+        ArrayAdapter<GridItem>(context, 0, gridItems) {
+
+        val vi: LayoutInflater
+
+        init {
+            this.vi = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
+        }
+
+        override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
+            val viewItem: View = if (convertView == null) {
+                vi.inflate(R.layout.grid_item, null)
+            } else {
+                convertView
+            }
+
+            val gridItem: GridItem? = getItem(position)
+            viewItem.findViewById<TextView>(R.id.grid_item_text).setText(gridItem?.gridText!!)
+            viewItem.findViewById<ImageView>(R.id.grid_item_icon)
+                .setImageResource(gridItem?.gridIcon!!)
+
+            return viewItem
+        }
+    }
+
+    override fun onResume() {
+        super.onResume()
+        (activity as? AppCompatActivity)?.supportActionBar?.setDisplayHomeAsUpEnabled(false)
+        (activity as? SettingsActivity)?.updateFragmentTitle(resources.getString(R.string.app_name))
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        return inflater.inflate(R.layout.grid_fragment, container, false)
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        gridView = view.findViewById(R.id.grid_view)
+
+        gridView.adapter = GridViewAdapter(requireContext(), gridItems)
+
+        gridView.onItemClickListener =
+            AdapterView.OnItemClickListener { parent, view, position, id ->
+                val gridItem: GridItem = gridItems.get(position)
+                requireActivity().supportFragmentManager
+                    .beginTransaction()
+                    .replace(R.id.settings, gridItem.gridFragment)
+                    .addToBackStack(null)
+                    .commit()
+            }
+    }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/omnirom/control/MoreSettingsFragment.kt b/app/src/main/java/org/omnirom/control/MoreSettingsFragment.kt
new file mode 100644
index 0000000..c7dea2f
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/MoreSettingsFragment.kt
@@ -0,0 +1,25 @@
+package org.omnirom.control
+
+import android.os.Bundle
+import android.provider.Settings
+import androidx.appcompat.app.AppCompatActivity
+import androidx.preference.Preference
+import androidx.preference.PreferenceFragmentCompat
+
+
+class MoreSettingsFragment : PreferenceFragmentCompat() {
+
+    override fun onResume() {
+        super.onResume()
+        (activity as? AppCompatActivity)?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
+        (activity as? SettingsActivity)?.updateFragmentTitle(resources.getString(R.string.more_settings_title))
+    }
+
+    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+        setPreferencesFromResource(R.xml.more_settings_preferences, rootKey)
+    }
+
+    override fun onPreferenceTreeClick(preference: Preference?): Boolean {
+        return super.onPreferenceTreeClick(preference)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/omnirom/control/SettingsActivity.kt b/app/src/main/java/org/omnirom/control/SettingsActivity.kt
index 6c67475..6fa9ada 100644
--- a/app/src/main/java/org/omnirom/control/SettingsActivity.kt
+++ b/app/src/main/java/org/omnirom/control/SettingsActivity.kt
@@ -1,111 +1,42 @@
 package org.omnirom.control
 
-import android.content.ComponentName
-import android.content.Intent
-import android.content.pm.PackageManager
-import android.graphics.drawable.Drawable
 import android.os.Bundle
+import android.view.MenuItem
+import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.widget.Toolbar
-import androidx.preference.Preference
-import androidx.preference.PreferenceCategory
-import androidx.preference.PreferenceFragmentCompat
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import org.w3c.dom.Text
 
 
 class SettingsActivity : AppCompatActivity() {
 
+    lateinit var titleView: TextView
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.settings_activity)
         if (savedInstanceState == null) {
             supportFragmentManager
-                .beginTransaction()
-                .replace(R.id.settings, SettingsFragment())
-                .commit()
+                    .beginTransaction()
+                    .replace(R.id.settings, GridViewFragment())
+                    .commit()
         }
-        val toolbar:Toolbar = findViewById(R.id.toolbar)
-        toolbar.setTitle(R.string.app_name)
-        toolbar.setTitleTextAppearance(this, R.style.Theme_OmniControl_ToolBar_TitleTextStyle)
+        val toolbar: Toolbar = findViewById(R.id.toolbar)
+        toolbar.setTitle("")
         setSupportActionBar(toolbar)
+
+        titleView = findViewById<TextView>(R.id.fragment_title)
     }
 
-    class SettingsFragment : PreferenceFragmentCompat() {
-        val KEY_OMNISTORE = "omnistore"
-        val KEY_APPS_LIST = "apps_list"
-        val OMNISTORE_APP_PKG = "org.omnirom.omnistore"
-        val OMNISTORE_INSTALL_PKG = "org.omnirom.omnistoreinstaller"
-        val OMNISTORE_ACTIVITY = ".MainActivity"
-
-        fun isAvailableApp(packageName: String): Boolean {
-            val pm: PackageManager = requireContext().getPackageManager()
-            return try {
-                val enabled = pm.getApplicationEnabledSetting(packageName)
-                enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED &&
-                        enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER
-            } catch (e: PackageManager.NameNotFoundException) {
-                false
-            }
+    override fun onOptionsItemSelected(item: MenuItem): Boolean {
+        when (item.getItemId()) {
+            android.R.id.home -> onBackPressed()
         }
+        return super.onOptionsItemSelected(item)
+    }
 
-        fun getAppIcon(packageName: String): Drawable {
-            val pm: PackageManager = requireContext().getPackageManager()
-            return try {
-                pm.getApplicationIcon(packageName)
-            } catch (e: PackageManager.NameNotFoundException) {
-                pm.defaultActivityIcon
-            }
-        }
-
-        override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
-            setPreferencesFromResource(R.xml.root_preferences, rootKey)
-
-            var omniStoreEntry: Preference? = findPreference(KEY_OMNISTORE)
-            if (omniStoreEntry != null) {
-                omniStoreEntry.isVisible =
-                    isAvailableApp(OMNISTORE_APP_PKG) || isAvailableApp(OMNISTORE_INSTALL_PKG)
-                if (isAvailableApp(OMNISTORE_APP_PKG))
-                    omniStoreEntry.icon = getAppIcon(OMNISTORE_APP_PKG);
-                if (isAvailableApp(OMNISTORE_INSTALL_PKG))
-                    omniStoreEntry.icon = getAppIcon(OMNISTORE_INSTALL_PKG);
-            }
-
-            var appCategory: PreferenceCategory? = findPreference(KEY_APPS_LIST)
-            if (appCategory != null) {
-                for(i in 0 until appCategory.preferenceCount) {
-                    val app = appCategory.getPreference(i)
-                    if (app.intent != null){
-                        val intent = app.intent
-                        if (intent != null && intent.component != null) {
-                            val pkg = intent.component!!.packageName
-                            if (pkg != null) {
-                                app.icon = getAppIcon(pkg)
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        override fun onPreferenceTreeClick(preference: Preference?): Boolean {
-            if (preference?.key.equals(KEY_OMNISTORE)) {
-                if (isAvailableApp(OMNISTORE_APP_PKG)) {
-                    val name =
-                        ComponentName(OMNISTORE_APP_PKG, OMNISTORE_APP_PKG + OMNISTORE_ACTIVITY)
-                    val intent = Intent()
-                    intent.component = name
-                    requireActivity().startActivity(intent)
-                } else if (isAvailableApp(OMNISTORE_INSTALL_PKG)) {
-                    val name = ComponentName(
-                        OMNISTORE_INSTALL_PKG,
-                        OMNISTORE_INSTALL_PKG + OMNISTORE_ACTIVITY
-                    )
-                    val intent = Intent()
-                    intent.component = name
-                    requireActivity().startActivity(intent)
-                }
-                return true
-            }
-            return super.onPreferenceTreeClick(preference)
-        }
+    fun updateFragmentTitle(title: String) {
+        titleView.setText(title)
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/org/omnirom/control/preference/SecureCheckBoxPreference.java b/app/src/main/java/org/omnirom/control/preference/SecureCheckBoxPreference.java
new file mode 100644
index 0000000..508fc7b
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/preference/SecureCheckBoxPreference.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2013 The CyanogenMod project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.omnirom.control.preference;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.util.AttributeSet;
+
+import androidx.preference.CheckBoxPreference;
+
+public class SecureCheckBoxPreference extends CheckBoxPreference {
+    public SecureCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public SecureCheckBoxPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public SecureCheckBoxPreference(Context context) {
+        super(context, null);
+    }
+
+    @Override
+    protected boolean persistBoolean(boolean value) {
+        if (shouldPersist()) {
+            if (value == getPersistedBoolean(!value)) {
+                // It's already there, so the same as persisting
+                return true;
+            }
+            try {
+                Settings.Secure.putInt(getContext().getContentResolver(), getKey(), value ? 1 : 0);
+            } catch (SecurityException e) {
+
+            }
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    protected boolean getPersistedBoolean(boolean defaultReturnValue) {
+        if (!shouldPersist()) {
+            return defaultReturnValue;
+        }
+
+        return Settings.Secure.getInt(getContext().getContentResolver(),
+                getKey(), defaultReturnValue ? 1 : 0) != 0;
+    }
+
+    @Override
+    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
+        setChecked(Settings.Secure.getString(getContext().getContentResolver(), getKey()) != null ? getPersistedBoolean(isChecked())
+                : (Boolean) defaultValue);
+    }
+}
diff --git a/app/src/main/java/org/omnirom/control/preference/SecureSettingSwitchPreference.java b/app/src/main/java/org/omnirom/control/preference/SecureSettingSwitchPreference.java
new file mode 100644
index 0000000..e4fc15b
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/preference/SecureSettingSwitchPreference.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2015 The CyanogenMod project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.omnirom.control.preference;
+
+import android.content.Context;
+import androidx.preference.SwitchPreference;
+import android.util.AttributeSet;
+
+import android.provider.Settings;
+
+public class SecureSettingSwitchPreference extends SwitchPreference {
+    public SecureSettingSwitchPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public SecureSettingSwitchPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public SecureSettingSwitchPreference(Context context) {
+        super(context, null);
+    }
+
+    @Override
+    protected boolean persistBoolean(boolean value) {
+        if (shouldPersist()) {
+            if (value == getPersistedBoolean(!value)) {
+                // It's already there, so the same as persisting
+                return true;
+            }
+            try {
+                Settings.Secure.putInt(getContext().getContentResolver(), getKey(), value ? 1 : 0);
+            } catch (SecurityException e){
+
+            }
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    protected boolean getPersistedBoolean(boolean defaultReturnValue) {
+        if (!shouldPersist()) {
+            return defaultReturnValue;
+        }
+        return Settings.Secure.getInt(getContext().getContentResolver(),
+                getKey(), defaultReturnValue ? 1 : 0) != 0;
+    }
+
+    @Override
+    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
+        setChecked(Settings.Secure.getString(getContext().getContentResolver(), getKey()) != null ? getPersistedBoolean(isChecked())
+                : (Boolean) defaultValue);
+    }
+}
diff --git a/app/src/main/java/org/omnirom/control/preference/SystemCheckBoxPreference.java b/app/src/main/java/org/omnirom/control/preference/SystemCheckBoxPreference.java
new file mode 100644
index 0000000..4044947
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/preference/SystemCheckBoxPreference.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2013 The CyanogenMod project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.omnirom.control.preference;
+
+import android.content.Context;
+import androidx.preference.CheckBoxPreference;
+import android.provider.Settings;
+import android.util.AttributeSet;
+
+public class SystemCheckBoxPreference extends CheckBoxPreference {
+    public SystemCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public SystemCheckBoxPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public SystemCheckBoxPreference(Context context) {
+        super(context, null);
+    }
+
+    @Override
+    protected boolean persistBoolean(boolean value) {
+        if (shouldPersist()) {
+            if (value == getPersistedBoolean(!value)) {
+                // It's already there, so the same as persisting
+                return true;
+            }
+            if (Settings.System.canWrite(getContext())) {
+                Settings.System.putInt(getContext().getContentResolver(), getKey(), value ? 1 : 0);
+            }
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    protected boolean getPersistedBoolean(boolean defaultReturnValue) {
+        if (!shouldPersist()) {
+            return defaultReturnValue;
+        }
+
+        return Settings.System.getInt(getContext().getContentResolver(),
+                getKey(), defaultReturnValue ? 1 : 0) != 0;
+    }
+
+    @Override
+    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
+        setChecked(Settings.System.getString(getContext().getContentResolver(), getKey()) != null ? getPersistedBoolean(isChecked())
+                : (Boolean) defaultValue);
+    }
+}
diff --git a/app/src/main/java/org/omnirom/control/preference/SystemSettingSwitchPreference.java b/app/src/main/java/org/omnirom/control/preference/SystemSettingSwitchPreference.java
new file mode 100644
index 0000000..f1316b1
--- /dev/null
+++ b/app/src/main/java/org/omnirom/control/preference/SystemSettingSwitchPreference.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2013 The CyanogenMod project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.omnirom.control.preference;
+
+import android.content.Context;
+import android.provider.Settings;
+import androidx.preference.SwitchPreference;
+import android.util.AttributeSet;
+
+public class SystemSettingSwitchPreference extends SwitchPreference {
+    public SystemSettingSwitchPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public SystemSettingSwitchPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public SystemSettingSwitchPreference(Context context) {
+        super(context, null);
+    }
+
+    @Override
+    protected boolean persistBoolean(boolean value) {
+        if (shouldPersist()) {
+            if (value == getPersistedBoolean(!value)) {
+                // It's already there, so the same as persisting
+                return true;
+            }
+            if (Settings.System.canWrite(getContext())) {
+                Settings.System.putInt(getContext().getContentResolver(), getKey(), value ? 1 : 0);
+            }
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    protected boolean getPersistedBoolean(boolean defaultReturnValue) {
+        if (!shouldPersist()) {
+            return defaultReturnValue;
+        }
+        return Settings.System.getInt(getContext().getContentResolver(),
+                getKey(), defaultReturnValue ? 1 : 0) != 0;
+    }
+
+    @Override
+    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
+        setChecked(Settings.System.getString(getContext().getContentResolver(), getKey()) != null ? getPersistedBoolean(isChecked())
+                : (Boolean) defaultValue);
+    }
+}
diff --git a/app/src/main/res/drawable/applist_icon.xml b/app/src/main/res/drawable/applist_icon.xml
new file mode 100644
index 0000000..313f48a
--- /dev/null
+++ b/app/src/main/res/drawable/applist_icon.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:tint="?android:textColorPrimary"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z" />
+</vector>
diff --git a/app/src/main/res/drawable/bottom_navigation_selector.xml b/app/src/main/res/drawable/bottom_navigation_selector.xml
new file mode 100644
index 0000000..28a1b4a
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_navigation_selector.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:color="?android:colorAccent" android:state_checked="true" />
+    <item android:color="?android:textColorPrimary"/>
+</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/grid_item_background.xml b/app/src/main/res/drawable/grid_item_background.xml
new file mode 100644
index 0000000..94a2381
--- /dev/null
+++ b/app/src/main/res/drawable/grid_item_background.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2021 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+    android:color="?android:attr/colorControlHighlight">
+    <item android:id="@android:id/mask"
+        android:drawable="@drawable/grid_item_background_shape" />
+    <item android:id="@+id/background"
+        android:drawable="@drawable/grid_item_background_shape"/>
+</ripple>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/grid_item_background_shape.xml b/app/src/main/res/drawable/grid_item_background_shape.xml
new file mode 100644
index 0000000..15d518c
--- /dev/null
+++ b/app/src/main/res/drawable/grid_item_background_shape.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2021 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="@dimen/grid_item_corner_radius" />
+    <solid android:color="?android:colorAccent" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_bars_tile.xml b/app/src/main/res/drawable/ic_bars_tile.xml
new file mode 100644
index 0000000..47948ee
--- /dev/null
+++ b/app/src/main/res/drawable/ic_bars_tile.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+     Copyright (C) 2015 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:tint="?android:textColorPrimary"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    >
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M17.25,18H6.75V4H17.25M14,21H10V20H14M16,1H8A3,3 0 0,0 5,4V20A3,3 0 0,0 8,23H16A3,3 0 0,0 19,20V4A3,3 0 0,0 16,1Z" />
+</vector>
diff --git a/app/src/main/res/drawable/ic_settings_more.xml b/app/src/main/res/drawable/ic_settings_more.xml
new file mode 100644
index 0000000..0efcc0a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_settings_more.xml
@@ -0,0 +1,26 @@
+<!--
+    Copyright (C) 2016 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24.0dp"
+    android:height="24.0dp"
+    android:tint="?android:textColorPrimary"
+    android:viewportWidth="24.0"
+    android:viewportHeight="24.0">
+    >
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M6,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM18,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z" />
+</vector>
diff --git a/app/src/main/res/drawable/settings_icon.xml b/app/src/main/res/drawable/settings_icon.xml
new file mode 100644
index 0000000..41a82ed
--- /dev/null
+++ b/app/src/main/res/drawable/settings_icon.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:tint="?attr/colorControlNormal">
+  <path
+      android:fillColor="@android:color/white"
+      android:pathData="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6s3.6,1.62 3.6,3.6S13.98,15.6 12,15.6z"/>
+</vector>
diff --git a/app/src/main/res/layout/grid_fragment.xml b/app/src/main/res/layout/grid_fragment.xml
new file mode 100644
index 0000000..2555dde
--- /dev/null
+++ b/app/src/main/res/layout/grid_fragment.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_marginStart="30dp">
+
+    <GridView
+        android:id="@+id/grid_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:numColumns="auto_fit"
+        android:verticalSpacing="@dimen/grip_view_spacing"
+        android:horizontalSpacing="@dimen/grip_view_spacing"
+        android:stretchMode="columnWidth"
+        android:columnWidth="200dp"
+        android:gravity="center" />
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/grid_item.xml b/app/src/main/res/layout/grid_item.xml
new file mode 100644
index 0000000..ae3852d
--- /dev/null
+++ b/app/src/main/res/layout/grid_item.xml
@@ -0,0 +1,26 @@
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@drawable/grid_item_background">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_margin="20dp"
+        android:orientation="vertical">
+
+        <ImageView
+            android:id="@+id/grid_item_icon"
+            android:layout_width="48dp"
+            android:layout_height="48dp"
+            android:layout_gravity="center" />
+
+        <TextView
+            android:id="@+id/grid_item_text"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textAlignment="center" />
+
+    </LinearLayout>
+
+</FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/settings_activity.xml b/app/src/main/res/layout/settings_activity.xml
index 247cb63..e403696 100644
--- a/app/src/main/res/layout/settings_activity.xml
+++ b/app/src/main/res/layout/settings_activity.xml
@@ -6,11 +6,20 @@
     <androidx.appcompat.widget.Toolbar
         android:id="@+id/toolbar"
         android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+
+    <TextView
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginTop="60dp"/>
+        android:id="@+id/fragment_title"
+        android:textAppearance="@style/Theme.OmniControl.TitleTextStyle"
+        android:layout_marginStart="30dp"/>
 
     <FrameLayout
         android:id="@+id/settings"
         android:layout_width="match_parent"
-        android:layout_height="match_parent" />
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:layout_marginTop="20dp"/>
+
 </LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/menu/bottom_navigation.xml b/app/src/main/res/menu/bottom_navigation.xml
new file mode 100644
index 0000000..dd0c2ba
--- /dev/null
+++ b/app/src/main/res/menu/bottom_navigation.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:showIn="bottom_navigation">
+    <item
+        android:id="@+id/menu_applist"
+        android:icon="@drawable/applist_icon"
+        android:title="Apps"/>
+
+    <item
+        android:id="@+id/menu_settings"
+        android:icon="@drawable/settings_icon"
+        android:title="Settings"/>
+</menu>
\ No newline at end of file
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index 3114c22..38cd987 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -1,6 +1,5 @@
 <resources xmlns:tools="http://schemas.android.com/tools">
     <style name="Theme.OmniControl" parent="Theme.MaterialComponents.DayNight.NoActionBar">
-        <item name="toolbarStyle">@style/Theme.OmniControl.ToolBar</item>
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorPrimaryDark">@color/colorPrimary</item>
         <item name="android:windowBackground">@color/main_background_light</item>
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..afbe64f
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <dimen name="applist_icon_size">108dp</dimen>
+    <dimen name="grip_view_spacing">8dp</dimen>
+    <dimen name="grid_item_corner_radius">16dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d570b6d..8622e01 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -8,7 +8,6 @@
 
     <string name="omni_remote_title">OmniRemote</string>
     <string name="omni_remote_summary">VNC server to allow remote connection to device</string>
-    <string name="apps_header">Applications</string>
     <string name="matlog_title">MatLog</string>
     <string name="matlog_summary">Show logcat</string>
     <string name="changelog_title">Changelog</string>
@@ -17,4 +16,23 @@
     <string name="omniswitch_summary">Universal recent application switcher</string>
     <string name="omnistore_title">OmniStore</string>
     <string name="omnistore_summary">Download applications</string>
+    <string name="wallpaper_title">Wallpapers</string>
+    <string name="wallpaper_summary">Browse OmniROM themed wallpapers</string>
+    <string name="applist_title">Applications</string>
+    <string name="settings_title">Settings</string>
+    <string name="device_settings_title">Device settings</string>
+    <string name="device_settings_summary">Advanced device specific settings</string>
+
+    <string name="bars_settings_title">Bars</string>
+    <string name="more_settings_title">More</string>
+    <string name="applist_settings_title">Applications</string>
+
+    <string name="navigationbar_title">Navigation bar</string>
+    <string name="navigation_bar_show_title">Show navigation bar</string>
+    <string name="navigation_bar_show_summary">Force enable navigation bar</string>
+
+    <string name="statusbar_settings_category">Status bar</string>
+    <string name="status_bar_clock_seconds_title">Show clock seconds</string>
+    <string name="status_bar_clock_seconds_summary">Show seconds on status bar clock</string>
+
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index bc2bd55..10abf5a 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -7,14 +7,9 @@
         <item name="android:windowLightStatusBar">true</item>
         <item name="android:navigationBarColor">@android:color/transparent</item>
         <item name="windowActionBar">false</item>
-        <item name="toolbarStyle">@style/Theme.OmniControl.ToolBar</item>
     </style>
 
-    <style name="Theme.OmniControl.ToolBar" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
-        <item name="contentInsetStart">32dp</item>
-    </style>
-
-    <style name="Theme.OmniControl.ToolBar.TitleTextStyle" parent="TextAppearance.MaterialComponents.Body1">
+    <style name="Theme.OmniControl.TitleTextStyle" parent="TextAppearance.MaterialComponents.Body1">
         <item name="android:textSize">32dp</item>
         <item name="android:color">?android:textColorPrimary</item>
     </style>
diff --git a/app/src/main/res/xml/applist_preferences.xml b/app/src/main/res/xml/applist_preferences.xml
new file mode 100644
index 0000000..4d01696
--- /dev/null
+++ b/app/src/main/res/xml/applist_preferences.xml
@@ -0,0 +1,7 @@
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <PreferenceCategory android:key="apps_list">
+    </PreferenceCategory>
+
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/app/src/main/res/xml/bars_settings_preferences.xml b/app/src/main/res/xml/bars_settings_preferences.xml
new file mode 100644
index 0000000..dcbb0ff
--- /dev/null
+++ b/app/src/main/res/xml/bars_settings_preferences.xml
@@ -0,0 +1,28 @@
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+    android:key="bars_settings">
+    <PreferenceCategory
+        android:key="statusbar_settings_category"
+        android:title="@string/statusbar_settings_category">
+
+        <org.omnirom.control.preference.SecureSettingSwitchPreference
+            android:key="clock_seconds"
+            android:title="@string/status_bar_clock_seconds_title"
+            android:summary="@string/status_bar_clock_seconds_summary"
+            android:defaultValue="false" />
+
+    </PreferenceCategory>
+
+
+    <PreferenceCategory
+        android:key="category_navigationbar"
+        android:title="@string/navigationbar_title">
+
+        <org.omnirom.control.preference.SystemSettingSwitchPreference
+            android:key="navbar_visibility"
+            android:title="@string/navigation_bar_show_title"
+            android:summary="@string/navigation_bar_show_summary" />
+
+    </PreferenceCategory>
+</PreferenceScreen>
+
+
diff --git a/app/src/main/res/xml/more_settings_preferences.xml b/app/src/main/res/xml/more_settings_preferences.xml
new file mode 100644
index 0000000..7123145
--- /dev/null
+++ b/app/src/main/res/xml/more_settings_preferences.xml
@@ -0,0 +1,7 @@
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+    android:key="more_settings"
+    android:title="More">
+    <Preference
+        android:key="bar"
+        android:title="bar" />
+</PreferenceScreen>
diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml
deleted file mode 100644
index f0f28c9..0000000
--- a/app/src/main/res/xml/root_preferences.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-    android:title="@string/app_name">
-
-    <PreferenceCategory android:key="apps_list">
-        <Preference
-            android:summary="@string/omni_remote_summary"
-            android:title="@string/omni_remote_title">
-            <intent
-                android:action="android.intent.action.MAIN"
-                android:targetClass="org.omnirom.omniremote.MainActivity"
-                android:targetPackage="org.omnirom.omniremote" />
-        </Preference>
-
-        <Preference
-            android:summary="@string/weather_config_summary"
-            android:title="@string/weather_config_title">
-            <intent
-                android:action="android.intent.action.MAIN"
-                android:targetClass="org.omnirom.omnijaws.SettingsActivity"
-                android:targetPackage="org.omnirom.omnijaws" />
-        </Preference>
-
-        <Preference
-            android:summary="@string/matlog_summary"
-            android:title="@string/matlog_title">
-            <intent
-                android:action="android.intent.action.MAIN"
-                android:targetClass="com.pluscubed.logcat.ui.LogcatActivity"
-                android:targetPackage="org.omnirom.logcat" />
-        </Preference>
-
-        <Preference
-            android:summary="@string/changelog_summary"
-            android:title="@string/changelog_title">
-            <intent
-                android:action="android.intent.action.MAIN"
-                android:targetClass="org.omnirom.omnichange.OmniMain"
-                android:targetPackage="org.omnirom.omnichange" />
-        </Preference>
-
-        <Preference
-            android:summary="@string/omniswitch_summary"
-            android:title="@string/omniswitch_title">
-            <intent
-                android:action="android.intent.action.MAIN"
-                android:targetClass="org.omnirom.omniswitch.SettingsActivity"
-                android:targetPackage="org.omnirom.omniswitch" />
-        </Preference>
-
-        <Preference
-            android:key="omnistore"
-            android:summary="@string/omnistore_summary"
-            android:title="@string/omnistore_title"></Preference>
-    </PreferenceCategory>
-
-
-</PreferenceScreen>
\ No newline at end of file
diff --git a/app/src/main/res/xml/settings_preferences.xml b/app/src/main/res/xml/settings_preferences.xml
new file mode 100644
index 0000000..5e6c1bc
--- /dev/null
+++ b/app/src/main/res/xml/settings_preferences.xml
@@ -0,0 +1,14 @@
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <Preference
+        android:icon="@drawable/ic_bars_tile"
+        android:key="bars_settings"
+        android:title="Bars">
+    </Preference>
+
+    <Preference
+        android:icon="@drawable/ic_settings_more"
+        android:key="more_settings"
+        android:title="More">
+    </Preference>
+</PreferenceScreen>
\ No newline at end of file