X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyCell.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacycell%2Factivities%2FPrivacyCell.kt;h=964854687d7610f47863488a91bab640d40ab5ac;hp=b30d0fd3f077a1184b6e68acb3a372cb2fde8268;hb=70fa89f618b62a9d17064699ec130341069aa77d;hpb=d4477ae05aa9f47dfab32a7e0a6a55cd412eedf4 diff --git a/app/src/main/java/com/stoutner/privacycell/activities/PrivacyCell.kt b/app/src/main/java/com/stoutner/privacycell/activities/PrivacyCell.kt index b30d0fd..9648546 100644 --- a/app/src/main/java/com/stoutner/privacycell/activities/PrivacyCell.kt +++ b/app/src/main/java/com/stoutner/privacycell/activities/PrivacyCell.kt @@ -27,40 +27,53 @@ import android.telephony.PhoneStateListener import android.telephony.ServiceState import android.telephony.TelephonyDisplayInfo import android.telephony.TelephonyManager +import android.view.MenuItem +import android.view.View import android.widget.ImageView import android.widget.TextView +import androidx.appcompat.app.ActionBar +import androidx.appcompat.app.ActionBarDrawerToggle import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.content.res.AppCompatResources +import androidx.appcompat.widget.Toolbar import androidx.core.app.ActivityCompat -import androidx.fragment.app.DialogFragment +import androidx.core.view.GravityCompat +import androidx.drawerlayout.widget.DrawerLayout + +import com.google.android.material.navigation.NavigationView import com.stoutner.privacycell.R import com.stoutner.privacycell.dialogs.PhonePermissionDialog +import com.stoutner.privacycell.dialogs.WebViewDialog -class PrivacyCell : AppCompatActivity(), PhonePermissionDialog.StoragePermissionDialogListener { +class PrivacyCell : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener, PhonePermissionDialog.StoragePermissionDialogListener { // Declare the class variables. private lateinit var context: Context private lateinit var telephonyManager: TelephonyManager + private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle // Declare the views. - lateinit var secureFromStingrayImageView: ImageView - lateinit var secureFromStingrayTextView: TextView - lateinit var voiceNetworkTextView: TextView - lateinit var voiceNetworkDetailsTextView: TextView - lateinit var dataNetworkTextView: TextView - lateinit var dataNetworkDetailsTextView: TextView - lateinit var additionalNetworkInfoTextView: TextView - lateinit var additionalNetworkInfoDetailsTextView: TextView + private lateinit var drawerLayout: DrawerLayout + private lateinit var secureFromStingrayImageView: ImageView + private lateinit var secureFromStingrayTextView: TextView + private lateinit var voiceNetworkTextView: TextView + private lateinit var voiceNetworkDetailsTextView: TextView + private lateinit var dataNetworkTextView: TextView + private lateinit var dataNetworkDetailsTextView: TextView + private lateinit var additionalNetworkInfoTextView: TextView + private lateinit var additionalNetworkInfoDetailsTextView: TextView override fun onCreate(savedInstanceState: Bundle?) { // Run the default commands. super.onCreate(savedInstanceState) // Set the content view. - setContentView(R.layout.privacy_cell_scrollview) + setContentView(R.layout.privacy_cell_drawerlayout) // Get handles for the views. + drawerLayout = findViewById(R.id.drawerlayout) + val toolbar = findViewById(R.id.toolbar) secureFromStingrayImageView = findViewById(R.id.secure_from_stingray_imageview) secureFromStingrayTextView = findViewById(R.id.secure_from_stingray_textview) voiceNetworkTextView = findViewById(R.id.voice_network) @@ -69,10 +82,57 @@ class PrivacyCell : AppCompatActivity(), PhonePermissionDialog.StoragePermission dataNetworkDetailsTextView = findViewById(R.id.data_network_details) additionalNetworkInfoTextView = findViewById(R.id.additional_network_info) additionalNetworkInfoDetailsTextView = findViewById(R.id.additional_network_info_details) + val navigationView = findViewById(R.id.navigationview) // Get handles for the context and the telephony manager. context = this telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager + + // Set the support action bar. + setSupportActionBar(toolbar) + + // Get a handle for the action bar. + val actionBar = supportActionBar!! + + // Set a custom view on the action bar. + actionBar.setCustomView(R.layout.app_bar_textview) + + // Display the custom view. + actionBar.displayOptions = ActionBar.DISPLAY_SHOW_CUSTOM + + // Define a hamburger icon at the start of the app bar. It will be populated in `onPostCreate()`. + actionBarDrawerToggle = ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open_navigation_drawer, R.string.close_navigation_drawer) + + // Listen for touches on the navigation menu. + navigationView.setNavigationItemSelectedListener(this) + + // Add a drawer listener. + drawerLayout.addDrawerListener(object : DrawerLayout.DrawerListener { + override fun onDrawerSlide(drawerView: View, slideOffset: Float) { + // Do nothing. + } + + override fun onDrawerOpened(drawerView: View) { + // Do nothing. + } + + override fun onDrawerClosed(drawerView: View) { + // Reset the drawer icon when the drawer is closed. Otherwise, it is an arrow if the drawer is open when the app is restarted. + actionBarDrawerToggle.syncState() + } + + override fun onDrawerStateChanged(newState: Int) { + // Do nothing. + } + }) + } + + override fun onPostCreate(savedInstanceState: Bundle?) { + // Run the default commands. + super.onPostCreate(savedInstanceState) + + // Sync the state of the DrawerToggle after the default `onRestoreInstanceState()` has finished. This creates the navigation drawer icon. + actionBarDrawerToggle.syncState() } override fun onResume() { @@ -89,7 +149,7 @@ class PrivacyCell : AppCompatActivity(), PhonePermissionDialog.StoragePermission // Check to see if a phone permission dialog is already displayed. This happens if the app is restarted when the dialog is shown. if (supportFragmentManager.findFragmentByTag(getString(R.string.phone_permission)) == null) { // No dialog is currently shown. // Instantiate the phone permission dialog fragment. - val phonePermissionDialogFragment: DialogFragment = PhonePermissionDialog() + val phonePermissionDialogFragment = PhonePermissionDialog() // Show the phone permission alert dialog. The permission will be requested when the dialog is closed. phonePermissionDialogFragment.show(supportFragmentManager, getString(R.string.phone_permission)) @@ -101,6 +161,38 @@ class PrivacyCell : AppCompatActivity(), PhonePermissionDialog.StoragePermission } } + override fun onNavigationItemSelected(menuItem: MenuItem) : Boolean { + // Get the menu item ID. + val menuItemId = menuItem.itemId + + // Run the commands that correspond to the selected menu item. + if (menuItemId == R.id.permissions) { // Permissions. + // Instantiate the permissions dialog fragment. + val permissionsDialogFragment = WebViewDialog().type(WebViewDialog.PERMISSIONS) + + // Show the permissions alert dialog. + permissionsDialogFragment.show(supportFragmentManager, getString(R.string.permissions)) + } else if (menuItemId == R.id.privacy_policy) { // Privacy Policy. + // Instantiate the privacy policy dialog fragment. + val privacyPolicyDialogFragment = WebViewDialog().type(WebViewDialog.PRIVACY_POLICY) + + // Show the privacy policy alert dialog. + privacyPolicyDialogFragment.show(supportFragmentManager, getString(R.string.privacy_policy)) + } else if (menuItemId == R.id.changelog) { // Changelog. + // Instantiate the changelog dialog fragment. + val changelogDialogFragment = WebViewDialog().type(WebViewDialog.CHANGELOG) + + // Show the changelog alert dialog. + changelogDialogFragment.show(supportFragmentManager, getString(R.string.changelog)) + } + + // Close the navigation drawer. + drawerLayout.closeDrawer(GravityCompat.START) + + // Consume the click. + return true + } + override fun onCloseStoragePermissionDialog() { // Request the read phone state permission. There is only one permission request in the app, so it has a request code of 0. ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_PHONE_STATE), 0)