Skip to content

Commit

Permalink
WiFiNetwork: Extract WiFi dialog logic to separate fragment
Browse files Browse the repository at this point in the history
Signed-off-by: Aayush Gupta <[email protected]>
  • Loading branch information
theimpulson committed Mar 10, 2024
1 parent fb71fb1 commit fd557a6
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 55 deletions.
5 changes: 4 additions & 1 deletion app/src/main/java/app/opass/ccip/model/WifiNetworkInfo.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package app.opass.ccip.model

import android.os.Parcelable
import com.google.gson.annotations.SerializedName
import kotlinx.parcelize.Parcelize

@Parcelize
data class WifiNetworkInfo(
@SerializedName("SSID")
val ssid: String,
@SerializedName("password")
val password: String?
)
) : Parcelable
57 changes: 4 additions & 53 deletions app/src/main/java/app/opass/ccip/ui/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package app.opass.ccip.ui

import android.app.Activity
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Intent
import android.content.res.Configuration
import android.os.Bundle
Expand All @@ -12,11 +10,9 @@ import android.widget.ImageView
import android.widget.RelativeLayout
import android.widget.TextView
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.getSystemService
import androidx.core.net.toUri
import androidx.core.view.GravityCompat
import androidx.core.view.updatePadding
Expand All @@ -30,19 +26,17 @@ import app.opass.ccip.extension.setOnApplyWindowInsetsListenerCompat
import app.opass.ccip.extension.updateMargin
import app.opass.ccip.model.Feature
import app.opass.ccip.model.FeatureType
import app.opass.ccip.model.WifiNetworkInfo
import app.opass.ccip.network.PortalClient
import app.opass.ccip.ui.announcement.AnnouncementFragment
import app.opass.ccip.ui.event.EventActivity
import app.opass.ccip.ui.fastpass.FastPassFragment
import app.opass.ccip.ui.fastpass.MyTicketFragment
import app.opass.ccip.ui.schedule.ScheduleTabFragment
import app.opass.ccip.ui.wifi.WiFiNetworkFragment
import app.opass.ccip.util.CryptoUtil
import app.opass.ccip.util.PreferenceUtil
import app.opass.ccip.util.WifiUtil
import coil.load
import com.google.android.material.navigation.NavigationView
import com.google.android.material.snackbar.Snackbar
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
Expand Down Expand Up @@ -275,7 +269,9 @@ class MainActivity : AppCompatActivity(), CoroutineScope {
val feature = item.origFeature
if (item.shouldShowLaunchIcon) return this.startActivity(Intent(Intent.ACTION_VIEW, feature.url!!.toUri()))
if (feature.feature == FeatureType.WIFI) {
feature.wifiNetworks?.let(::showWifiDialog)
feature.wifiNetworks?.let {
WiFiNetworkFragment.show(it, supportFragmentManager)
}
mDrawerLayout.closeDrawers()
return
}
Expand Down Expand Up @@ -309,51 +305,6 @@ class MainActivity : AppCompatActivity(), CoroutineScope {
mDrawerLayout.closeDrawers()
}

private fun onWifiSelected(info: WifiNetworkInfo) {
val success = WifiUtil.installNetwork(this, info)
if (success) {
Snackbar
.make(mDrawerLayout, R.string.wifi_saved, Snackbar.LENGTH_SHORT)
.setAnchorView(navbarAnchor)
.show()
} else {
val hasPassword = !info.password.isNullOrEmpty()
if (!hasPassword) {
Snackbar
.make(mDrawerLayout, R.string.failed_to_save_wifi, Snackbar.LENGTH_LONG)
.setAnchorView(navbarAnchor)
.show()
return
}

getSystemService<ClipboardManager>()?.run {
setPrimaryClip(ClipData.newPlainText("", info.password))
} ?: return
Snackbar
.make(mDrawerLayout, R.string.failed_to_save_wifi_copied_to_clipboard, Snackbar.LENGTH_LONG)
.setAnchorView(navbarAnchor)
.show()
}
}

private fun showWifiDialog(networks: List<WifiNetworkInfo>) {
val dialog = AlertDialog.Builder(this).setTitle(R.string.choose_network_to_connect).create()
val rv = RecyclerView(this).apply {
layoutParams = RecyclerView.LayoutParams(
RecyclerView.LayoutParams.MATCH_PARENT,
RecyclerView.LayoutParams.MATCH_PARENT
)
layoutManager = LinearLayoutManager(this@MainActivity)
adapter = WifiNetworkAdapter(networks) { info ->
dialog.dismiss()
onWifiSelected(info)
}
}

dialog.setView(rv)
dialog.show()
}

private fun isFeatureValid(f: Feature) : Boolean {
return when (f.feature) {
FeatureType.FAST_PASS,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package app.opass.ccip.ui
package app.opass.ccip.ui.wifi

import android.view.LayoutInflater
import android.view.View
Expand Down
69 changes: 69 additions & 0 deletions app/src/main/java/app/opass/ccip/ui/wifi/WiFiNetworkFragment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package app.opass.ccip.ui.wifi

import android.app.Dialog
import android.content.ClipData
import android.content.ClipboardManager
import android.os.Bundle
import androidx.core.content.getSystemService
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import app.opass.ccip.R
import app.opass.ccip.model.WifiNetworkInfo
import app.opass.ccip.util.WifiUtil
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar

class WiFiNetworkFragment(private val wifiNetworkInfoList: List<WifiNetworkInfo>) :
DialogFragment() {

companion object {
private const val TAG = "WiFiNetworkFragment"

fun show(wifiNetworkInfoList: List<WifiNetworkInfo>, fragmentManager: FragmentManager) {
WiFiNetworkFragment(wifiNetworkInfoList).show(fragmentManager, TAG)
}
}

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val recyclerView = RecyclerView(requireContext()).apply {
layoutParams = RecyclerView.LayoutParams(
RecyclerView.LayoutParams.MATCH_PARENT,
RecyclerView.LayoutParams.MATCH_PARENT
)
layoutManager = LinearLayoutManager(requireContext())
adapter = WifiNetworkAdapter(wifiNetworkInfoList) { info ->
onWifiSelected(info)
dialog?.dismiss()
}
}
return MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.choose_network_to_connect)
.setView(recyclerView)
.create()
}

private fun onWifiSelected(info: WifiNetworkInfo) {
val rootView = requireActivity().window.decorView.rootView

// Return early if password is null or empty
if (info.password.isNullOrEmpty()) {
Snackbar.make(rootView, R.string.failed_to_save_wifi, Snackbar.LENGTH_LONG).show()
return
}

if (WifiUtil.installNetwork(requireContext(), info)) {
Snackbar.make(rootView, R.string.wifi_saved, Snackbar.LENGTH_SHORT).show()
} else {
requireContext().getSystemService<ClipboardManager>()?.run {
setPrimaryClip(ClipData.newPlainText("", info.password))
} ?: return
Snackbar.make(
rootView,
R.string.failed_to_save_wifi_copied_to_clipboard,
Snackbar.LENGTH_LONG
).show()
}
}
}

0 comments on commit fd557a6

Please sign in to comment.