diff options
author | Amit Kumar <amitkma@e.email> | 2021-05-14 21:20:57 +0530 |
---|---|---|
committer | Amit Kumar <amitkma@e.email> | 2021-05-14 21:20:57 +0530 |
commit | da842396556248654acacfdebbc01f5e20132eb6 (patch) | |
tree | f2953fe0c56fea020869d0dfed77f3a4e851d434 /app/src | |
parent | 7c02e9a048319c10d7396e7ec094c368f27273fd (diff) |
Extract toolbar implementation and add back navigation support
Diffstat (limited to 'app/src')
16 files changed, 140 insertions, 142 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/common/NavToolbarFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/common/NavToolbarFragment.kt new file mode 100644 index 0000000..0a9d102 --- /dev/null +++ b/app/src/main/java/foundation/e/privacycentralapp/common/NavToolbarFragment.kt @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2021 E FOUNDATION + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package foundation.e.privacycentralapp.common + +import android.widget.Toolbar +import androidx.annotation.LayoutRes + +abstract class NavToolbarFragment(@LayoutRes contentLayoutId: Int) : ToolbarFragment(contentLayoutId) { + + override fun setupToolbar(toolbar: Toolbar) { + super.setupToolbar(toolbar) + toolbar.apply { + setNavigationIcon(lineageos.platform.R.drawable.ic_back) + setNavigationOnClickListener { + requireActivity().onBackPressed() + } + } + } +} diff --git a/app/src/main/java/foundation/e/privacycentralapp/common/ToolbarFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/common/ToolbarFragment.kt new file mode 100644 index 0000000..c316340 --- /dev/null +++ b/app/src/main/java/foundation/e/privacycentralapp/common/ToolbarFragment.kt @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2021 E FOUNDATION + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package foundation.e.privacycentralapp.common + +import android.os.Bundle +import android.view.View +import android.widget.Toolbar +import androidx.annotation.LayoutRes +import androidx.fragment.app.Fragment +import foundation.e.privacycentralapp.R + +abstract class ToolbarFragment(@LayoutRes contentLayoutId: Int) : Fragment(contentLayoutId) { + + /** + * @return title to be used in toolbar + */ + abstract fun getTitle(): String + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupToolbar(view.findViewById(R.id.toolbar)) + } + + open fun setupToolbar(toolbar: Toolbar) { + toolbar.title = getTitle() + } +} diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt index f0a7397..4164fea 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt @@ -26,15 +26,14 @@ import android.view.View import android.widget.ProgressBar import android.widget.RelativeLayout import android.widget.TextView -import android.widget.Toolbar import androidx.core.widget.NestedScrollView -import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.fragment.app.add import androidx.fragment.app.commit import androidx.lifecycle.lifecycleScope import foundation.e.flowmvi.MVIView import foundation.e.privacycentralapp.R +import foundation.e.privacycentralapp.common.ToolbarFragment import foundation.e.privacycentralapp.dummy.mapToString import foundation.e.privacycentralapp.features.internetprivacy.InternetPrivacyFragment import foundation.e.privacycentralapp.features.location.FakeLocationFragment @@ -43,7 +42,7 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect class DashboardFragment : - Fragment(R.layout.fragment_dashboard), + ToolbarFragment(R.layout.fragment_dashboard), MVIView<DashboardFeature.State, DashboardFeature.Action> { private val viewModel: DashboardViewModel by activityViewModels() @@ -97,8 +96,6 @@ class DashboardFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val toolbar = view.findViewById<Toolbar>(R.id.toolbar) - setupToolbar(toolbar) addClickToMore(view.findViewById(R.id.personal_leakag_info)) view.let { it.findViewById<TextView>(R.id.tap_to_enable_quick_protection).setOnClickListener { @@ -116,11 +113,7 @@ class DashboardFragment : } } - private fun setupToolbar(toolbar: Toolbar) { - val activity = requireActivity() - activity.setActionBar(toolbar) - activity.title = "My Privacy Dashboard" - } + override fun getTitle(): String = "My Privacy Dashboard" private fun addClickToMore(textView: TextView) { val clickToMore = SpannableString("Click to learn more") diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/QuickProtectionFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/QuickProtectionFragment.kt index c120b49..442cfd2 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/QuickProtectionFragment.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/QuickProtectionFragment.kt @@ -18,23 +18,16 @@ package foundation.e.privacycentralapp.features.dashboard import android.content.Context -import android.os.Bundle -import android.view.View -import android.widget.Toolbar import androidx.activity.addCallback -import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import foundation.e.privacycentralapp.R +import foundation.e.privacycentralapp.common.NavToolbarFragment -class QuickProtectionFragment : Fragment(R.layout.fragment_quick_protection) { +class QuickProtectionFragment : NavToolbarFragment(R.layout.fragment_quick_protection) { private val viewModel: DashboardViewModel by activityViewModels() - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - val toolbar = view.findViewById<Toolbar>(R.id.toolbar) - setupToolbar(toolbar) - } + override fun getTitle(): String = "Quick protection" override fun onAttach(context: Context) { super.onAttach(context) @@ -44,10 +37,4 @@ class QuickProtectionFragment : Fragment(R.layout.fragment_quick_protection) { requireActivity().onBackPressed() } } - - private fun setupToolbar(toolbar: Toolbar) { - val activity = requireActivity() - activity.setActionBar(toolbar) - activity.title = "Quick protection" - } } diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyFragment.kt index a8c1671..1844129 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyFragment.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/features/internetprivacy/InternetPrivacyFragment.kt @@ -21,18 +21,17 @@ import android.os.Bundle import android.view.View import android.widget.RadioButton import android.widget.Toast -import android.widget.Toolbar -import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import foundation.e.flowmvi.MVIView import foundation.e.privacycentralapp.R +import foundation.e.privacycentralapp.common.NavToolbarFragment import foundation.e.privacycentralapp.dummy.InternetPrivacyMode import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect class InternetPrivacyFragment : - Fragment(R.layout.fragment_internet_activity_policy), + NavToolbarFragment(R.layout.fragment_internet_activity_policy), MVIView<InternetPrivacyFeature.State, InternetPrivacyFeature.Action> { private val viewModel: InternetPrivacyViewModel by viewModels() @@ -63,16 +62,10 @@ class InternetPrivacyFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val toolbar = view.findViewById<Toolbar>(R.id.toolbar) - setupToolbar(toolbar) bindClickListeners(view) } - private fun setupToolbar(toolbar: Toolbar) { - val activity = requireActivity() - activity.setActionBar(toolbar) - activity.title = "My Internet Activity Privacy" - } + override fun getTitle(): String = "My Internet Activity Privacy" private fun bindClickListeners(fragmentView: View) { fragmentView.let { diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationFragment.kt index d569e2f..2d174f0 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationFragment.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationFragment.kt @@ -31,10 +31,8 @@ import android.widget.FrameLayout import android.widget.ImageView import android.widget.RadioButton import android.widget.Toast -import android.widget.Toolbar import androidx.annotation.NonNull import androidx.core.widget.addTextChangedListener -import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import com.google.android.material.textfield.TextInputLayout @@ -52,12 +50,12 @@ import com.mapbox.mapboxsdk.location.LocationUpdate import com.mapbox.mapboxsdk.location.modes.CameraMode import com.mapbox.mapboxsdk.location.modes.RenderMode import com.mapbox.mapboxsdk.maps.MapboxMap -import com.mapbox.mapboxsdk.maps.OnMapReadyCallback import com.mapbox.mapboxsdk.maps.Style import foundation.e.flowmvi.MVIView import foundation.e.privacycentralapp.DependencyContainer import foundation.e.privacycentralapp.PrivacyCentralApplication import foundation.e.privacycentralapp.R +import foundation.e.privacycentralapp.common.NavToolbarFragment import foundation.e.privacycentralapp.dummy.LocationMode import foundation.e.privacycentralapp.extensions.viewModelProviderFactoryOf import kotlinx.coroutines.Job @@ -68,7 +66,7 @@ import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch class FakeLocationFragment : - Fragment(R.layout.fragment_fake_location), + NavToolbarFragment(R.layout.fragment_fake_location), MVIView<FakeLocationFeature.State, FakeLocationFeature.Action>, PermissionsListener { @@ -180,6 +178,10 @@ class FakeLocationFragment : Mapbox.getInstance(requireContext(), getString(R.string.mapbox_key)) } + override fun getTitle(): String { + return getString(R.string.my_location_title) + } + private fun displayToast(message: String) { Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT) .show() @@ -187,8 +189,7 @@ class FakeLocationFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val toolbar = view.findViewById<Toolbar>(R.id.toolbar) - setupToolbar(toolbar) + setupViews(view) mapView = view.findViewById<FakeLocationMapView>(R.id.mapView) .setup(savedInstanceState) { mapboxMap -> @@ -313,12 +314,6 @@ class FakeLocationFragment : } } - private fun setupToolbar(toolbar: Toolbar) { - val activity = requireActivity() - activity.setActionBar(toolbar) - activity.title = "Fake My Location" - } - override fun render(state: FakeLocationFeature.State) { Log.d("FakeMyLocation", "State: $state") latEditText.text = @@ -418,9 +413,3 @@ class FakeLocationFragment : } } } - -fun FakeLocationMapView.setup(savedInstanceState: Bundle?, callback: OnMapReadyCallback) = - this.apply { - onCreate(savedInstanceState) - getMapAsync(callback) - } diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationMapView.kt b/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationMapView.kt index cd0030a..e71bfcc 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationMapView.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/features/location/FakeLocationMapView.kt @@ -19,9 +19,11 @@ package foundation.e.privacycentralapp.features.location import android.annotation.SuppressLint import android.content.Context +import android.os.Bundle import android.util.AttributeSet import android.view.MotionEvent import com.mapbox.mapboxsdk.maps.MapView +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback class FakeLocationMapView @JvmOverloads constructor( context: Context, @@ -43,3 +45,9 @@ class FakeLocationMapView @JvmOverloads constructor( return true } } + +fun FakeLocationMapView.setup(savedInstanceState: Bundle?, callback: OnMapReadyCallback) = + this.apply { + onCreate(savedInstanceState) + getMapAsync(callback) + } diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/permissions/PermissionAppsFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/permissions/PermissionAppsFragment.kt index 224d1be..374a430 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/features/permissions/PermissionAppsFragment.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/features/permissions/PermissionAppsFragment.kt @@ -18,22 +18,20 @@ package foundation.e.privacycentralapp.features.permissions import android.os.Bundle -import android.view.View import android.widget.TextView import android.widget.Toast -import android.widget.Toolbar -import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import foundation.e.flowmvi.MVIView import foundation.e.privacycentralapp.R +import foundation.e.privacycentralapp.common.NavToolbarFragment import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect class PermissionAppsFragment : - Fragment(R.layout.fragment_permission_apps), + NavToolbarFragment(R.layout.fragment_permission_apps), MVIView<PermissionsFeature.State, PermissionsFeature.Action> { private val viewModel: PermissionsViewModel by viewModels() @@ -66,17 +64,7 @@ class PermissionAppsFragment : .show() } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - val toolbar = view.findViewById<Toolbar>(R.id.toolbar) - setupToolbar(toolbar) - } - - private fun setupToolbar(toolbar: Toolbar) { - val activity = requireActivity() - activity.setActionBar(toolbar) - activity.title = "My Apps Permission" - } + override fun getTitle(): String = "My Apps Permission" override fun render(state: PermissionsFeature.State) { state.currentPermission?.let { permission -> diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/permissions/PermissionsFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/permissions/PermissionsFragment.kt index 864a355..0b03343 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/features/permissions/PermissionsFragment.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/features/permissions/PermissionsFragment.kt @@ -19,9 +19,7 @@ package foundation.e.privacycentralapp.features.permissions import android.os.Bundle import android.view.View -import android.widget.Toolbar import androidx.core.os.bundleOf -import androidx.fragment.app.Fragment import androidx.fragment.app.add import androidx.fragment.app.commit import androidx.fragment.app.viewModels @@ -30,10 +28,11 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import foundation.e.flowmvi.MVIView import foundation.e.privacycentralapp.R +import foundation.e.privacycentralapp.common.NavToolbarFragment import kotlinx.coroutines.flow.Flow class PermissionsFragment : - Fragment(R.layout.fragment_permissions), + NavToolbarFragment(R.layout.fragment_permissions), MVIView<PermissionsFeature.State, PermissionsFeature.Action> { private val viewModel: PermissionsViewModel by viewModels() @@ -50,15 +49,9 @@ class PermissionsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val toolbar = view.findViewById<Toolbar>(R.id.toolbar) - setupToolbar(toolbar) } - private fun setupToolbar(toolbar: Toolbar) { - val activity = requireActivity() - activity.setActionBar(toolbar) - activity.title = "My Apps Permission" - } + override fun getTitle(): String = "My Apps Permission" override fun render(state: PermissionsFeature.State) { view?.findViewById<RecyclerView>(R.id.recylcer_view_permissions)?.apply { diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml index 663c270..027945d 100644 --- a/app/src/main/res/layout/fragment_dashboard.xml +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -6,14 +6,7 @@ android:layout_height="match_parent" > - <Toolbar - android:id="@+id/toolbar" - android:layout_width="match_parent" - android:layout_height="?android:attr/actionBarSize" - android:layout_gravity="top|center" - android:background="@color/white" - tools:layout_height="56dp" - /> + <include layout="@layout/toolbar"/> <ProgressBar android:id="@+id/loadingSpinner" diff --git a/app/src/main/res/layout/fragment_fake_location.xml b/app/src/main/res/layout/fragment_fake_location.xml index 7d32bfa..de62537 100644 --- a/app/src/main/res/layout/fragment_fake_location.xml +++ b/app/src/main/res/layout/fragment_fake_location.xml @@ -8,14 +8,7 @@ android:layout_width="match_parent" > - <Toolbar - android:background="@color/white" - android:id="@+id/toolbar" - android:layout_gravity="top|center" - android:layout_height="?android:attr/actionBarSize" - android:layout_width="match_parent" - tools:layout_height="56dp" - /> + <include layout="@layout/toolbar"/> <androidx.core.widget.NestedScrollView android:layout_height="match_parent" @@ -57,20 +50,6 @@ android:textSize="14sp" /> - <TextView - android:fontFamily="sans-serif-medium" - android:id="@+id/my_location_header" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:paddingBottom="8dp" - android:paddingTop="16dp" - android:paddingLeft="32dp" - android:paddingRight="32dp" - android:text="@string/my_location_title" - android:textColor="@color/black" - android:textSize="14sp" - /> - <RadioGroup android:id="@+id/location_choices" android:layout_height="wrap_content" diff --git a/app/src/main/res/layout/fragment_internet_activity_policy.xml b/app/src/main/res/layout/fragment_internet_activity_policy.xml index 6a53498..66ff2b4 100644 --- a/app/src/main/res/layout/fragment_internet_activity_policy.xml +++ b/app/src/main/res/layout/fragment_internet_activity_policy.xml @@ -7,14 +7,7 @@ android:background="@color/white" > - <Toolbar - android:id="@+id/toolbar" - android:layout_width="match_parent" - android:layout_height="?android:attr/actionBarSize" - android:layout_gravity="top|center" - android:background="@color/white" - tools:layout_height="56dp" - /> + <include layout="@layout/toolbar"/> <androidx.core.widget.NestedScrollView android:layout_width="match_parent" diff --git a/app/src/main/res/layout/fragment_permission_apps.xml b/app/src/main/res/layout/fragment_permission_apps.xml index 2888af0..605b6ff 100644 --- a/app/src/main/res/layout/fragment_permission_apps.xml +++ b/app/src/main/res/layout/fragment_permission_apps.xml @@ -7,14 +7,7 @@ android:background="@color/white" > - <Toolbar - android:id="@+id/toolbar" - android:layout_width="match_parent" - android:layout_height="?android:attr/actionBarSize" - android:layout_gravity="top|center" - android:background="@color/white" - tools:layout_height="56dp" - /> + <include layout="@layout/toolbar"/> <LinearLayout android:layout_width="match_parent" diff --git a/app/src/main/res/layout/fragment_permissions.xml b/app/src/main/res/layout/fragment_permissions.xml index 9d1e972..72748b4 100644 --- a/app/src/main/res/layout/fragment_permissions.xml +++ b/app/src/main/res/layout/fragment_permissions.xml @@ -7,14 +7,7 @@ android:background="@color/white" > - <Toolbar - android:id="@+id/toolbar" - android:layout_width="match_parent" - android:layout_height="?android:attr/actionBarSize" - android:layout_gravity="top|center" - android:background="@color/white" - tools:layout_height="56dp" - /> + <include layout="@layout/toolbar"/> <LinearLayout android:layout_width="match_parent" diff --git a/app/src/main/res/layout/fragment_quick_protection.xml b/app/src/main/res/layout/fragment_quick_protection.xml index e8233ee..55d6f71 100644 --- a/app/src/main/res/layout/fragment_quick_protection.xml +++ b/app/src/main/res/layout/fragment_quick_protection.xml @@ -6,15 +6,7 @@ android:background="@color/white" > - <Toolbar - android:id="@+id/toolbar" - android:layout_width="match_parent" - android:layout_height="?android:attr/actionBarSize" - android:layout_gravity="top|center" - android:background="@color/white" - tools:layout_height="56dp" - /> - + <include layout="@layout/toolbar"/> <LinearLayout android:layout_width="match_parent" diff --git a/app/src/main/res/layout/toolbar.xml b/app/src/main/res/layout/toolbar.xml new file mode 100644 index 0000000..29c1fa1 --- /dev/null +++ b/app/src/main/res/layout/toolbar.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + ~ Copyright (C) 2021 E FOUNDATION + ~ + ~ This program is free software: you can redistribute it and/or modify + ~ it under the terms of the GNU General Public License as published by + ~ the Free Software Foundation, either version 3 of the License, or + ~ (at your option) any later version. + ~ + ~ This program is distributed in the hope that it will be useful, + ~ but WITHOUT ANY WARRANTY; without even the implied warranty of + ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ~ GNU General Public License for more details. + ~ + ~ You should have received a copy of the GNU General Public License + ~ along with this program. If not, see <https://www.gnu.org/licenses/>. + --> + +<Toolbar xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:background="@color/white" + android:id="@+id/toolbar" + android:layout_gravity="top|center" + android:layout_height="?android:attr/actionBarSize" + android:layout_width="match_parent" + tools:layout_height="56dp" + />
\ No newline at end of file |