diff --git a/app/build.gradle b/app/build.gradle index aee45ad..6581f73 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -103,7 +103,7 @@ dependencies { implementation "androidx.preference:preference-ktx:1.2.1" ksp "androidx.room:room-compiler:2.6.1" implementation "androidx.work:work-runtime-ktx:2.9.0" - implementation "androidx.browser:browser:1.7.0" + implementation "androidx.browser:browser:1.8.0" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0" // DO NOT UPDATE (minSdkVersion updated) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 915fffb..4ebba4e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,7 +26,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" - android:theme="@style/AppTheme" + android:theme="@style/Theme.Material3.DayNight" tools:targetApi="31"> () @@ -65,9 +73,12 @@ class MainActivity : AbstractActivity(), ServiceConnection.Callback { binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) + setSupportActionBar(binding.toolbar) val navController = findNavController(R.id.nav_host_fragment_activity_my) + navController.setGraph(R.navigation.mobile_navigation) navController.navigate(R.id.navigation_dashboard) + navController.addOnDestinationChangedListener(::onDestinationChanged) val appBarConfiguration = AppBarConfiguration( setOf( @@ -86,6 +97,31 @@ class MainActivity : AbstractActivity(), ServiceConnection.Callback { onNewIntent(intent) } + + private fun onDestinationChanged( + navController: NavController, + navDestination: NavDestination, + bundle: Bundle? + ) { + val destinationId = navDestination.id + binding.dashboardTabContainer.isVisible = destinationId == R.id.navigation_dashboard + } + + override fun onPreferenceStartFragment( + caller: PreferenceFragmentCompat, + pref: Preference + ): Boolean { + val navController = findNavController(R.id.nav_host_fragment_activity_my) + when (pref.fragment) { + CoreFragment::class.java.name -> { + navController.navigate(R.id.navigation_settings_core) + return true + } + + else -> return false + } + } + override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) val uri = intent.data ?: return @@ -445,4 +481,5 @@ class MainActivity : AbstractActivity(), ServiceConnection.Callback { super.onDestroy() } + } \ No newline at end of file diff --git a/app/src/main/java/io/nekohasekai/sfa/ui/dashboard/GroupsFragment.kt b/app/src/main/java/io/nekohasekai/sfa/ui/dashboard/GroupsFragment.kt index 949b958..90a1b3a 100644 --- a/app/src/main/java/io/nekohasekai/sfa/ui/dashboard/GroupsFragment.kt +++ b/app/src/main/java/io/nekohasekai/sfa/ui/dashboard/GroupsFragment.kt @@ -12,7 +12,6 @@ import androidx.core.view.isInvisible import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.SimpleItemAnimator @@ -133,6 +132,8 @@ class GroupsFragment : Fragment(), CommandClient.Handler { lateinit var group: OutboundGroup lateinit var items: MutableList lateinit var adapter: ItemAdapter + + @SuppressLint("NotifyDataSetChanged") fun bind(group: OutboundGroup) { this.group = group binding.groupName.text = group.tag @@ -153,10 +154,23 @@ class GroupsFragment : Fragment(), CommandClient.Handler { while (itemIterator.hasNext()) { items.add(itemIterator.next()) } - adapter = ItemAdapter(this, group, items) - binding.itemList.adapter = adapter - (binding.itemList.itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false - binding.itemList.layoutManager = GridLayoutManager(binding.root.context, 2) + if (!::adapter.isInitialized) { + adapter = ItemAdapter(this, group, items) + binding.itemList.adapter = adapter + /* val divider = + MaterialDividerItemDecoration( + binding.root.context, + LinearLayoutManager.VERTICAL + ) + divider.isLastItemDecorated = false + binding.itemList.addItemDecoration(divider)*/ + (binding.itemList.itemAnimator as SimpleItemAnimator).supportsChangeAnimations = + false + binding.itemList.layoutManager = LinearLayoutManager(binding.root.context) + } else { + adapter.items = items + adapter.notifyDataSetChanged() + } updateExpand() } @@ -220,7 +234,7 @@ class GroupsFragment : Fragment(), CommandClient.Handler { private class ItemAdapter( val groupView: GroupView, val group: OutboundGroup, - val items: List + var items: List = emptyList() ) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemGroupView { diff --git a/app/src/main/java/io/nekohasekai/sfa/ui/dashboard/OverviewFragment.kt b/app/src/main/java/io/nekohasekai/sfa/ui/dashboard/OverviewFragment.kt index d32a88b..5c81bd5 100644 --- a/app/src/main/java/io/nekohasekai/sfa/ui/dashboard/OverviewFragment.kt +++ b/app/src/main/java/io/nekohasekai/sfa/ui/dashboard/OverviewFragment.kt @@ -70,42 +70,20 @@ class OverviewFragment : Fragment() { Status.Stopped -> { binding.clashModeCard.isVisible = false binding.systemProxyCard.isVisible = false - binding.fab.setImageResource(R.drawable.ic_play_arrow_24) - binding.fab.show() - } - Status.Starting -> { - binding.fab.hide() } Status.Started -> { statusClient.connect() clashModeClient.connect() reloadSystemProxyStatus() - binding.fab.setImageResource(R.drawable.ic_stop_24) - binding.fab.show() - } - Status.Stopping -> { - binding.fab.hide() } else -> {} } } - binding.fab.setOnClickListener { - when (activity.serviceStatus.value) { - Status.Stopped -> { - activity.startService() - } - Status.Started -> { - BoxService.stop() - } - - else -> {} - } - } ProfileManager.registerCallback(this::updateProfiles) } diff --git a/app/src/main/java/io/nekohasekai/sfa/ui/main/DashboardFragment.kt b/app/src/main/java/io/nekohasekai/sfa/ui/main/DashboardFragment.kt index e63c55c..b9e7610 100644 --- a/app/src/main/java/io/nekohasekai/sfa/ui/main/DashboardFragment.kt +++ b/app/src/main/java/io/nekohasekai/sfa/ui/main/DashboardFragment.kt @@ -10,6 +10,7 @@ import androidx.fragment.app.Fragment import androidx.viewpager2.adapter.FragmentStateAdapter import com.google.android.material.tabs.TabLayoutMediator import io.nekohasekai.sfa.R +import io.nekohasekai.sfa.bg.BoxService import io.nekohasekai.sfa.constant.Status import io.nekohasekai.sfa.databinding.FragmentDashboardBinding import io.nekohasekai.sfa.ui.MainActivity @@ -20,6 +21,7 @@ class DashboardFragment : Fragment(R.layout.fragment_dashboard) { private val activity: MainActivity? get() = super.getActivity() as MainActivity? private var binding: FragmentDashboardBinding? = null + private var mediator: TabLayoutMediator? = null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { @@ -34,21 +36,46 @@ class DashboardFragment : Fragment(R.layout.fragment_dashboard) { val binding = binding ?: return binding.dashboardPager.adapter = Adapter(this) binding.dashboardPager.offscreenPageLimit = Page.values().size - TabLayoutMediator(binding.dashboardTabLayout, binding.dashboardPager) { tab, position -> + mediator = TabLayoutMediator( + activity.binding.dashboardTabLayout, + binding.dashboardPager + ) { tab, position -> tab.setText(Page.values()[position].titleRes) - }.attach() + }.apply { attach() } activity.serviceStatus.observe(viewLifecycleOwner) { when (it) { Status.Stopped -> { disablePager() + binding.fab.setImageResource(R.drawable.ic_play_arrow_24) + binding.fab.show() + } + + Status.Starting -> { + binding.fab.hide() } Status.Started -> { enablePager() + binding.fab.setImageResource(R.drawable.ic_stop_24) + binding.fab.show() } Status.Stopping -> { disablePager() + binding.fab.hide() + } + + else -> {} + } + } + binding.fab.setOnClickListener { + when (activity.serviceStatus.value) { + Status.Stopped -> { + activity.startService() + } + + Status.Started -> { + BoxService.stop() } else -> {} @@ -58,18 +85,21 @@ class DashboardFragment : Fragment(R.layout.fragment_dashboard) { override fun onDestroyView() { super.onDestroyView() + mediator?.detach() binding = null } private fun enablePager() { + val activity = activity ?: return val binding = binding ?: return - binding.dashboardTabLayout.isVisible = true + activity.binding.dashboardTabLayout.isVisible = true binding.dashboardPager.isUserInputEnabled = true } private fun disablePager() { + val activity = activity ?: return val binding = binding ?: return - binding.dashboardTabLayout.isVisible = false + activity.binding.dashboardTabLayout.isVisible = false binding.dashboardPager.isUserInputEnabled = false binding.dashboardPager.setCurrentItem(0, false) } diff --git a/app/src/main/java/io/nekohasekai/sfa/ui/main/SettingsFragment0.kt b/app/src/main/java/io/nekohasekai/sfa/ui/main/SettingsFragment0.kt new file mode 100644 index 0000000..9c3dfb1 --- /dev/null +++ b/app/src/main/java/io/nekohasekai/sfa/ui/main/SettingsFragment0.kt @@ -0,0 +1,9 @@ +package io.nekohasekai.sfa.ui.main + +import io.nekohasekai.sfa.R +import io.nekohasekai.sfa.ui.settings.AbstractSettingsFragment + +class SettingsFragment0 : AbstractSettingsFragment(R.xml.preferences_settings) { + + +} \ No newline at end of file diff --git a/app/src/main/java/io/nekohasekai/sfa/ui/settings/AbstractSettingsFragment.kt b/app/src/main/java/io/nekohasekai/sfa/ui/settings/AbstractSettingsFragment.kt new file mode 100644 index 0000000..5043c1e --- /dev/null +++ b/app/src/main/java/io/nekohasekai/sfa/ui/settings/AbstractSettingsFragment.kt @@ -0,0 +1,27 @@ +package io.nekohasekai.sfa.ui.settings + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.annotation.XmlRes +import androidx.preference.PreferenceFragmentCompat +import androidx.recyclerview.widget.RecyclerView +import io.nekohasekai.sfa.R + +open class AbstractSettingsFragment(@XmlRes val resId: Int) : PreferenceFragmentCompat() { + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(resId, rootKey) + } + + override fun onCreateRecyclerView( + inflater: LayoutInflater, + parent: ViewGroup, + savedInstanceState: Bundle? + ): RecyclerView { + val recyclerView = inflater + .inflate(R.layout.view_prefenence_screen, parent, false) as RecyclerView + recyclerView.layoutManager = onCreateLayoutManager() + return recyclerView + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/nekohasekai/sfa/ui/settings/CoreFragment.kt b/app/src/main/java/io/nekohasekai/sfa/ui/settings/CoreFragment.kt new file mode 100644 index 0000000..b326885 --- /dev/null +++ b/app/src/main/java/io/nekohasekai/sfa/ui/settings/CoreFragment.kt @@ -0,0 +1,6 @@ +package io.nekohasekai.sfa.ui.settings + +import androidx.fragment.app.Fragment + +class CoreFragment : Fragment() { +} \ No newline at end of file diff --git a/app/src/main/java/io/nekohasekai/sfa/ui/settings/Preference.kt b/app/src/main/java/io/nekohasekai/sfa/ui/settings/Preference.kt new file mode 100644 index 0000000..738d624 --- /dev/null +++ b/app/src/main/java/io/nekohasekai/sfa/ui/settings/Preference.kt @@ -0,0 +1,45 @@ +package io.nekohasekai.sfa.ui.settings + +import android.content.Context +import android.util.AttributeSet +import android.util.TypedValue +import androidx.preference.Preference +import io.nekohasekai.sfa.ktx.getAttrColor + +class Preference : Preference { + + constructor( + context: Context, + attrs: AttributeSet?, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attrs, defStyleAttr, defStyleRes) { + icon?.setTint(context.getAttrColor(com.google.android.material.R.attr.colorOnSurface)) + } + + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : this( + context, + attrs, + defStyleAttr, + 0 + ) + + constructor(context: Context, attrs: AttributeSet?) : this( + context, attrs, getAttr( + context, androidx.preference.R.attr.preferenceStyle, + android.R.attr.preferenceStyle + ) + ) + + companion object { + private fun getAttr(context: Context, attr: Int, fallbackAttr: Int): Int { + val value = TypedValue() + context.theme.resolveAttribute(attr, value, true) + if (value.resourceId != 0) { + return attr + } + return fallbackAttr + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/nekohasekai/sfa/ui/shared/AbstractActivity.kt b/app/src/main/java/io/nekohasekai/sfa/ui/shared/AbstractActivity.kt index 112c679..9d36131 100644 --- a/app/src/main/java/io/nekohasekai/sfa/ui/shared/AbstractActivity.kt +++ b/app/src/main/java/io/nekohasekai/sfa/ui/shared/AbstractActivity.kt @@ -5,7 +5,6 @@ import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.content.res.AppCompatResources import com.google.android.material.color.DynamicColors -import com.google.android.material.elevation.SurfaceColors import io.nekohasekai.sfa.R import io.nekohasekai.sfa.ktx.getAttrColor @@ -16,9 +15,10 @@ abstract class AbstractActivity : AppCompatActivity() { DynamicColors.applyToActivityIfAvailable(this) - val color = SurfaceColors.SURFACE_2.getColor(this) - window.statusBarColor = color - window.navigationBarColor = color + val colorSurfaceContainer = + getAttrColor(com.google.android.material.R.attr.colorSurfaceContainer) + window.statusBarColor = colorSurfaceContainer + window.navigationBarColor = colorSurfaceContainer supportActionBar?.setHomeAsUpIndicator(AppCompatResources.getDrawable( this@AbstractActivity, diff --git a/app/src/main/res/drawable/ic_delete_24.xml b/app/src/main/res/drawable/ic_delete_24.xml index de011dd..a4d241e 100644 --- a/app/src/main/res/drawable/ic_delete_24.xml +++ b/app/src/main/res/drawable/ic_delete_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_electric_bolt_24.xml b/app/src/main/res/drawable/ic_electric_bolt_24.xml index a25c5ed..47daa99 100644 --- a/app/src/main/res/drawable/ic_electric_bolt_24.xml +++ b/app/src/main/res/drawable/ic_electric_bolt_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_expand_less_24.xml b/app/src/main/res/drawable/ic_expand_less_24.xml index a31d830..c1bb0df 100644 --- a/app/src/main/res/drawable/ic_expand_less_24.xml +++ b/app/src/main/res/drawable/ic_expand_less_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_expand_more_24.xml b/app/src/main/res/drawable/ic_expand_more_24.xml index 48368f3..47d3904 100644 --- a/app/src/main/res/drawable/ic_expand_more_24.xml +++ b/app/src/main/res/drawable/ic_expand_more_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_find_in_page_24.xml b/app/src/main/res/drawable/ic_find_in_page_24.xml index a5ab5f0..dd7af64 100644 --- a/app/src/main/res/drawable/ic_find_in_page_24.xml +++ b/app/src/main/res/drawable/ic_find_in_page_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_ios_share_24.xml b/app/src/main/res/drawable/ic_ios_share_24.xml index d426516..3970441 100644 --- a/app/src/main/res/drawable/ic_ios_share_24.xml +++ b/app/src/main/res/drawable/ic_ios_share_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_message_24.xml b/app/src/main/res/drawable/ic_message_24.xml index c20e247..a78be44 100644 --- a/app/src/main/res/drawable/ic_message_24.xml +++ b/app/src/main/res/drawable/ic_message_24.xml @@ -1,5 +1,11 @@ - - + + diff --git a/app/src/main/res/drawable/ic_more_vert_24.xml b/app/src/main/res/drawable/ic_more_vert_24.xml index 39fbab5..92fb152 100644 --- a/app/src/main/res/drawable/ic_more_vert_24.xml +++ b/app/src/main/res/drawable/ic_more_vert_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_settings_24.xml b/app/src/main/res/drawable/ic_settings_24.xml index 298a5a1..6ba2102 100644 --- a/app/src/main/res/drawable/ic_settings_24.xml +++ b/app/src/main/res/drawable/ic_settings_24.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4548d80..fab07a4 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,10 +5,53 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + + + + + + + + + + + + + + + + android:orientation="vertical" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> + app:defaultNavHost="true" /> diff --git a/app/src/main/res/layout/activity_per_app_proxy.xml b/app/src/main/res/layout/activity_per_app_proxy.xml index 17a947e..62ea8c9 100644 --- a/app/src/main/res/layout/activity_per_app_proxy.xml +++ b/app/src/main/res/layout/activity_per_app_proxy.xml @@ -25,10 +25,9 @@ - + android:layout_height="1dp" /> + android:id="@+id/scanVPNProgress" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:indeterminate="true" /> - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_configuration.xml b/app/src/main/res/layout/fragment_configuration.xml index 35c7ac1..13193e3 100644 --- a/app/src/main/res/layout/fragment_configuration.xml +++ b/app/src/main/res/layout/fragment_configuration.xml @@ -36,9 +36,6 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="16dp" - android:backgroundTint="@color/blue_grey_600" - android:text="@string/title_new_profile" - android:textColor="@android:color/white" app:icon="@drawable/ic_note_add_24" app:iconTint="@android:color/white" /> diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index 32b051c..eb15c42 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -6,41 +6,18 @@ android:layout_height="match_parent" tools:context=".ui.main.DashboardFragment"> - - - - - - - - - - - - - - + android:saveEnabled="false" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_dashboard_groups.xml b/app/src/main/res/layout/fragment_dashboard_groups.xml index e4ae400..2290090 100644 --- a/app/src/main/res/layout/fragment_dashboard_groups.xml +++ b/app/src/main/res/layout/fragment_dashboard_groups.xml @@ -1,6 +1,5 @@ @@ -16,7 +15,6 @@ + android:layout_height="match_parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_dashboard_overview.xml b/app/src/main/res/layout/fragment_dashboard_overview.xml index d9fde22..cf62726 100644 --- a/app/src/main/res/layout/fragment_dashboard_overview.xml +++ b/app/src/main/res/layout/fragment_dashboard_overview.xml @@ -1,6 +1,5 @@ @@ -17,21 +16,18 @@ + android:layout_height="match_parent" + android:padding="16dp"> + android:orientation="vertical"> @@ -39,7 +35,7 @@ @@ -254,7 +249,7 @@ @@ -441,11 +436,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:nestedScrollingEnabled="false" + android:orientation="horizontal" android:padding="8dp" - app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" - app:spanCount="3" - - tools:itemCount="3" tools:listitem="@layout/view_clash_mode_button" /> @@ -456,7 +448,7 @@ style="?attr/materialCardViewElevatedStyle" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="16dp" + android:layout_marginBottom="16dp" android:visibility="gone" tools:visibility="visible"> @@ -482,8 +474,7 @@ android:id="@+id/profileCard" style="?attr/materialCardViewElevatedStyle" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="16dp"> + android:layout_height="wrap_content"> - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_log.xml b/app/src/main/res/layout/fragment_log.xml index 58313ac..aa00187 100644 --- a/app/src/main/res/layout/fragment_log.xml +++ b/app/src/main/res/layout/fragment_log.xml @@ -36,9 +36,7 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="16dp" - android:backgroundTint="@color/blue_grey_600" - app:srcCompat="@drawable/ic_play_arrow_24" - app:tint="@android:color/white" /> + app:srcCompat="@drawable/ic_play_arrow_24" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_qrcode_dialog.xml b/app/src/main/res/layout/fragment_qrcode_dialog.xml index 691808e..6278847 100644 --- a/app/src/main/res/layout/fragment_qrcode_dialog.xml +++ b/app/src/main/res/layout/fragment_qrcode_dialog.xml @@ -11,19 +11,18 @@ android:layout_height="match_parent" app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"> - - - + + diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 2284e93..08c4ce5 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -19,7 +19,7 @@ style="?attr/materialCardViewElevatedStyle" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="16dp"> + android:layout_marginBottom="16dp"> + + android:layout_marginBottom="16dp"> @@ -263,7 +264,7 @@ style="?attr/materialCardViewElevatedStyle" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="16dp"> + android:layout_marginBottom="16dp"> + android:layout_marginBottom="16dp"> + android:layout_marginBottom="16dp"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_dashboard_group.xml b/app/src/main/res/layout/view_dashboard_group.xml index b4b369a..018ec0a 100644 --- a/app/src/main/res/layout/view_dashboard_group.xml +++ b/app/src/main/res/layout/view_dashboard_group.xml @@ -4,70 +4,87 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical"> + android:orientation="vertical" + android:padding="16dp"> - + android:layout_height="wrap_content"> - - - + android:orientation="vertical" + android:padding="16dp"> - + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + android:paddingEnd="56dp" /> + - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/view_dashboard_group_item.xml b/app/src/main/res/layout/view_dashboard_group_item.xml index 3661c5e..8dba8b1 100644 --- a/app/src/main/res/layout/view_dashboard_group_item.xml +++ b/app/src/main/res/layout/view_dashboard_group_item.xml @@ -1,11 +1,14 @@ + app:cardBackgroundColor="?colorSurfaceContainer" + app:cardCornerRadius="0dp" + app:cardElevation="0dp"> + diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 20af41d..1cf86db 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -29,9 +29,10 @@ android:label="@string/title_settings" tools:layout="@layout/fragment_settings" /> - + \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml deleted file mode 100644 index 0675105..0000000 --- a/app/src/main/res/values-night/colors.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #565656 - \ 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 deleted file mode 100644 index 92d6572..0000000 --- a/app/src/main/res/values-night/themes.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index b004f45..e85fe50 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -11,6 +11,4 @@ #e91e63 #00a6b2 #ececec - - #cfcfcf diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c550930..5a61900 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -150,4 +150,7 @@ wifi_ssid or wifi_bssid routing rules. To make them work, sing-box uses the location permission in the background to get information about the connected Wi-Fi network. The information will be used for routing purposes only.]]> background location permission is required. Select Allow all the time to grant the permission.]]> Open Settings + + Core + \ 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 9ad41ba..fe6a154 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,8 +1,4 @@ - - - +