package
com.example.gfgapp;
import
android.content.Context;
import
android.net.ConnectivityManager;
import
android.net.Network;
import
android.net.NetworkRequest;
import
android.os.Bundle;
import
android.view.View;
import
android.widget.ProgressBar;
import
android.widget.TextView;
import
android.widget.Toast;
import
androidx.annotation.NonNull;
import
androidx.appcompat.app.AppCompatActivity;
import
com.google.firebase.remoteconfig.FirebaseRemoteConfig;
import
com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings;
public
class
MainActivity
extends
AppCompatActivity {
private
FirebaseRemoteConfig mFirebaseRemoteConfig;
private
TextView longTextView;
private
ProgressBar progressBar;
private
final
boolean
isFetchingEnabled =
true
;
private
boolean
isNetworkAvailable =
false
;
private
final
ConnectivityManager.NetworkCallback networkCallback =
new
ConnectivityManager.NetworkCallback() {
@Override
public
void
onAvailable(
@NonNull
Network network) {
isNetworkAvailable =
true
;
if
(isFetchingEnabled) {
fetchRemoteConfig();
}
}
@Override
public
void
onLost(
@NonNull
Network network) {
isNetworkAvailable =
false
;
}
};
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
longTextView = findViewById(R.id.longTextView);
progressBar = findViewById(R.id.progressBar);
mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings =
new
FirebaseRemoteConfigSettings.Builder()
.setMinimumFetchIntervalInSeconds(
0
)
.build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
mFirebaseRemoteConfig.setDefaultsAsync(R.xml.default_config);
fetchRemoteConfig();
startMonitoringNetworkChanges();
}
@Override
protected
void
onResume() {
super
.onResume();
startMonitoringNetworkChanges();
if
(isNetworkAvailable && isFetchingEnabled) {
fetchRemoteConfig();
}
}
@Override
protected
void
onPause() {
super
.onPause();
stopMonitoringNetworkChanges();
}
private
void
fetchRemoteConfig() {
showProgressBar();
mFirebaseRemoteConfig.fetchAndActivate().addOnCompleteListener(
this
, task -> {
hideProgressBar();
if
(task.isSuccessful()) {
String newTextView = mFirebaseRemoteConfig.getString(
"textViewChange"
);
longTextView.setText(newTextView);
}
else
{
showInternetConnectionError();
}
});
}
private
void
showProgressBar() {
runOnUiThread(() -> progressBar.setVisibility(View.VISIBLE));
}
private
void
hideProgressBar() {
runOnUiThread(() -> progressBar.setVisibility(View.GONE));
}
private
void
startMonitoringNetworkChanges() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest networkRequest =
new
NetworkRequest.Builder().build();
cm.registerNetworkCallback(networkRequest, networkCallback);
}
private
void
stopMonitoringNetworkChanges() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
cm.unregisterNetworkCallback(networkCallback);
}
private
void
showInternetConnectionError() {
Toast.makeText(
this
,
"Please check your internet connection"
, Toast.LENGTH_LONG).show();
}
}