From 6337b677b683a8ea382cce779b2db55636da538b Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 27 Jan 2021 22:34:30 +0300 Subject: remove WebSettingsCompat; seems to only work on google-specific chrome webview --- .../src/main/java/org/fox/epube/MainActivity.java | 10 +- .../java/org/fox/epube/NetworkStateReceiver.java | 234 ++++++++++----------- 2 files changed, 119 insertions(+), 125 deletions(-) (limited to 'org.fox.epube/src') diff --git a/org.fox.epube/src/main/java/org/fox/epube/MainActivity.java b/org.fox.epube/src/main/java/org/fox/epube/MainActivity.java index dfd7086..05c9c92 100644 --- a/org.fox.epube/src/main/java/org/fox/epube/MainActivity.java +++ b/org.fox.epube/src/main/java/org/fox/epube/MainActivity.java @@ -71,14 +71,8 @@ public class MainActivity extends AppCompatActivity implements NetworkStateRecei settings.setAppCachePath(getCacheDir().getAbsolutePath()); settings.setAppCacheEnabled(true); - if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) { - WebSettingsCompat.setForceDark(m_web.getSettings(), - isNightMode() ? WebSettingsCompat.FORCE_DARK_ON : WebSettingsCompat.FORCE_DARK_OFF); - } - - if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK_STRATEGY)) { - WebSettingsCompat.setForceDarkStrategy(m_web.getSettings(), - WebSettingsCompat.DARK_STRATEGY_USER_AGENT_DARKENING_ONLY); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + settings.setForceDark(WebSettings.FORCE_DARK_OFF); } m_loadingBar = findViewById(R.id.loading_progress); diff --git a/org.fox.epube/src/main/java/org/fox/epube/NetworkStateReceiver.java b/org.fox.epube/src/main/java/org/fox/epube/NetworkStateReceiver.java index 4afb7d9..2987525 100644 --- a/org.fox.epube/src/main/java/org/fox/epube/NetworkStateReceiver.java +++ b/org.fox.epube/src/main/java/org/fox/epube/NetworkStateReceiver.java @@ -1,118 +1,118 @@ -package org.fox.epube; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; -import android.util.Log; - -import java.util.ArrayList; -import java.util.List; - -/** - * NetworkStateReceiver defines a BroadcastReceiver which allows us to register for system (i.e. network status) or application events. - * All registered receivers for an event are notified by the Android runtime once this event happens. - * Source: http://stackoverflow.com/questions/6169059/android-event-for-internet-connectivity-state-change - */ -public class NetworkStateReceiver extends BroadcastReceiver { - - protected List listeners; - protected Boolean connected; - private String TAG = "NetworkStateReceiver"; - - public NetworkStateReceiver() { - listeners = new ArrayList<>(); - connected = null; - } - - /** - * Called when the BroadcastReceiver is receiving an Intent broadcast (event for which the broadcast receiver has registered occurs). - * During this time you can use the other methods on BroadcastReceiver to view/modify the current result values. - * NOTE: When it runs on the main thread you should never perform long-running operations in it (there is a timeout of 10 seconds that the system allows before considering the receiver to be blocked and a candidate to be killed). - * NOTE: You cannot launch a popup dialog in your implementation of onReceive(). - * @param context Object to access additional information or to start services or activities - * @param intent Object with action used to register your receiver. This object contains additional information (e.g. extras) - */ - public void onReceive(Context context, Intent intent) { - Log.i(TAG, "Intent broadcast received"); - if(intent == null || intent.getExtras() == null) - return; - - // Retrieve a ConnectivityManager for handling management of network connections - ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - // Details about the currently active default data network. When connected, this network is the default route for outgoing connections - NetworkInfo networkInfo = manager.getActiveNetworkInfo(); - - /** - * NOTE: getActiveNetworkInfo() may return null when there is no default network e.g. Airplane Mode - */ - if(networkInfo != null && networkInfo.getState() == NetworkInfo.State.CONNECTED) { - connected = true; - } else if(intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) { //Boolean that indicates whether there is a complete lack of connectivity - connected = false; - } - - notifyStateToAll(); - } //After the onReceive() of the receiver class has finished, the Android system is allowed to recycle the receiver - - /** - * Notify the state to all needed methods - */ - private void notifyStateToAll() { - Log.i(TAG, "Notifying state to " + listeners.size() + " listener(s)"); - for(NetworkStateReceiverListener eachNetworkStateReceiverListener : listeners) - notifyState(eachNetworkStateReceiverListener); - } - - /** - * Notify the network state, triggering interface functions based on the current state - * @param networkStateReceiverListener Object which implements the NetworkStateReceiverListener interface - */ - private void notifyState(NetworkStateReceiverListener networkStateReceiverListener) { - if(connected == null || networkStateReceiverListener == null) - return; - - if(connected == true) { - // Triggering function on the interface towards network availability - networkStateReceiverListener.networkAvailable(); - } else { - // Triggering function on the interface towards network being unavailable - networkStateReceiverListener.networkUnavailable(); - } - } - - /** - * Adds a listener to the list so that it will receive connection state change updates - * @param networkStateReceiverListener Object which implements the NetworkStateReceiverListener interface - */ - public void addListener(NetworkStateReceiverListener networkStateReceiverListener) { - Log.i(TAG, "addListener() - listeners.add(networkStateReceiverListener) + notifyState(networkStateReceiverListener);"); - listeners.add(networkStateReceiverListener); - notifyState(networkStateReceiverListener); - } - - /** - * Removes listener (when no longer necessary) from the list so that it will no longer receive connection state change updates - * @param networkStateReceiverListener Object which implements the NetworkStateReceiverListener interface - */ - public void removeListener(NetworkStateReceiverListener networkStateReceiverListener) { - listeners.remove(networkStateReceiverListener); - } - - /** - * Inner Interface (i.e. to encapsulate behavior in a generic and re-usable way) which handles connection state changes for classes which registered this receiver (Outer class NetworkStateReceiver) - * This interface implements the 'Strategy Pattern', where an execution strategy is evaluated and applied internally at runtime - */ - public interface NetworkStateReceiverListener { - /** - * When the connection state is changed and there is a connection, this method is called - */ - void networkAvailable(); - - /** - * Connection state is changed and there is not a connection, this method is called - */ - void networkUnavailable(); - } +package org.fox.epube; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.util.Log; + +import java.util.ArrayList; +import java.util.List; + +/** + * NetworkStateReceiver defines a BroadcastReceiver which allows us to register for system (i.e. network status) or application events. + * All registered receivers for an event are notified by the Android runtime once this event happens. + * Source: http://stackoverflow.com/questions/6169059/android-event-for-internet-connectivity-state-change + */ +public class NetworkStateReceiver extends BroadcastReceiver { + + protected List listeners; + protected Boolean connected; + private String TAG = "NetworkStateReceiver"; + + public NetworkStateReceiver() { + listeners = new ArrayList<>(); + connected = null; + } + + /** + * Called when the BroadcastReceiver is receiving an Intent broadcast (event for which the broadcast receiver has registered occurs). + * During this time you can use the other methods on BroadcastReceiver to view/modify the current result values. + * NOTE: When it runs on the main thread you should never perform long-running operations in it (there is a timeout of 10 seconds that the system allows before considering the receiver to be blocked and a candidate to be killed). + * NOTE: You cannot launch a popup dialog in your implementation of onReceive(). + * @param context Object to access additional information or to start services or activities + * @param intent Object with action used to register your receiver. This object contains additional information (e.g. extras) + */ + public void onReceive(Context context, Intent intent) { + Log.i(TAG, "Intent broadcast received"); + if(intent == null || intent.getExtras() == null) + return; + + // Retrieve a ConnectivityManager for handling management of network connections + ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + // Details about the currently active default data network. When connected, this network is the default route for outgoing connections + NetworkInfo networkInfo = manager.getActiveNetworkInfo(); + + /** + * NOTE: getActiveNetworkInfo() may return null when there is no default network e.g. Airplane Mode + */ + if(networkInfo != null && networkInfo.getState() == NetworkInfo.State.CONNECTED) { + connected = true; + } else if(intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) { //Boolean that indicates whether there is a complete lack of connectivity + connected = false; + } + + notifyStateToAll(); + } //After the onReceive() of the receiver class has finished, the Android system is allowed to recycle the receiver + + /** + * Notify the state to all needed methods + */ + private void notifyStateToAll() { + Log.i(TAG, "Notifying state to " + listeners.size() + " listener(s)"); + for(NetworkStateReceiverListener eachNetworkStateReceiverListener : listeners) + notifyState(eachNetworkStateReceiverListener); + } + + /** + * Notify the network state, triggering interface functions based on the current state + * @param networkStateReceiverListener Object which implements the NetworkStateReceiverListener interface + */ + private void notifyState(NetworkStateReceiverListener networkStateReceiverListener) { + if(connected == null || networkStateReceiverListener == null) + return; + + if(connected == true) { + // Triggering function on the interface towards network availability + networkStateReceiverListener.networkAvailable(); + } else { + // Triggering function on the interface towards network being unavailable + networkStateReceiverListener.networkUnavailable(); + } + } + + /** + * Adds a listener to the list so that it will receive connection state change updates + * @param networkStateReceiverListener Object which implements the NetworkStateReceiverListener interface + */ + public void addListener(NetworkStateReceiverListener networkStateReceiverListener) { + Log.i(TAG, "addListener() - listeners.add(networkStateReceiverListener) + notifyState(networkStateReceiverListener);"); + listeners.add(networkStateReceiverListener); + notifyState(networkStateReceiverListener); + } + + /** + * Removes listener (when no longer necessary) from the list so that it will no longer receive connection state change updates + * @param networkStateReceiverListener Object which implements the NetworkStateReceiverListener interface + */ + public void removeListener(NetworkStateReceiverListener networkStateReceiverListener) { + listeners.remove(networkStateReceiverListener); + } + + /** + * Inner Interface (i.e. to encapsulate behavior in a generic and re-usable way) which handles connection state changes for classes which registered this receiver (Outer class NetworkStateReceiver) + * This interface implements the 'Strategy Pattern', where an execution strategy is evaluated and applied internally at runtime + */ + public interface NetworkStateReceiverListener { + /** + * When the connection state is changed and there is a connection, this method is called + */ + void networkAvailable(); + + /** + * Connection state is changed and there is not a connection, this method is called + */ + void networkUnavailable(); + } } \ No newline at end of file -- cgit v1.2.3