From e65c63d4a04b977ac374ea22b96ae79816d22db8 Mon Sep 17 00:00:00 2001 From: Muhamad Salman Hakim Alfarisi <13521010@std.stei.itb.ac.id> Date: Fri, 5 Apr 2024 16:10:48 +0700 Subject: [PATCH] feat(network-sensing): ui lost connection --- .../com/example/bondoman/LoginActivity.kt | 34 ++++++++++-- .../com/example/bondoman/LogoutFragment.kt | 55 ------------------- .../java/com/example/bondoman/MainActivity.kt | 23 -------- .../java/com/example/bondoman/ScanFragment.kt | 39 +++++++++++++ .../bondoman/services/RandomizeTransaction.kt | 6 -- app/src/main/res/layout/activity_login.xml | 4 +- app/src/main/res/layout/fragment_scan.xml | 37 +++++++++++-- app/src/main/res/layout/fragment_scanner.xml | 15 ----- .../main/res/layout/popup_connection_lost.xml | 1 + 9 files changed, 105 insertions(+), 109 deletions(-) delete mode 100644 app/src/main/java/com/example/bondoman/LogoutFragment.kt delete mode 100644 app/src/main/res/layout/fragment_scanner.xml diff --git a/app/src/main/java/com/example/bondoman/LoginActivity.kt b/app/src/main/java/com/example/bondoman/LoginActivity.kt index 2eaeb2e..f7bf5ed 100644 --- a/app/src/main/java/com/example/bondoman/LoginActivity.kt +++ b/app/src/main/java/com/example/bondoman/LoginActivity.kt @@ -9,24 +9,50 @@ import android.content.Intent import android.widget.Toast import android.annotation.SuppressLint import android.util.Log +import android.view.View +import android.widget.RelativeLayout +import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import com.example.bondoman.models.LoginRequest +import com.example.bondoman.services.ConnectivityObserver +import com.example.bondoman.services.NetworkSensing import com.example.bondoman.utils.RetrofitInstance import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import org.json.JSONException import org.json.JSONObject class LoginActivity : AppCompatActivity() { + private lateinit var networkSensing: NetworkSensing @SuppressLint("CommitPrefEdits") -// @OptIn(DelicateCoroutinesApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) - val buttonLogin = findViewById<Button>(R.id.buttonLogin) -// val editTextEmail = findViewById<EditText>(R.id.emailAddress) -// val editTextPassword = findViewById<EditText>(R.id.password) + val editTextEmail = findViewById<EditText>(R.id.emailAddress) + val editTextPassword = findViewById<EditText>(R.id.password) + val connectionLost = findViewById<RelativeLayout>(R.id.conn_lost) + networkSensing = NetworkSensing(this) + networkSensing.observe() + .onEach { state -> + when (state) { + ConnectivityObserver.NetworkState.CONNECTED -> { + editTextEmail.visibility = View.VISIBLE + editTextPassword.visibility = View.VISIBLE + buttonLogin.visibility = View.VISIBLE + connectionLost.visibility = View.GONE + } + ConnectivityObserver.NetworkState.DISCONNECTED -> { + editTextEmail.visibility = View.GONE + editTextPassword.visibility = View.GONE + buttonLogin.visibility = View.GONE + connectionLost.visibility = View.VISIBLE + } + } + } + .launchIn(lifecycleScope) buttonLogin.setOnClickListener { // val email = editTextEmail.text.toString() diff --git a/app/src/main/java/com/example/bondoman/LogoutFragment.kt b/app/src/main/java/com/example/bondoman/LogoutFragment.kt deleted file mode 100644 index 2861f8e..0000000 --- a/app/src/main/java/com/example/bondoman/LogoutFragment.kt +++ /dev/null @@ -1,55 +0,0 @@ -package com.example.bondoman -import android.content.Context.MODE_PRIVATE -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.Button -import androidx.fragment.app.Fragment -import android.content.Intent -import android.widget.EditText -import com.example.bondoman.services.RandomizeTransaction - -class LogoutFragment : Fragment() { - - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - val view = inflater.inflate(R.layout.fragment_logout, container, false) - - view.findViewById<Button>(R.id.logoutButton).setOnClickListener { - logout() - } - - view.findViewById<Button>(R.id.randomButton).setOnClickListener { - val listRandomText = listOf("MacBook Pro", "MacBook Air", "Mac Mini", "Mac Pro", "iMac") - val randomText = listRandomText.random() - - val randomizeTransactionIntent = Intent(requireContext(), RandomizeTransaction::class.java) - randomizeTransactionIntent.putExtra("transactionName", randomText) - randomizeTransactionIntent.setAction("com.example.bondoman.services.RandomizeTransaction") - requireContext().sendBroadcast(randomizeTransactionIntent) - } - return view - } - - private fun logout() { - clearUserSession() - val loginIntent = Intent(requireContext(), LoginActivity::class.java) - loginIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK - startActivity(loginIntent) - } - - private fun clearUserSession() { - val sharedPreferences = requireContext().getSharedPreferences("sharedPrefs", MODE_PRIVATE) - - val editor = sharedPreferences.edit() - editor.clear() - editor.apply() - } - - fun updateEditText(randomText: String?) { - view?.findViewById<EditText>(R.id.transactionName)?.setText(randomText) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/bondoman/MainActivity.kt b/app/src/main/java/com/example/bondoman/MainActivity.kt index b209412..026b0b5 100644 --- a/app/src/main/java/com/example/bondoman/MainActivity.kt +++ b/app/src/main/java/com/example/bondoman/MainActivity.kt @@ -30,7 +30,6 @@ import org.greenrobot.eventbus.EventBus class MainActivity : AppCompatActivity() { private lateinit var service: Intent - private lateinit var networkSensing: NetworkSensing private lateinit var transactionButton: ImageButton private lateinit var graphButton: ImageButton private lateinit var settingButton: ImageButton @@ -43,7 +42,6 @@ class MainActivity : AppCompatActivity() { setContentView(R.layout.activity_main) service = Intent(this, JWTExpiry::class.java) startService(service) - networkSensing = NetworkSensing(this) database = TransactionDB.getInstance(this) if (!database.isOpen) { @@ -106,27 +104,6 @@ class MainActivity : AppCompatActivity() { navbar.visibility = View.VISIBLE } } - networkSensing.observe() - .onEach { state -> - when (state) { - ConnectivityObserver.NetworkState.CONNECTED -> { - Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show() - } - ConnectivityObserver.NetworkState.DISCONNECTED -> { - runOnUiThread { - AlertDialog.Builder(this) - .setTitle("Network Status") - .setMessage("Disconnected") - .setPositiveButton("OK") { dialog, _ -> - dialog.dismiss() - } - .show() - } - } - } - } - .launchIn(lifecycleScope) - } override fun onSupportNavigateUp(): Boolean { val navController = findNavController(R.id.nav_host_fragment) diff --git a/app/src/main/java/com/example/bondoman/ScanFragment.kt b/app/src/main/java/com/example/bondoman/ScanFragment.kt index 3b30d62..cca6b5e 100644 --- a/app/src/main/java/com/example/bondoman/ScanFragment.kt +++ b/app/src/main/java/com/example/bondoman/ScanFragment.kt @@ -30,6 +30,7 @@ import android.view.Surface import android.view.TextureView import android.view.View import android.view.ViewGroup +import android.widget.FrameLayout import android.widget.ImageButton import android.widget.ImageView import android.widget.LinearLayout @@ -40,11 +41,16 @@ import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController +import com.example.bondoman.services.ConnectivityObserver +import com.example.bondoman.services.NetworkSensing import com.example.bondoman.utils.RetrofitInstance import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import okhttp3.MediaType import okhttp3.MultipartBody @@ -76,6 +82,7 @@ class ScanFragment : Fragment() { private var job: Job? = null private var cameraDevice: CameraDevice? = null + private lateinit var networkSensing: NetworkSensing override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -104,6 +111,38 @@ class ScanFragment : Fragment() { graphButton.isSelected = false settingButton.isSelected = false + val frameLayoutScan = view.findViewById<FrameLayout>(R.id.FrameLayout) + val imageConn = view.findViewById<ImageView>(R.id.image_conn) + val textConn = view.findViewById<TextView>(R.id.title_conn) + val descConn = view.findViewById<TextView>(R.id.message_conn) + val scanFragment = view.findViewById<RelativeLayout>(R.id.scan_fragment) + + networkSensing = NetworkSensing(requireContext()) + networkSensing.observe() + .onEach { state -> + when (state) { + ConnectivityObserver.NetworkState.CONNECTED -> { + imageConn.visibility = View.GONE + textConn.visibility = View.GONE + descConn.visibility = View.GONE + frameLayoutScan.visibility = View.VISIBLE + galleryButton.visibility = View.VISIBLE + captureButton.visibility = View.VISIBLE + scanFragment.setBackgroundColor(Color.parseColor("#1B1A55")) + } + ConnectivityObserver.NetworkState.DISCONNECTED -> { + imageConn.visibility = View.VISIBLE + textConn.visibility = View.VISIBLE + descConn.visibility = View.VISIBLE + frameLayoutScan.visibility = View.GONE + galleryButton.visibility = View.GONE + captureButton.visibility = View.GONE + scanFragment.setBackgroundColor(resources.getColor(R.color.white)) + } + } + } + .launchIn(lifecycleScope) + return view } diff --git a/app/src/main/java/com/example/bondoman/services/RandomizeTransaction.kt b/app/src/main/java/com/example/bondoman/services/RandomizeTransaction.kt index 33326fa..aebe2d6 100644 --- a/app/src/main/java/com/example/bondoman/services/RandomizeTransaction.kt +++ b/app/src/main/java/com/example/bondoman/services/RandomizeTransaction.kt @@ -3,13 +3,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent - import android.os.Handler - import android.os.Looper import android.util.Log - import android.widget.EditText - import androidx.appcompat.app.AppCompatActivity - import com.example.bondoman.LogoutFragment - import com.example.bondoman.R import org.greenrobot.eventbus.EventBus class RandomizeTransaction : BroadcastReceiver() { diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 728d070..fe450f7 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -19,6 +19,7 @@ <RelativeLayout + android:id="@+id/conn_lost" android:layout_width="match_parent" android:layout_height="0dp" android:gravity="center" @@ -26,8 +27,7 @@ app:layout_constraintTop_toBottomOf="@id/login_page" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintBottom_toBottomOf="parent" - android:visibility="invisible"> + app:layout_constraintBottom_toBottomOf="parent"> <ImageView diff --git a/app/src/main/res/layout/fragment_scan.xml b/app/src/main/res/layout/fragment_scan.xml index 90ccbe6..753bb28 100644 --- a/app/src/main/res/layout/fragment_scan.xml +++ b/app/src/main/res/layout/fragment_scan.xml @@ -1,10 +1,37 @@ <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/scan_fragment" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:background="#1B1A55"> + <ImageView + android:id="@+id/image_conn" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerInParent="true" + android:src="@drawable/rainbow_off" /> + + <TextView + android:id="@+id/title_conn" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@id/image_conn" + android:layout_centerHorizontal="true" + android:layout_marginTop="10dp" + android:text="Connection Lost" + android:textAppearance="?attr/textAppearanceHeadline6" /> + + <TextView + android:id="@+id/message_conn" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@id/title_conn" + android:layout_centerHorizontal="true" + android:layout_marginTop="8dp" + android:text="Please check your internet connection and try again." + android:textAppearance="?attr/textAppearanceBody2" /> <FrameLayout android:id="@+id/FrameLayout" @@ -36,7 +63,6 @@ android:background="@drawable/effect_rounded_edge"/> </FrameLayout> - <ImageButton android:layout_width="80dp" android:layout_height="80dp" @@ -85,6 +111,9 @@ android:layout_marginEnd="100dp" android:visibility="invisible"/> - - -</RelativeLayout> \ No newline at end of file +</RelativeLayout> +<!--android:id="@+id/scan_conn_lost"--> +<!--android:layout_width="match_parent"--> +<!--android:layout_height="match_parent"--> +<!--android:gravity="center"--> +<!--android:padding="16dp">--> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_scanner.xml b/app/src/main/res/layout/fragment_scanner.xml deleted file mode 100644 index f9f6f43..0000000 --- a/app/src/main/res/layout/fragment_scanner.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <SurfaceView - android:id="@+id/surface_view" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:paddingStart="20dp" - android:paddingTop="20dp" - android:paddingEnd="20dp" - android:paddingBottom="20dp" /> - -</RelativeLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/popup_connection_lost.xml b/app/src/main/res/layout/popup_connection_lost.xml index a9bccb3..1ac9708 100644 --- a/app/src/main/res/layout/popup_connection_lost.xml +++ b/app/src/main/res/layout/popup_connection_lost.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/scan_conn_lost" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" -- GitLab