commit 10a001de892532a983da01095a1b2caf4f8cd2e4 Author: Fabio Mazza Date: Sun Jan 21 17:30:34 2024 +0100 Manage permissions on first run, ask for notification diff --git a/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt b/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt index 3320c94..7962796 100644 --- a/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt +++ b/app/src/main/java/it/reyboz/bustorino/ActivityIntro.kt @@ -1,13 +1,11 @@ package it.reyboz.bustorino import android.content.Intent +import android.os.Build import android.os.Bundle import android.util.Log -import android.util.TypedValue import android.view.View import android.widget.ImageButton -import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.res.ResourcesCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.viewpager2.adapter.FragmentStateAdapter @@ -17,8 +15,9 @@ import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator import it.reyboz.bustorino.data.PreferencesHolder import it.reyboz.bustorino.fragments.IntroFragment +import it.reyboz.bustorino.middleware.GeneralActivity -class ActivityIntro : AppCompatActivity(), IntroFragment.IntroListener { +class ActivityIntro : GeneralActivity(), IntroFragment.IntroListener { private lateinit var viewPager : ViewPager2 private lateinit var btnForward: ImageButton @@ -28,7 +27,6 @@ class ActivityIntro : AppCompatActivity(), IntroFragment.IntroListener { private var restartMain = true - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_intro) @@ -119,7 +117,7 @@ class ActivityIntro : AppCompatActivity(), IntroFragment.IntroListener { const private val DEBUG_TAG = "BusTO-IntroActivity" const val RESTART_MAIN = "restartMainActivity" - const val NUM_ITEMS = 7 + val NUM_ITEMS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) 8 else 7 } override fun closeIntroduction() { diff --git a/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java b/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java index 3905f5a..f5bfea6 100644 --- a/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java +++ b/app/src/main/java/it/reyboz/bustorino/ActivityPrincipal.java @@ -351,6 +351,7 @@ public class ActivityPrincipal extends GeneralActivity implements FragmentListen return super.onCreateOptionsMenu(menu); } + //requesting permissions @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); diff --git a/app/src/main/java/it/reyboz/bustorino/fragments/IntroFragment.kt b/app/src/main/java/it/reyboz/bustorino/fragments/IntroFragment.kt index 7cd18a3..4ccaee4 100644 --- a/app/src/main/java/it/reyboz/bustorino/fragments/IntroFragment.kt +++ b/app/src/main/java/it/reyboz/bustorino/fragments/IntroFragment.kt @@ -1,7 +1,7 @@ package it.reyboz.bustorino.fragments import android.content.Context -import android.graphics.BitmapFactory +import android.graphics.* import android.graphics.text.LineBreaker import android.os.Build import android.os.Bundle @@ -9,33 +9,38 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button -import android.widget.ImageButton import android.widget.ImageView import android.widget.TextView +import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat import androidx.fragment.app.Fragment import it.reyboz.bustorino.R import it.reyboz.bustorino.backend.utils +import it.reyboz.bustorino.util.Permissions +import it.reyboz.bustorino.util.ViewUtils import java.lang.IllegalStateException -// TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val SCREEN_INDEX = "screenindex" -/** - * A simple [Fragment] subclass. - * Use the [IntroFragment.newInstance] factory method to - * create an instance of this fragment. - */ class IntroFragment : Fragment() { - // TODO: Rename and change types of parameters private var screenIndex = 1 private lateinit var imageHolder: ImageView private lateinit var textView: TextView - - private lateinit var listener: IntroListener + private lateinit var interactButton: Button + + private val locationRequestResLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()){ res -> + //onActivityResult(res: map) + if(res.get(Permissions.LOCATION_PERMISSIONS[0])==true || res.get(Permissions.LOCATION_PERMISSIONS[1])==true) + setInteractButtonState(ButtonState.LOCATION,false) + } + private val notificationsReqLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) { + if (it) setInteractButtonState(ButtonState.NOTIFICATIONS, false) + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { @@ -57,9 +62,10 @@ class IntroFragment : Fragment() { ): View? { // Inflate the layout for this fragment val root= inflater.inflate(R.layout.fragment_intro, container, false) + imageHolder = root.findViewById(R.id.image_tutorial) textView = root.findViewById(R.id.tutorialTextView) - + interactButton = root.findViewById(R.id.permissionButton) when(screenIndex){ 0 -> { @@ -81,7 +87,15 @@ class IntroFragment : Fragment() { } 4 ->{ setImageBitmap(imageHolder, R.drawable.tuto_map) + val permGranted = (Permissions.anyLocationPermissionsGranted(requireContext())) + setInteractButtonState(ButtonState.LOCATION, !permGranted) textView.text = utils.convertHtml(getString(R.string.tutorial_map)) + interactButton.setOnClickListener { + //ask location permission + locationRequestResLauncher.launch(Permissions.LOCATION_PERMISSIONS) + } + interactButton.visibility = View.VISIBLE + } 5 ->{ setImageBitmap(imageHolder, R.drawable.tuto_line_det) @@ -91,9 +105,37 @@ class IntroFragment : Fragment() { setImageBitmap(imageHolder,R.drawable.tuto_menu) setTextHtmlDescription(R.string.tutorial_menu) //this is the cheapest trick ever lol - val closeButton = root.findViewById