From 2a745a164db67e70154c5a3fc83cfc8eba73c46f Mon Sep 17 00:00:00 2001 From: "Romell D.Z" Date: Thu, 27 Sep 2018 13:22:17 -0500 Subject: [PATCH] New message structure, use calllback to catch each message, README files update, change snapshot to code lines --- .project | 2 +- README.es.md | 128 ++++++++---- README.md | 131 +++++++++---- app/build.gradle | 18 +- app/libs/fudipermission-1.0.a.aar | Bin 4644 -> 0 bytes app/libs/ussdlibrary-1.0.b.aar | Bin 56763 -> 0 bytes app/src/main/AndroidManifest.xml | 2 +- .../ussd_sample}/act/MainMenuActivity.java | 8 +- .../romellfudi/ussd_sample/use_case/CP1.java | 183 ++++++++++++++++++ .../fudi/freddy/biox_ussd/use_case/CP1.java | 107 ---------- app/src/main/res/layout/content_op1.xml | 22 ++- snapshot/F.png | Bin 35000 -> 0 bytes snapshot/G.png | Bin 58134 -> 0 bytes snapshot/H.png | Bin 88788 -> 0 bytes snapshot/J.png | Bin 38012 -> 0 bytes ussd-library/build.gradle | 8 +- .../ussdlibrary/USSDController.java | 42 ++-- .../romellfudi/ussdlibrary/USSDService.java | 29 ++- ussd-library/src/main/res/values/strings.xml | 5 +- 19 files changed, 457 insertions(+), 228 deletions(-) delete mode 100644 app/libs/fudipermission-1.0.a.aar delete mode 100644 app/libs/ussdlibrary-1.0.b.aar rename app/src/main/java/{fudi/freddy/biox_ussd => com/romellfudi/ussd_sample}/act/MainMenuActivity.java (98%) create mode 100755 app/src/main/java/com/romellfudi/ussd_sample/use_case/CP1.java delete mode 100755 app/src/main/java/fudi/freddy/biox_ussd/use_case/CP1.java delete mode 100755 snapshot/F.png delete mode 100755 snapshot/G.png delete mode 100755 snapshot/H.png delete mode 100755 snapshot/J.png diff --git a/.project b/.project index e2697ca..2f10cfc 100755 --- a/.project +++ b/.project @@ -1,6 +1,6 @@ - VoIpUSSDSample + VoIpUSSD Project BIOX_USSD created by Buildship. diff --git a/README.es.md b/README.es.md index ac2cacb..78eb6c0 100755 --- a/README.es.md +++ b/README.es.md @@ -18,7 +18,7 @@ Para manejar la comunicación ussd, hay que tener presente que la interfaz depen ## USSD LIBRARY -`latestVersion` is 1.0.b +`latestVersion` is 1.1.b Agregar en tu archivo `build.gradle` del proyecto Android: @@ -31,60 +31,122 @@ dependencies { } ``` -Construir una clase que extienda de los servicios de accesibilidad: +* Escribir el archivo xml [acá](https://github.com/romellfudi/VoIpUSSD/blob/master/ussd-library/src/main/res/xml/ussd_service.xml) to res/xml folder (if necessary), this config file allow link between App and SO: -![image](snapshot/G.png#center) +```xml + + +``` -En ella capturara la información de la pantalla USSD con el SO la visualice, para ello existen 2 maneras: +### Application -* via código: +Agregar las dependencias: CALL_PHONE, READ_PHONE_STATE and SYSTEM_ALERT_WINDOW: -![image](snapshot/H.png#center) +```xml + + + +``` -* via xml, el cual deberas vincular en el manifest de tu aplicación: +Agregar el servicio: ```xml - - + + + + + + ``` +# Uso del API: -### Aplicación +Instancia un objeto ussController con su activity -Configuramos en el archivo build.gradle, la extensión para leer librerias *.aar (la cuál crearemos y exportaremos) +```java +ussdController = USSDController.getInstance(activity); +ussdController.callUSSDInvoke(phoneNumber, new USSDController.CallbackInvoke() { + @Override + public void responseInvoke(String message) { + dataToSend <- send "data" into USSD's input text + ussdController.send(dataToSend,new USSDController.CallbackMessage(){ + @Override + public void responseMessage(String message) { + // message has the response string data from USSD + } + }); + } + + @Override + public void over(String message) { + // message has the response string data from USSD + // response no have input text, NOT SEND ANY DATA + } +}); -```gradle -allprojects { repositories { ... - flatDir { dirs 'libs' } } } ``` -Configuramos la dependencia de la libraria ussdlibrary mediante los prefijs {debugCompile: llamar a módulo de la libreria, releaseCompile: llamar al empaquetado *.aar} +Si requiere un flujo de trabajo, tienes que usar la siguiente estructura: -```gradle -dependencies { +```java +ussdController.callUSSDInvoke(phoneNumber, new USSDController.CallbackInvoke() { + @Override + public void responseInvoke(String message) { + // first option list - select option 1 + ussdController.send("1",new USSDController.CallbackMessage(){ + @Override + public void responseMessage(String message) { + // second option list - select option 1 + ussdController.send("1",new USSDController.CallbackMessage(){ + @Override + public void responseMessage(String message) { + ... + } + }); + } + }); + } + + @Override + public void over(String message) { + // message has the response string data from USSD + // response no have input text, NOT SEND ANY DATA + } ... - //debugCompile project(':ussdlibrary') - //releaseCompile(name: 'ussdlibrary-{latestVersion}', ext: 'aar') - implementation 'com.romellfudi.ussdlibrary:ussd-library:{latestVersion}' -} +}); +``` + +## OverlayShowingService Widget (no indispensable) + +Un severo problema al manejar este tipo de widget, este no puede ocultarse, redimencionarse, no puede ser puesto en el fondo con un rogressDialog +Pero recientemente a partir del Android O, Google permite la construcción build a nw kind permission dde widget sobrepuestos, mi solución implementada fue este widget llamdo `OverlayShowingService`: +For use need add permissions at AndroidManifest: + +```xml + ``` +Agregar Broadcast Service: -Teniendo importada las dependencias, en el manifest de la aplicación se debe escribir el servicio con los permisos necesarios +```xml + +``` -![image](snapshot/J.png#center) +Invocar como cualquier servicio, necesita un titulo para ser mostrado mientras se ejecuta la llama `callUSSDInvoke` mediante una variable extra `EXTRA`: -![image](snapshot/F.png#center) +```java +Intent svc = new Intent(activity, OverlayShowingService.class); +svc.putExtra(OverlayShowingService.EXTRA,"PROCESANDO"); +getActivity().startService(svc); +``` -### Uso de la línea voip +### EXTRA: Uso de la línea voip En esta sección dejo las líneas claves para realizar la conexión VOIP-USSD diff --git a/README.md b/README.md index 54f77ed..e93a04a 100755 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ To comunicate with ussd display, It is necessary to have present that the interf ## USSD LIBRARY -`latestVersion` is 1.0.b +`latestVersion` is 1.1.b Add the following in your app's `build.gradle` file: @@ -27,63 +27,126 @@ repositories { jcenter() } dependencies { - compile 'com.romellfudi.ussdlibrary:ussd-library:{latestVersion}' + implementation 'com.romellfudi.ussdlibrary:ussd-library:{latestVersion}' } ``` -Build a accessibility service class: +* Writing xml config file from [here](https://github.com/romellfudi/VoIpUSSD/blob/master/ussd-library/src/main/res/xml/ussd_service.xml) to res/xml folder (if necessary), this config file allow link between App and SO: -![image](snapshot/G.png#center) +```xml + + +``` -Capture information from USSD displaying windows, excist two ways: +### Application -* Writting code: +Puts dependencies on manifest, into manifest put CALL_PHONE, READ_PHONE_STATE and SYSTEM_ALERT_WINDOW: -![image](snapshot/H.png#center) +```xml + + + +``` -* Writting xml, this link manifest to SO: +Add service: ```xml - - + + + + + + ``` +# How use: -### Application +Instance an object ussController with activity -Configure build.gradle file, add exteension for run aar libraries(witch we build and export) +```java +ussdController = USSDController.getInstance(activity); +ussdController.callUSSDInvoke(phoneNumber, new USSDController.CallbackInvoke() { + @Override + public void responseInvoke(String message) { + dataToSend <- send "data" into USSD's input text + ussdController.send(dataToSend,new USSDController.CallbackMessage(){ + @Override + public void responseMessage(String message) { + // message has the response string data from USSD + } + }); + } + + @Override + public void over(String message) { + // message has the response string data from USSD + // response no have input text, NOT SEND ANY DATA + } +}); -```gradle -allprojects { repositories { ... - flatDir { dirs 'libs' } } } ``` -Configure ussd library dependencies on app module {debugCompile: attach library module, releaseCompile: import *.aar library} +if you need work with your custom messages, use this structure: -```gradle -dependencies { +```java +ussdController.callUSSDInvoke(phoneNumber, new USSDController.CallbackInvoke() { + @Override + public void responseInvoke(String message) { + // first option list - select option 1 + ussdController.send("1",new USSDController.CallbackMessage(){ + @Override + public void responseMessage(String message) { + // second option list - select option 1 + ussdController.send("1",new USSDController.CallbackMessage(){ + @Override + public void responseMessage(String message) { + ... + } + }); + } + }); + } + + @Override + public void over(String message) { + // message has the response string data from USSD + // response no have input text, NOT SEND ANY DATA + } ... - //debugCompile project(':ussdlibrary') - //releaseCompile(name: 'ussdlibrary-{latestVersion}', ext: 'aar') - implementation 'com.romellfudi.ussdlibrary:ussd-library:{latestVersion}' -} +}); ``` -Puts dependencies on manifest, into manifest put CALL_PHONE, READ_PHONE_STATE and SYSTEM_ALERT_WINDOW: +## OverlayShowingService Widget (not required) + +A problem huge working with ussd is you cant invisible, disenable, resize or put on back in progressDialog +But now on Android O, Google allow build a nw kind permission from overlay widget, my solution was a widget call OverlayShowingService: +For use need add permissions at AndroidManifest: + +```xml + +``` + +Add Broadcast Service: -![image](snapshot/J.png#center) +```xml + +``` -![image](snapshot/F.png#center) +Invoke like a normal services, need a tittle set extra vallue `EXTRA`: + +```java +Intent svc = new Intent(activity, OverlayShowingService.class); +svc.putExtra(OverlayShowingService.EXTRA,"PROCESANDO"); +getActivity().startService(svc); +``` -### Use Voip line +### EXTRA: Use Voip line In this secction leave the lines to call to Telcom (ussd hadh number) for connected it: diff --git a/app/build.gradle b/app/build.gradle index 10624b3..a129494 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,11 +12,11 @@ android { compileSdkVersion 26 buildToolsVersion "26.0.2" defaultConfig { - applicationId "fudi.freddy.biox_ussd" + applicationId "com.romellfudi.ussd_sample" minSdkVersion 17 targetSdkVersion 26 versionCode 1 - versionName "1.0" + versionName "1.1" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { @@ -28,15 +28,11 @@ android { } dependencies { - compile 'com.android.support:appcompat-v7:26.1.0' - compile 'com.android.support:design:26.1.0' - -// compile(name: 'fudipermission-1.0.a', ext: 'aar') - -// debugCompile project(':ussd-library') -// releaseCompile(name: 'ussdlibrary-1.0.b', ext: 'aar') - + implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support:design:26.1.0' implementation 'com.romellfudi.permission:fudi-permission:1.0.a' - implementation 'com.romellfudi.ussdlibrary:ussd-library:1.0.b' + + implementation project(':ussd-library') +// implementation 'com.romellfudi.ussdlibrary:ussd-library:1.1.b' } diff --git a/app/libs/fudipermission-1.0.a.aar b/app/libs/fudipermission-1.0.a.aar deleted file mode 100644 index d3a87b4630cff1a4fad55f42dbac8ad34b1ffeca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4644 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 DvB~0m diff --git a/app/libs/ussdlibrary-1.0.b.aar b/app/libs/ussdlibrary-1.0.b.aar deleted file mode 100644 index 0c53a5dcf1385378689428a014f441207c37fc17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56763 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%0AA0ccMz&Z0_ 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 E56Wah5dZ)H diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 79629e9..09e4d47 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.romellfudi.ussd_sample"> diff --git a/app/src/main/java/fudi/freddy/biox_ussd/act/MainMenuActivity.java b/app/src/main/java/com/romellfudi/ussd_sample/act/MainMenuActivity.java similarity index 98% rename from app/src/main/java/fudi/freddy/biox_ussd/act/MainMenuActivity.java rename to app/src/main/java/com/romellfudi/ussd_sample/act/MainMenuActivity.java index 138814e..f9ccd35 100755 --- a/app/src/main/java/fudi/freddy/biox_ussd/act/MainMenuActivity.java +++ b/app/src/main/java/com/romellfudi/ussd_sample/act/MainMenuActivity.java @@ -1,4 +1,4 @@ -package fudi.freddy.biox_ussd.act; +package com.romellfudi.ussd_sample.act; import android.content.Context; import android.content.DialogInterface; @@ -21,14 +21,14 @@ import android.view.MenuItem; import android.widget.Toast; -import fudi.freddy.biox_ussd.R; -import fudi.freddy.biox_ussd.use_case.CP1; +import com.romellfudi.ussd_sample.R; +import com.romellfudi.ussd_sample.use_case.CP1; import com.romellfudi.ussdlibrary.USSDService; /** * Main Activity * * @author Romell Domínguez - * @version 1.0.a 23/02/2017 + * @version 1.0.b 23/02/2017 * @since 1.0 */ public class MainMenuActivity extends AppCompatActivity diff --git a/app/src/main/java/com/romellfudi/ussd_sample/use_case/CP1.java b/app/src/main/java/com/romellfudi/ussd_sample/use_case/CP1.java new file mode 100755 index 0000000..4964f4f --- /dev/null +++ b/app/src/main/java/com/romellfudi/ussd_sample/use_case/CP1.java @@ -0,0 +1,183 @@ +package com.romellfudi.ussd_sample.use_case; + +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.provider.Settings; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import java.util.ArrayList; + +import com.romellfudi.ussd_sample.R; +import com.romellfudi.permission.PermissionService; +import com.romellfudi.ussdlibrary.OverlayShowingService; +import com.romellfudi.ussdlibrary.USSDController; + +import android.Manifest.permission; + +/** + * Use Case for Test Windows + * + * @author Romell Domínguez + * @version 1.1.b 27/09/2018 + * @since 1.0.a + */ +public class CP1 extends Fragment { + + TextView result; + EditText phone; + Button btn1,btn2,btn3; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + new PermissionService(getActivity()).request( + new String[]{permission.CALL_PHONE}, + callback); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.content_op1, container, false); + result = (TextView) view.findViewById(R.id.result); + phone = (EditText) view.findViewById(R.id.phone); + btn1 = (Button) view.findViewById(R.id.btn1); + btn2 = (Button) view.findViewById(R.id.btn2); + btn3 = (Button) view.findViewById(R.id.btn3); + setHasOptionsMenu(false); + + btn1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String phoneNumber = phone.getText().toString().trim(); + final USSDController ussdController = USSDController.getInstance(getActivity()); + result.setText(""); + ussdController.callUSSDInvoke(phoneNumber, new USSDController.CallbackInvoke() { + @Override + public void responseInvoke(String message) { + Log.d("APP",message); + result.append("\n-\n" + message); + // first option list - select option 1 + ussdController.send("1",new USSDController.CallbackMessage(){ + @Override + public void responseMessage(String message) { + Log.d("APP",message); + result.append("\n-\n" + message); + // second option list - select option 1 + ussdController.send("1",new USSDController.CallbackMessage(){ + @Override + public void responseMessage(String message) { + Log.d("APP",message); + result.append("\n-\n" + message); + } + }); + } + }); + } + + @Override + public void over(String message) { + Log.d("APP",message); + result.append("\n-\n" + message); + } + }); + } + }); + + btn2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + final Intent svc = new Intent(getActivity(), OverlayShowingService.class); + svc.putExtra(OverlayShowingService.EXTRA,"PROCESANDO"); + getActivity().startService(svc); + Log.d("APP","START OVERLAY DIALOG"); + String phoneNumber = phone.getText().toString().trim(); + final USSDController ussdController = USSDController.getInstance(getActivity()); + result.setText(""); + ussdController.callUSSDInvoke(phoneNumber, new USSDController.CallbackInvoke() { + @Override + public void responseInvoke(String message) { + Log.d("APP",message); + result.append("\n-\n" + message); + // first option list - select option 1 + ussdController.send("1",new USSDController.CallbackMessage(){ + @Override + public void responseMessage(String message) { + Log.d("APP",message); + result.append("\n-\n" + message); + // second option list - select option 1 + ussdController.send("1",new USSDController.CallbackMessage(){ + @Override + public void responseMessage(String message) { + Log.d("APP",message); + result.append("\n-\n" + message); + getActivity().stopService(svc); + Log.d("APP","STOP OVERLAY DIALOG"); + Log.d("APP","successful"); + } + }); + } + }); + } + + @Override + public void over(String message) { + Log.d("APP",message); + result.append("\n-\n" + message); + getActivity().stopService(svc); + Log.d("APP","STOP OVERLAY DIALOG"); + } + }); + } + }); + + btn3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + USSDController.verifyAccesibilityAccess(getActivity()); + } + }); + + return view; + } + + private PermissionService.Callback callback = new PermissionService.Callback() { + @Override + public void onRefuse(ArrayList RefusePermissions) { + Toast.makeText(getContext(), + getString(R.string.refuse_permissions), + Toast.LENGTH_SHORT).show(); + getActivity().finish(); + } + + @Override + public void onFinally() { + // pass + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (!Settings.canDrawOverlays(getActivity())) { + Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, + Uri.parse("package:" + getActivity().getPackageName())); + startActivity(intent); + } + } + } + }; + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + callback.handler(permissions, grantResults); + } +} + diff --git a/app/src/main/java/fudi/freddy/biox_ussd/use_case/CP1.java b/app/src/main/java/fudi/freddy/biox_ussd/use_case/CP1.java deleted file mode 100755 index d6a890a..0000000 --- a/app/src/main/java/fudi/freddy/biox_ussd/use_case/CP1.java +++ /dev/null @@ -1,107 +0,0 @@ -package fudi.freddy.biox_ussd.use_case; - -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.provider.Settings; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import java.util.ArrayList; - -import fudi.freddy.biox_ussd.R; -import com.romellfudi.permission.PermissionService; -import com.romellfudi.ussdlibrary.OverlayShowingService; -import com.romellfudi.ussdlibrary.USSDController; - -import android.Manifest.permission; - -/** - * Use Case for Test Windows - * - * @author Romell Domínguez - * @version 1.0.a 23/02/2017 - * @since 1.0 - */ -public class CP1 extends Fragment { - - TextView result; - EditText phone; - Button btn ; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - new PermissionService(getActivity()).request( - new String[]{permission.CALL_PHONE}, - callback); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.content_op1, container, false); - result = (TextView) view.findViewById(R.id.result); - phone = (EditText) view.findViewById(R.id.phone); - btn = (Button) view.findViewById(R.id.btn); - setHasOptionsMenu(false); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - final Intent svc = new Intent(getActivity(), OverlayShowingService.class); - svc.putExtra(OverlayShowingService.EXTRA,"PROCESANDO"); - getActivity().startService(svc); - String phoneNumber = phone.getText().toString().trim(); - USSDController ussdController = USSDController.getInstance(getActivity()); - ussdController.callUSSDInvoke(phoneNumber, result, new USSDController.Callback() { - @Override - public void over() { - Log.d("DDD","stop"); - getActivity().stopService(svc); - } - }); - } - }); - - return view; - } - - private PermissionService.Callback callback = new PermissionService.Callback() { - @Override - public void onRefuse(ArrayList RefusePermissions) { - Toast.makeText(getContext(), - getString(R.string.refuse_permissions), - Toast.LENGTH_SHORT).show(); - getActivity().finish(); - } - - @Override - public void onFinally() { - // pass - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - if (!Settings.canDrawOverlays(getActivity())) { - Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, - Uri.parse("package:" + getActivity().getPackageName())); - startActivity(intent); - } - } - } - }; - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - callback.handler(permissions, grantResults); - } -} - diff --git a/app/src/main/res/layout/content_op1.xml b/app/src/main/res/layout/content_op1.xml index 15ea105..cae6e1d 100755 --- a/app/src/main/res/layout/content_op1.xml +++ b/app/src/main/res/layout/content_op1.xml @@ -27,7 +27,7 @@ android:singleLine="true" />