From d52ff1557f68c857e0bd365b1b8d741449901487 Mon Sep 17 00:00:00 2001 From: M M Arif Date: Sat, 28 Mar 2020 19:49:08 +0500 Subject: [PATCH] Fix login issue with internet access. Better solution to check internet connection with broadcast receiver. Prioritize token login. --- .../mian/gitnex/activities/LoginActivity.java | 52 +++++++----- .../mian/gitnex/helpers/NetworkObserver.java | 82 +++++++++++++++++++ app/src/main/res/layout/activity_login.xml | 33 ++++---- 3 files changed, 132 insertions(+), 35 deletions(-) create mode 100644 app/src/main/java/org/mian/gitnex/helpers/NetworkObserver.java diff --git a/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java b/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java index 5136b096..bd033d42 100644 --- a/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java @@ -23,6 +23,7 @@ import androidx.appcompat.app.AlertDialog; import com.tooltip.Tooltip; import org.mian.gitnex.R; import org.mian.gitnex.clients.RetrofitClient; +import org.mian.gitnex.helpers.NetworkObserver; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.VersionCheck; import org.mian.gitnex.models.GiteaVersion; @@ -65,7 +66,7 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener super.onCreate(savedInstanceState); TinyDB tinyDb = new TinyDB(getApplicationContext()); - boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); + NetworkObserver networkMonitor = new NetworkObserver(this); loginButton = findViewById(R.id.login_button); instanceUrlET = findViewById(R.id.instance_url); @@ -105,30 +106,39 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener info_button.setOnClickListener(infoListener); - if(!connToInternet) { + loginMethod.setOnCheckedChangeListener((group, checkedId) -> { - Toasty.info(getApplicationContext(), getResources().getString(R.string.checkNetConnection)); - return; + if(checkedId == R.id.loginToken) { - } + loginUidET.setVisibility(View.GONE); + loginPassword.setVisibility(View.GONE); + otpCode.setVisibility(View.GONE); + otpInfo.setVisibility(View.GONE); + loginTokenCode.setVisibility(View.VISIBLE); - loginMethod.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if(checkedId == R.id.loginUsernamePassword){ - loginUidET.setVisibility(View.VISIBLE); - loginPassword.setVisibility(View.VISIBLE); - otpCode.setVisibility(View.VISIBLE); - otpInfo.setVisibility(View.VISIBLE); - loginTokenCode.setVisibility(View.GONE); - } else { - loginUidET.setVisibility(View.GONE); - loginPassword.setVisibility(View.GONE); - otpCode.setVisibility(View.GONE); - otpInfo.setVisibility(View.GONE); - loginTokenCode.setVisibility(View.VISIBLE); - } } + else { + + loginUidET.setVisibility(View.VISIBLE); + loginPassword.setVisibility(View.VISIBLE); + otpCode.setVisibility(View.VISIBLE); + otpInfo.setVisibility(View.VISIBLE); + loginTokenCode.setVisibility(View.GONE); + + } + + }); + + networkMonitor.onInternetStateListener(isAvailable -> { + + if(isAvailable) { + enableProcessButton(); + } + else { + disableProcessButton(); + Toasty.info(getApplicationContext(), getResources().getString(R.string.checkNetConnection)); + } + }); //login_button.setOnClickListener(this); diff --git a/app/src/main/java/org/mian/gitnex/helpers/NetworkObserver.java b/app/src/main/java/org/mian/gitnex/helpers/NetworkObserver.java new file mode 100644 index 00000000..6d557f20 --- /dev/null +++ b/app/src/main/java/org/mian/gitnex/helpers/NetworkObserver.java @@ -0,0 +1,82 @@ +package org.mian.gitnex.helpers; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleObserver; +import androidx.lifecycle.OnLifecycleEvent; + +/** + * Author M M Arif + */ + +public class NetworkObserver implements LifecycleObserver { + + private ConnectivityManager mConnectivityMgr; + private Context mContext; + private NetworkStateReceiver mNetworkStateReceiver; + + public interface ConnectionStateListener { + void onAvailable(boolean isAvailable); + } + + public NetworkObserver(Context context) { + mContext = context; + mConnectivityMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + ((AppCompatActivity) mContext).getLifecycle().addObserver(this); + } + + + public void onInternetStateListener(ConnectionStateListener listener) { + + mNetworkStateReceiver = new NetworkStateReceiver(listener); + IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); + mContext.registerReceiver(mNetworkStateReceiver, intentFilter); + + } + + + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + public void onDestroy() { + + ((AppCompatActivity) mContext).getLifecycle().removeObserver(this); + + if (mNetworkStateReceiver != null) { + mContext.unregisterReceiver(mNetworkStateReceiver); + } + + } + + + public class NetworkStateReceiver extends BroadcastReceiver { + + ConnectionStateListener mListener; + + public NetworkStateReceiver(ConnectionStateListener listener) { + mListener = listener; + } + + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getExtras() != null) { + NetworkInfo activeNetworkInfo = mConnectivityMgr.getActiveNetworkInfo(); + + if (activeNetworkInfo != null && activeNetworkInfo.getState() == NetworkInfo.State.CONNECTED) { + + mListener.onAvailable(true); // connected + + } else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) { + + mListener.onAvailable(false); // disconnected + + } + } + } + } + +} diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 69d2daa1..00ab253e 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -45,20 +45,21 @@ android:background="@drawable/shape_inputs" android:orientation="vertical"> - + + @@ -129,7 +130,8 @@ android:textColorHint="?attr/hintColor" android:textColorHighlight="?attr/hintColor" android:hint="@string/userName" - android:inputType="text" /> + android:inputType="text" + android:visibility="gone" /> + android:inputType="textPassword" + android:visibility="gone" /> + android:inputType="number" + android:visibility="gone" /> + android:visibility="visible" /> + android:gravity="end" + android:visibility="gone" />