├── app
├── .gitignore
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── alkathirikhalid
│ │ └── connection
│ │ ├── call
│ │ ├── Method.java
│ │ ├── Task.java
│ │ ├── ContentType.java
│ │ ├── BackgroundTask.java
│ │ ├── GlobalProperty.java
│ │ ├── Util.java
│ │ └── Call.java
│ │ └── network
│ │ ├── ConnectionChangeListener.java
│ │ ├── ConnectionActivity.java
│ │ ├── ConnectionAppCompactActivity.java
│ │ ├── ConnectionChange.java
│ │ └── Connection.java
└── build.gradle
├── jitpack.yml
├── settings.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── gradle.properties
├── gradlew.bat
├── gradlew
├── LICENSE
└── README.md
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/jitpack.yml:
--------------------------------------------------------------------------------
1 | jdk:
2 | - openjdk11
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'connection'
2 | include ':app'
3 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alkathirikhalid/connection/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Nov 19 21:22:46 MYT 2021
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
Background task, thread provider
23 | * 24 | * @author alkathirikhalid 25 | * @version 2.1.0 26 | */ 27 | abstract class BackgroundTask extends Thread { 28 | private final Task task; 29 | 30 | /** 31 | * @param task the task call back 32 | */ 33 | protected BackgroundTask(@NonNull Task task) { 34 | this.task = task; 35 | } 36 | 37 | /** 38 | * @return the unique task identifier 39 | */ 40 | protected abstract int getTaskId(); 41 | 42 | /** 43 | * @param httpCode the http response code 44 | * @param result the result from server an Object type of String (Server) or Exception (Local) 45 | */ 46 | protected void executed(int httpCode, @Nullable Object result) { 47 | this.task.onTaskCompleted(this.getTaskId(), httpCode, result); 48 | } 49 | } -------------------------------------------------------------------------------- /app/src/main/java/com/alkathirikhalid/connection/call/GlobalProperty.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Al-Kathiri Khalid www.alkathirikhalid.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.alkathirikhalid.connection.call; 17 | 18 | /** 19 | *Allow to add more properties to the call
20 | * Supported Call Key / Value Property, user can add properties 21 | * such as security / date / authentication e.t.c 22 | * 23 | * @author alkathirikhalid 24 | * @version 2.1.0 25 | */ 26 | public class GlobalProperty { 27 | private final String propertyName; 28 | private final String propertyValue; 29 | 30 | /** 31 | * Constructor 32 | * 33 | * @param propertyName the property name 34 | * @param propertyValue the property value 35 | */ 36 | public GlobalProperty(String propertyName, String propertyValue) { 37 | this.propertyName = propertyName; 38 | this.propertyValue = propertyValue; 39 | } 40 | 41 | /** 42 | * @return the property name 43 | */ 44 | protected String getPropertyName() { 45 | return propertyName; 46 | } 47 | 48 | /** 49 | * @return the property value 50 | */ 51 | protected String getGetPropertyValue() { 52 | return propertyValue; 53 | } 54 | } -------------------------------------------------------------------------------- /app/src/main/java/com/alkathirikhalid/connection/network/ConnectionChangeListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Al-Kathiri Khalid www.alkathirikhalid.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.alkathirikhalid.connection.network; 17 | 18 | /** 19 | *Connection Change Call Back.
20 | * AnInterface that provides a Call Back to notify
21 | * when Connection has Changed.
22 | *
23 | * @author alkathirikhalid
24 | * @version 2.1.0
25 | */
26 |
27 | interface ConnectionChangeListener {
28 |
29 | /**
30 | * Notify there is connectivity or is in the process of being established.
31 | */ 32 | void connectedOrConnecting(); 33 | 34 | /** 35 | *Notify there is connectivity and it is possible for an internet connection.
36 | */ 37 | void connected(); 38 | 39 | /** 40 | *Notify there is connectivity to WIFI.
41 | */ 42 | void typeWifi(); 43 | 44 | /** 45 | *Notify there is connectivity to MOBILE.
46 | */ 47 | void typeMobile(); 48 | 49 | /** 50 | *Notify there is connectivity to MOBILE data speed of about 400kbps and above.
51 | */ 52 | void connectedConnectionFast(); 53 | 54 | /** 55 | *Notify there is connectivity to MOBILE data speed of about 14kbps to 100kbps.
56 | */ 57 | void connectedConnectionSlow(); 58 | 59 | /** 60 | *Notify there is no connectivity.
61 | */ 62 | void noNetwork(); 63 | } 64 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /app/src/main/java/com/alkathirikhalid/connection/call/Util.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Al-Kathiri Khalid www.alkathirikhalid.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.alkathirikhalid.connection.call; 17 | 18 | import static com.alkathirikhalid.connection.call.ContentType.ACCEPT; 19 | import static com.alkathirikhalid.connection.call.ContentType.CONTENT_TYPE; 20 | 21 | import java.net.HttpURLConnection; 22 | import java.net.ProtocolException; 23 | 24 | /** 25 | * A Call Util Class 26 | * 27 | * @author alkathirikhalid 28 | * @version 2.1.0 29 | */ 30 | public class Util { 31 | /** 32 | * Adds single or multiple properties to the call 33 | * 34 | * @param connection the connection instance 35 | * @param method the connection http method POST, GET, PUT, DELETE 36 | * @param contentTypeRequest the request content type 37 | * @param contentTypeResponse the response content type 38 | * @return the finalized connection with the added properties 39 | * @throws ProtocolException protocol exception such as TCP error 40 | */ 41 | protected static HttpURLConnection setDefaultMethodAndProperties(HttpURLConnection connection, Method method, ContentType contentTypeRequest, ContentType contentTypeResponse) throws ProtocolException { 42 | connection.setRequestMethod(method.name()); 43 | connection.setRequestProperty(CONTENT_TYPE, contentTypeRequest.toString()); 44 | connection.setRequestProperty(ACCEPT, contentTypeResponse.toString()); 45 | return connection; 46 | } 47 | 48 | /** 49 | * @param method the method to be checked 50 | * @return true for POST and PUT only 51 | */ 52 | protected static boolean isSetDoOutput(Method method) { 53 | return (method.equals(Method.POST) || method.equals(Method.PUT)); 54 | } 55 | 56 | /** 57 | * Check response from server as being success 58 | * 59 | * @param responseCode the receive http response from server 60 | * @return true for 200 range response exclusive 200, 201 and 204 61 | */ 62 | public static boolean isSuccessResponse(int responseCode) { 63 | return (responseCode == 200 || responseCode == 201 || responseCode == 204); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /app/src/main/java/com/alkathirikhalid/connection/network/ConnectionActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Al-Kathiri Khalid www.alkathirikhalid.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.alkathirikhalid.connection.network; 17 | 18 | import android.app.Activity; 19 | import android.content.IntentFilter; 20 | import android.net.ConnectivityManager; 21 | import android.os.Bundle; 22 | 23 | /** 24 | *Enhanced Base class with Real Time Connection Changes.
25 | * For activities without the 26 | * support library 27 | * action bar features. 28 | * 29 | * @author alkathirikhalid 30 | * @version 2.1.0 31 | */ 32 | 33 | public abstract class ConnectionActivity extends Activity implements ConnectionChangeListener { 34 | 35 | /** 36 | *Connection Change Broadcast Receiver.
37 | */ 38 | private ConnectionChange connectionChange; 39 | 40 | /** 41 | *Structured description of Intent values to be matched.
42 | */ 43 | private IntentFilter intentFilter; 44 | 45 | @Override 46 | protected void onCreate(Bundle savedInstanceState) { 47 | super.onCreate(savedInstanceState); 48 | 49 | // Creates new IntentFilter that matches a change in network connectivity 50 | intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 51 | 52 | // Creates new Connection Change Broadcast Receiver 53 | connectionChange = new ConnectionChange(); 54 | } 55 | 56 | @Override 57 | protected void onResume() { 58 | super.onResume(); 59 | 60 | // Register for Connection Change that matches a change in network connectivity 61 | this.registerReceiver(connectionChange, intentFilter); 62 | 63 | // Registers the connection change call back 64 | connectionChange.setConnectionChangeListener(this); 65 | } 66 | 67 | @Override 68 | protected void onPause() { 69 | super.onPause(); 70 | 71 | // Unregister the Connection Change Broadcast Receiver 72 | unregisterReceiver(connectionChange); 73 | 74 | // Unregisters the connectivity change call back 75 | connectionChange.setConnectionChangeListener(null); 76 | } 77 | 78 | // Implemented methods 79 | 80 | @Override 81 | public void connectedOrConnecting() { 82 | // To be implemented if / when needed on host app 83 | } 84 | 85 | @Override 86 | public void connected() { 87 | // To be implemented if / when needed on host app 88 | } 89 | 90 | @Override 91 | public void typeWifi() { 92 | // To be implemented if / when needed on host app 93 | } 94 | 95 | @Override 96 | public void typeMobile() { 97 | // To be implemented if / when needed on host app 98 | } 99 | 100 | @Override 101 | public void connectedConnectionFast() { 102 | // To be implemented if / when needed on host app 103 | } 104 | 105 | @Override 106 | public void connectedConnectionSlow() { 107 | // To be implemented if / when needed on host app 108 | } 109 | 110 | @Override 111 | public void noNetwork() { 112 | // To be implemented if / when needed on host app 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /app/src/main/java/com/alkathirikhalid/connection/network/ConnectionAppCompactActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Al-Kathiri Khalid www.alkathirikhalid.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.alkathirikhalid.connection.network; 17 | 18 | import android.content.IntentFilter; 19 | import android.net.ConnectivityManager; 20 | import android.os.Bundle; 21 | 22 | import androidx.appcompat.app.AppCompatActivity; 23 | 24 | /** 25 | *Enhanced Base class with Real Time Connection Changes.
26 | * For activities that use the 27 | * support library 28 | * action bar features. 29 | * 30 | * @author alkathirikhalid 31 | * @version 2.1.0 32 | */ 33 | 34 | public abstract class ConnectionAppCompactActivity extends AppCompatActivity implements ConnectionChangeListener { 35 | 36 | /** 37 | *Connection Change Broadcast Receiver.
38 | */ 39 | private ConnectionChange connectionChange; 40 | 41 | /** 42 | *Structured description of Intent values to be matched.
43 | */ 44 | private IntentFilter intentFilter; 45 | 46 | @Override 47 | protected void onCreate(Bundle savedInstanceState) { 48 | super.onCreate(savedInstanceState); 49 | 50 | // Creates new IntentFilter that matches a change in network connectivity 51 | intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 52 | 53 | // Creates new Connection Change Broadcast Receiver 54 | connectionChange = new ConnectionChange(); 55 | } 56 | 57 | @Override 58 | protected void onResume() { 59 | super.onResume(); 60 | 61 | // Register for Connection Change that matches a change in network connectivity 62 | this.registerReceiver(connectionChange, intentFilter); 63 | 64 | // Registers the connection change call back 65 | connectionChange.setConnectionChangeListener(this); 66 | } 67 | 68 | @Override 69 | protected void onPause() { 70 | super.onPause(); 71 | 72 | // Unregister the Connection Change Broadcast Receiver 73 | unregisterReceiver(connectionChange); 74 | 75 | // Unregisters the connectivity change call back 76 | connectionChange.setConnectionChangeListener(null); 77 | } 78 | 79 | // Implemented methods 80 | 81 | @Override 82 | public void connectedOrConnecting() { 83 | // To be implemented if / when needed on host app 84 | } 85 | 86 | @Override 87 | public void connected() { 88 | // To be implemented if / when needed on host app 89 | } 90 | 91 | @Override 92 | public void typeWifi() { 93 | // To be implemented if / when needed on host app 94 | } 95 | 96 | @Override 97 | public void typeMobile() { 98 | // To be implemented if / when needed on host app 99 | } 100 | 101 | @Override 102 | public void connectedConnectionFast() { 103 | // To be implemented if / when needed on host app 104 | } 105 | 106 | @Override 107 | public void connectedConnectionSlow() { 108 | // To be implemented if / when needed on host app 109 | } 110 | 111 | @Override 112 | public void noNetwork() { 113 | // To be implemented if / when needed on host app 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # Attempt to set APP_HOME 46 | # Resolve links: $0 may be a link 47 | PRG="$0" 48 | # Need this for relative symlinks. 49 | while [ -h "$PRG" ] ; do 50 | ls=`ls -ld "$PRG"` 51 | link=`expr "$ls" : '.*-> \(.*\)$'` 52 | if expr "$link" : '/.*' > /dev/null; then 53 | PRG="$link" 54 | else 55 | PRG=`dirname "$PRG"`"/$link" 56 | fi 57 | done 58 | SAVED="`pwd`" 59 | cd "`dirname \"$PRG\"`/" >/dev/null 60 | APP_HOME="`pwd -P`" 61 | cd "$SAVED" >/dev/null 62 | 63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 64 | 65 | # Determine the Java command to use to start the JVM. 66 | if [ -n "$JAVA_HOME" ] ; then 67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 68 | # IBM's JDK on AIX uses strange locations for the executables 69 | JAVACMD="$JAVA_HOME/jre/sh/java" 70 | else 71 | JAVACMD="$JAVA_HOME/bin/java" 72 | fi 73 | if [ ! -x "$JAVACMD" ] ; then 74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 75 | 76 | Please set the JAVA_HOME variable in your environment to match the 77 | location of your Java installation." 78 | fi 79 | else 80 | JAVACMD="java" 81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 82 | 83 | Please set the JAVA_HOME variable in your environment to match the 84 | location of your Java installation." 85 | fi 86 | 87 | # Increase the maximum file descriptors if we can. 88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 89 | MAX_FD_LIMIT=`ulimit -H -n` 90 | if [ $? -eq 0 ] ; then 91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 92 | MAX_FD="$MAX_FD_LIMIT" 93 | fi 94 | ulimit -n $MAX_FD 95 | if [ $? -ne 0 ] ; then 96 | warn "Could not set maximum file descriptor limit: $MAX_FD" 97 | fi 98 | else 99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 100 | fi 101 | fi 102 | 103 | # For Darwin, add options to specify how the application appears in the dock 104 | if $darwin; then 105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 106 | fi 107 | 108 | # For Cygwin, switch paths to Windows format before running java 109 | if $cygwin ; then 110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 112 | JAVACMD=`cygpath --unix "$JAVACMD"` 113 | 114 | # We build the pattern for arguments to be converted via cygpath 115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 116 | SEP="" 117 | for dir in $ROOTDIRSRAW ; do 118 | ROOTDIRS="$ROOTDIRS$SEP$dir" 119 | SEP="|" 120 | done 121 | OURCYGPATTERN="(^($ROOTDIRS))" 122 | # Add a user-defined pattern to the cygpath arguments 123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 125 | fi 126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 127 | i=0 128 | for arg in "$@" ; do 129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 131 | 132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 134 | else 135 | eval `echo args$i`="\"$arg\"" 136 | fi 137 | i=$((i+1)) 138 | done 139 | case $i in 140 | (0) set -- ;; 141 | (1) set -- "$args0" ;; 142 | (2) set -- "$args0" "$args1" ;; 143 | (3) set -- "$args0" "$args1" "$args2" ;; 144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 150 | esac 151 | fi 152 | 153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 154 | function splitJvmOpts() { 155 | JVM_OPTS=("$@") 156 | } 157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 159 | 160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 161 | -------------------------------------------------------------------------------- /app/src/main/java/com/alkathirikhalid/connection/network/ConnectionChange.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Al-Kathiri Khalid www.alkathirikhalid.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.alkathirikhalid.connection.network; 17 | 18 | import android.content.BroadcastReceiver; 19 | import android.content.Context; 20 | import android.content.Intent; 21 | 22 | /** 23 | *Connection Change Broadcast Receiver.
24 | * A subclass ofBroadcastReceiver that will receive intents sent by sendBroadcast().
25 | *
26 | * @author alkathirikhalid
27 | * @version 2.1.0
28 | */
29 |
30 | class ConnectionChange extends BroadcastReceiver {
31 |
32 | /**
33 | * An Interface that provides a Call Back Mechanism to notify 34 | * when Connection has Changed.
35 | */ 36 | private ConnectionChangeListener connectionChangeListener; 37 | 38 | /** 39 | *Constructor adhering to Observer Pattern.
40 | * To be used afterConnectionChange().
41 | *
42 | * @param connectionChangeListener The Connection Change Call Back.
43 | * @return The Initialized linked Connection Change Call Back.
44 | */
45 | ConnectionChange setConnectionChangeListener(ConnectionChangeListener connectionChangeListener) {
46 | this.connectionChangeListener = connectionChangeListener;
47 | return this;
48 | }
49 |
50 | /**
51 | * This method is called when the BroadcastReceiver is receiving an Intent
52 | * broadcast. During this time you can use the other methods on
53 | * BroadcastReceiver to view/modify the current result values. This method
54 | * is always called within the main thread of its process, unless you
55 | * explicitly asked for it to be scheduled on a different thread using
56 | * {link Context#registerReceiver(BroadcastReceiver, * IntentFilter, String, Handler)}.
57 | * When it runs on the main thread you should
58 | * never perform long-running operations in it (there is a timeout of
59 | * 10 seconds that the system allows before considering the receiver to
60 | * be blocked and a candidate to be killed). You cannot launch a popup dialog
61 | * in your implementation of onReceive().
62 | * 63 | *
If this BroadcastReceiver was launched through a <receiver> tag, 64 | * then the object is no longer alive after returning from this 65 | * function. This means you should not perform any operations that 66 | * return a result to you asynchronously -- in particular, for interacting 67 | * with services, you should use 68 | * {@link Context#startService(Intent)} instead of 69 | * {link Context#bindService(Intent, ServiceConnection, int)}. If you wish 70 | * to interact with a service that is already running, you can use 71 | * {@link #peekService}. 72 | *
73 | *
The Intent filters used in {@link Context#registerReceiver} 74 | * and in application manifests are not guaranteed to be exclusive. They 75 | * are hints to the operating system about how to find suitable recipients. It is 76 | * possible for senders to force delivery to specific recipients, bypassing filter 77 | * resolution. For this reason, {@link #onReceive(Context, Intent) onReceive()} 78 | * implementations should respond only to known actions, ignoring any unexpected 79 | * Intents that they may receive. 80 | * 81 | * @param context The Context in which the receiver is running. 82 | * @param intent The Intent being received. 83 | */ 84 | @Override 85 | public void onReceive(Context context, Intent intent) { 86 | 87 | // Checks if there are linked listeners before invoking change 88 | if (connectionChangeListener != null) { 89 | // Fall through all states, to allow multiple call back of the received Network Info 90 | 91 | // Checks if there is connectivity or is in the process of being established 92 | if (Connection.isConnectedOrConnecting(context)) { 93 | // Notifies there is connectivity or is in the process of being established 94 | connectionChangeListener.connectedOrConnecting(); 95 | } 96 | // Checks if there is connectivity and it is possible to pass data 97 | if (Connection.isConnected(context)) { 98 | // Notifies there is connectivity and it is possible to pass data 99 | connectionChangeListener.connected(); 100 | } 101 | // Checks if there is connectivity to WIFI 102 | if (Connection.isTypeWifi(context)) { 103 | // Notifies there is connectivity to WIFI 104 | connectionChangeListener.typeWifi(); 105 | } 106 | // Checks if there is connectivity to MOBILE 107 | if (Connection.isTypeMobile(context)) { 108 | // Notifies there is connectivity to MOBILE 109 | connectionChangeListener.typeMobile(); 110 | } 111 | // Checks if there is connectivity to MOBILE data speed of about 400kbps to 23Mbps 112 | if (Connection.isConnectedConnectionFast(context)) { 113 | // Notifies there is connectivity to MOBILE data speed of about 400kbps to 23Mbps 114 | connectionChangeListener.connectedConnectionFast(); 115 | } 116 | // Checks if there is connectivity to MOBILE data speed of about 14kbps to 100kbps 117 | if (Connection.isConnectedConnectionSlow(context)) { 118 | // Notifies there is connectivity to MOBILE data speed of about 14kbps to 100kbps 119 | connectionChangeListener.connectedConnectionSlow(); 120 | } 121 | // Checks there is no connectivity 122 | if (!Connection.isConnectedOrConnecting(context)) { 123 | // Notifies there is no connectivity 124 | connectionChangeListener.noNetwork(); 125 | } 126 | } 127 | } 128 | } -------------------------------------------------------------------------------- /app/src/main/java/com/alkathirikhalid/connection/call/Call.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Al-Kathiri Khalid www.alkathirikhalid.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.alkathirikhalid.connection.call; 17 | 18 | import static com.alkathirikhalid.connection.call.Util.isSetDoOutput; 19 | import static com.alkathirikhalid.connection.call.Util.isSuccessResponse; 20 | import static com.alkathirikhalid.connection.call.Util.setDefaultMethodAndProperties; 21 | 22 | import java.io.BufferedReader; 23 | import java.io.InputStream; 24 | import java.io.InputStreamReader; 25 | import java.net.HttpURLConnection; 26 | import java.net.URL; 27 | import java.util.ArrayList; 28 | import java.util.List; 29 | 30 | /** 31 | *
Call
32 | * Make synchronous (none blocking) http call / connection with a single line 33 | * 34 | * @author alkathirikhalid 35 | * @version 2.1.0 36 | */ 37 | public abstract class Call { 38 | 39 | // Global extra request properties such as security / date / authentication e.t.c for all calls 40 | private static final ListConnection.
25 | *
26 | * Monitor network connections like Wi-Fi, GPRS, UMTS, etc for API 16 and above,
27 | * this class attempt to fail over to another network when connectivity to a network is lost
28 | * by checking isConnectedOrConnecting, it provides a way that allows applications to
29 | * query the coarse-grained or fine-grained state of the available networks by checking
30 | * isTypeMobile or isTypeWifi. It also provides a way that allows
31 | * applications to request and check networks for their fast data traffic by checking
32 | * isConnectedConnectionFast or isConnectedConnectionSlow.
34 | * It is safer to check Serves the Checks if there is connectivity or is in the process of being established.
58 | * This is applicable for applications that need to do any less intensive or slow
59 | * network related activities. Checks if there is connectivity and it is possible to pass data.
72 | * This is applicable for applications that need to do any intensive network related activities
73 | * like data transactions such as read or write data, Checks if there is connectivity to WIFI, when active, all data traffic will use this network.
86 | * Checks if there is connectivity to MOBILE data, when active, all data traffic will use
100 | * this network. Checks if there is connectivity to MOBILE data speed of about 400kbps to 23Mbps.
114 | * Checks if there is connectivity to MOBILE data speed of about 14kbps to 100kbps.
129 | * Serves Serves Android light weight library made up of two features Call and Network. Connection can be used in any Android project either using build script or adding aar file, no need to declare any thing else as all the permissions will be merged, it is simply a plug and play library! - Network : Monitors connections like Wi-Fi, GPRS, UMTS, e.t.c. Device network usually attempts to fail over to another network connection when connectivity to a given network is lost, Network feature simply allows checking such as
7 |
8 | - Call : Makes asynchronous / non blocking http request with easy in a single line. To make a call simply do 2 things out of the box Call has a total of 5 methods where only 1 is need to make the call - - - - - Supported metheds are Supported content types are It is safer to check All accessible and usable methods automatically calls Network has a total of 6 methods. - - - - - - To have connectivity updates in real time simply either replace:- - - And Override any of the provided 7 methods, which gives real time updates of all 6 mothods explained in Network Accesible and usable Methods including the 7th being The minimun Android API 16. Thats it! The library will handle the system broadcast and permissions automatically, simply add the library via aar file or as a dependency declaration and use it out of the box without further settings, Eloquent Connection has already declared for internet and network state.isConnectedConnectionSlow first or only rather than
35 | * isConnectedConnectionFast first or combined, to allow forward compatibility in the
36 | * event faster mobile connection are introduce in the future that are above 20 plus Mbps.
37 | *
38 | * @author alkathirikhalid
39 | * @version 2.1.0
40 | */
41 | public abstract class Connection {
42 |
43 | /**
44 | * Connection public methods with a way to get an instance of the
45 | * current network Connection.true if there is connectivity or is in the process of being established,
63 | * false otherwise.
64 | */
65 | public static boolean isConnectedOrConnecting(Context context) {
66 | NetworkInfo networkInfo = Connection.getActiveNetworkInfo(context);
67 | return (networkInfo != null && networkInfo.isConnectedOrConnecting());
68 | }
69 |
70 | /**
71 | * isConnected guarantees that
74 | * the network is fully usable unlike isConnectedOrConnecting which dose not.true if connectivity exists, false otherwise.
78 | */
79 | public static boolean isConnected(Context context) {
80 | NetworkInfo networkInfo = Connection.getActiveNetworkInfo(context);
81 | return (networkInfo != null && networkInfo.isConnected());
82 | }
83 |
84 | /**
85 | * isTypeWifi automatically calls isConnected() to guarantees that
87 | * connectivity exists.true if WIFI, false otherwise.
91 | */
92 | public static boolean isTypeWifi(Context context) {
93 | NetworkInfo networkInfo = Connection.getActiveNetworkInfo(context);
94 | return (networkInfo != null && networkInfo.isConnected() && networkInfo.getType() ==
95 | ConnectivityManager.TYPE_WIFI);
96 | }
97 |
98 | /**
99 | * isTypeMobile automatically calls isConnected()
101 | * to guarantees that connectivity exists.true if MOBILE data, false otherwise.
105 | */
106 | public static boolean isTypeMobile(Context context) {
107 | NetworkInfo networkInfo = Connection.getActiveNetworkInfo(context);
108 | return (networkInfo != null && networkInfo.isConnected() && networkInfo.getType() ==
109 | ConnectivityManager.TYPE_MOBILE);
110 | }
111 |
112 | /**
113 | * isConnectedConnectionFast automatically calls isConnected()
115 | * to guarantees that connectivity exists.true if MOBILE data, sub type EVDO0, EVDOA, EVDOB, UMTS, EHRPD, HSDPA,
119 | * HSPA, HSUPA, HSPAP or LTE false otherwise.
120 | */
121 | public static boolean isConnectedConnectionFast(Context context) {
122 | NetworkInfo networkInfo = Connection.getActiveNetworkInfo(context);
123 | return (networkInfo != null && networkInfo.isConnected() && Connection.isConnectionFast
124 | (networkInfo.getType(), networkInfo.getSubtype()));
125 | }
126 |
127 | /**
128 | * isConnectedConnectionSlow automatically calls isConnected()
130 | * to guarantees that connectivity exists.true if MOBILE data, sub type CDMA, 1xRTT, EDGE, GPRS or IDEN
134 | * false otherwise.
135 | */
136 | public static boolean isConnectedConnectionSlow(Context context) {
137 | NetworkInfo networkInfo = Connection.getActiveNetworkInfo(context);
138 | return (networkInfo != null && networkInfo.isConnected() && Connection.isConnectionSlow
139 | (networkInfo.getType(), networkInfo.getSubtype()));
140 | }
141 |
142 | /**
143 | * isConnectedConnectionFast public methods with a way to detect the
144 | * current sub type connection of MOBILE type.true if WIFI or if MOBILE data speed of about 400kbps to 23Mbps
149 | * false otherwise.
150 | */
151 | private static boolean isConnectionFast(int type, int subType) {
152 | if (type == ConnectivityManager.TYPE_WIFI) {
153 | return true;
154 | } else if (type == ConnectivityManager.TYPE_MOBILE) {
155 | switch (subType) {
156 | // Speeds of about ~ 400 to 1000 kbps
157 | case TelephonyManager.NETWORK_TYPE_EVDO_0: // 3G
158 | // Speeds of about ~ 600 to 1400 kbps.
159 | case TelephonyManager.NETWORK_TYPE_EVDO_A: // 3G
160 | // Speeds of about ~ 2 to 14 Mbps.
161 | case TelephonyManager.NETWORK_TYPE_HSDPA: // 3G
162 | // Speeds of about ~ 700 to 1700 kbps
163 | case TelephonyManager.NETWORK_TYPE_HSPA: // 3G
164 | // Speeds of about ~ 1 to 23 Mbps
165 | case TelephonyManager.NETWORK_TYPE_HSUPA: // 3G
166 | // Speeds of about ~ 400 to 7000 kbps
167 | case TelephonyManager.NETWORK_TYPE_UMTS: // 3G
168 | // Speeds of about ~ 1 to 2 Mbps
169 | case TelephonyManager.NETWORK_TYPE_EHRPD: // 3G
170 | // Speeds of about ~ 5 Mbps
171 | case TelephonyManager.NETWORK_TYPE_EVDO_B: // 3G
172 | // Speeds of about ~ 10 to 20 Mbps
173 | case TelephonyManager.NETWORK_TYPE_HSPAP: // 3G
174 | // Speeds of about ~ 10+ Mbps
175 | case TelephonyManager.NETWORK_TYPE_LTE: // 4G
176 | case TelephonyManager.NETWORK_TYPE_IWLAN: // 4G
177 | case TelephonyManager.NETWORK_TYPE_NR: // 5G
178 | return true;
179 | // Otherwise
180 | case TelephonyManager.NETWORK_TYPE_UNKNOWN:
181 | default:
182 | return false;
183 | }
184 | } else {
185 | return false;
186 | }
187 | }
188 |
189 | /**
190 | * isConnectedConnectionSlow public methods with a way to detect the
191 | * current sub type connection of MOBILE type.true if MOBILE data speed of about 14kbps to 100kbps
196 | * false otherwise.
197 | */
198 | private static boolean isConnectionSlow(int type, int subType) {
199 | if (type == ConnectivityManager.TYPE_WIFI) {
200 | return false;
201 | } else if (type == ConnectivityManager.TYPE_MOBILE) {
202 | switch (subType) {
203 | // Speeds of about ~ 50 to 100 kbps
204 | case TelephonyManager.NETWORK_TYPE_1xRTT: // 2G
205 | // Speeds of about ~ 14 to 64 kbps
206 | case TelephonyManager.NETWORK_TYPE_CDMA: // 2G
207 | // Speeds of about ~ 50 to 100 kbps
208 | case TelephonyManager.NETWORK_TYPE_EDGE: // 2G
209 | // Speeds of about ~ 100 kbps
210 | case TelephonyManager.NETWORK_TYPE_GPRS: // 2G
211 | // Speeds of about ~ 25 kbps
212 | case TelephonyManager.NETWORK_TYPE_IDEN: // 2G
213 | return true;
214 | // Otherwise
215 | case TelephonyManager.NETWORK_TYPE_UNKNOWN:
216 | default:
217 | return false;
218 | }
219 | } else {
220 | return false;
221 | }
222 | }
223 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://jitpack.io/#alkathirikhalid/connection)
2 |
3 | # Eloquent Connection
4 | isConnectedOrConnecting to get the device network state. It also provides a way that allows apps to query the coarse-grained or fine-grained state of the available networks by checking isTypeMobile or isTypeWifi. It also allows apps to request and check networks for their fast data traffic by checking isConnectedConnectionFast or isConnectedConnectionSlow.Call.execute(taskId,task,method,url,contentTypeRequest,contentTypeResponse,requestBody), and make your Class / Activity / Fragment / Model / Repositry whatever architecture you have implements Task where onTaskCompleted(int task, int httpCode, Object result) returns the response, thats it, 2 steps. It is also possible to make synchronous / blocking http request by simply cascaded the calls on Task completed for the consecutive calls.implements Task in a class that is expected to receive http responses on task completed such as an Activity / Fragment / Model / Repositry whatever architecture you have, pass a unique task ID in the range of 1000 or as you so choose and pass the instance of the class that implemented the Task interface example call/s in one class for simple demoCall.setTimeOut(5000) Not required, time in milliseconds, default 3000 / 30 seconds.Call.addGlobalProperty(globalProperty) Not required, extra properties such as security / date / authentication / authorization.Call.removeGlobalProperty(globalProperty) Not required, only to remove extra propert if needed.Call.execute(taskId,task,method,url,contentTypeRequest,contentTypeResponse,requestBody) Required to make the call.Call.cancelTask(taskId) not required, only if needed for any reason such as leaving screen.POST, GET, PUT and DELETE.application/json, multipart/form-data and application/x-www-form-urlencodedisConnectedConnectionSlow first or only rather than isConnectedConnectionFast first or combined, to allow forward compatibility in the event faster mobile connection are introduce in the future that are above 20 plus Mbps.isConnected() to guarantees that connectivity exists except for isConnectedOrConnecting depending on your application needs.Connection.isConnectedConnectionSlow(context);
85 |
86 | ### Network Accesible and usable Methods
87 | isConnectedOrConnecting() Checks if there is connectivity or is in the process of being established. This is applicable for applications that need to do any less intensive or slow network related activities.isConnected() Checks if there is connectivity and it is possible to pass data. This is applicable for applications that need to do any intensive network related activities like data transactions such as read or write data, guarantees that the network is fully usable.isTypeWifi() Checks if there is connectivity to WIFI, when active, all data traffic will use this network.isTypeMobile() Checks if there is connectivity to MOBILE data, when active, all data traffic will use this network.isConnectedConnectionFast() Checks if there is connectivity to MOBILE data speed of about 400kbps to 23Mbps. Supports subtype EVDO0, EVDOA, EVDOB, UMTS, EHRPD, HSDPA, HSPA, HSUPA, HSPAP and LTE.isConnectedConnectionSlow()Checks if there is connectivity to MOBILE data speed of about 14kbps to 100kbps. Supports subtype CDMA, 1xRTT, EDGE, GPRS and IDEN.ConnectionActivity in place of Activity.ConnectionAppCompactActivity in place of AppCompactActivity.noNetwork(), or simply use them without real time update as seen fit such as calling Connection.isConnectedConnectionSlow(context).
200 |
205 |
206 | # License
207 |
208 | Copyright 2015 - 2021 Al-Kathiri Khalid www.alkathirikhalid.com
209 |
210 | Licensed under the Apache License, Version 2.0 (the "License");
211 | you may not use this file except in compliance with the License.
212 | You may obtain a copy of the License at
213 |
214 | http://www.apache.org/licenses/LICENSE-2.0
215 |
216 | Unless required by applicable law or agreed to in writing, software
217 | distributed under the License is distributed on an "AS IS" BASIS,
218 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
219 | See the License for the specific language governing permissions and
220 | limitations under the License.
221 |
--------------------------------------------------------------------------------