diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..fc30a5c --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +My E-Loading \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..a0de2a1 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..0380d8d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..2fe1f63 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..c2a5e30 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,39 @@ +plugins { + id 'com.android.application' +} + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + defaultConfig { + applicationId "com.aqp.mye_loading" + minSdkVersion 21 + targetSdkVersion 30 + versionCode 1 + versionName '1.5.8' + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'com.google.android.material:material:1.3.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.cardview:cardview:1.0.0' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/release/app-release.apk b/app/release/app-release.apk new file mode 100644 index 0000000..06753e5 Binary files /dev/null and b/app/release/app-release.apk differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json new file mode 100644 index 0000000..2808706 --- /dev/null +++ b/app/release/output-metadata.json @@ -0,0 +1,20 @@ +{ + "version": 3, + "artifactType": { + "type": "APK", + "kind": "Directory" + }, + "applicationId": "com.aqp.mye_loading", + "variantName": "release", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "attributes": [], + "versionCode": 1, + "versionName": "1.0.1-AlphaBert", + "outputFile": "app-release.apk" + } + ], + "elementType": "File" +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/aqp/mye_loading/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/aqp/mye_loading/ExampleInstrumentedTest.java new file mode 100644 index 0000000..0d3cfaf --- /dev/null +++ b/app/src/androidTest/java/com/aqp/mye_loading/ExampleInstrumentedTest.java @@ -0,0 +1,25 @@ +package com.aqp.mye_loading; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.aqp.mye_loading", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..f73d84b --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..c611671 Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/aqp/mye_loading/AddPromoActivity.java b/app/src/main/java/com/aqp/mye_loading/AddPromoActivity.java new file mode 100644 index 0000000..69ca02e --- /dev/null +++ b/app/src/main/java/com/aqp/mye_loading/AddPromoActivity.java @@ -0,0 +1,91 @@ +package com.aqp.mye_loading; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.aqp.mye_loading.other.DBHandler; + +import java.util.Objects; + +public class AddPromoActivity extends AppCompatActivity { + + EditText edtPromoCode, edtSMS, edtCall, edtData, edtValidity, edtPrice; + Button btnAddPromo, btnClose; + TextView tvTelecomName; + private DBHandler dbHandler; + String telecom; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); //will hide the title + Objects.requireNonNull(getSupportActionBar()).hide(); // hide the title bar + setContentView(R.layout.activity_add_promo); + + if (Build.VERSION.SDK_INT >= 23) { + Window window = this.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.setStatusBarColor(this.getResources().getColor(R.color.white_smoke)); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + + edtCall = findViewById(R.id.idEdtCall); + edtData = findViewById(R.id.idEdtData); + edtPrice = findViewById(R.id.idEdtPrice); + edtPromoCode = findViewById(R.id.idEdtPromoCode); + edtSMS = findViewById(R.id.idEdtSMS); + edtValidity = findViewById(R.id.idEdtValidity); + btnAddPromo = findViewById(R.id.btn_Add); + btnClose = findViewById(R.id.btn_Close); + tvTelecomName = findViewById(R.id.textView_telecomName); + + dbHandler = new DBHandler(AddPromoActivity.this); + + Intent intent = getIntent(); + telecom = intent.getStringExtra("telecom"); + tvTelecomName.setText("Add Promo For: "+telecom); + + btnAddPromo.setOnClickListener(view -> { + String promoCode = edtPromoCode.getText().toString().trim(); + String SMS = edtSMS.getText().toString().trim(); + String Call = edtCall.getText().toString().trim(); + String Data = edtData.getText().toString().trim(); + String Validity = edtValidity.getText().toString().trim(); + String Price = edtPrice.getText().toString().trim(); + + if (promoCode.isEmpty() && SMS.isEmpty() && Call.isEmpty() && + Data.isEmpty() && Validity.isEmpty() && Price.isEmpty()) { + Toast.makeText(AddPromoActivity.this, "Please enter all the data..", Toast.LENGTH_SHORT).show(); + return; + } + + dbHandler.addNewPromo(telecom, promoCode, SMS, Call, Data, Validity, Price); + + Toast.makeText(AddPromoActivity.this, "Promo has been added!", Toast.LENGTH_SHORT).show(); + + edtCall.setText(""); + edtData.setText(""); + edtPrice.setText(""); + edtPromoCode.setText(""); + edtSMS.setText(""); + edtValidity.setText(""); + }); + + btnClose.setOnClickListener(view -> { + Intent intent1 = new Intent(AddPromoActivity.this, MainActivity.class); + startActivity(intent1); + finish(); + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/aqp/mye_loading/GlobeTMProcessActivity.java b/app/src/main/java/com/aqp/mye_loading/GlobeTMProcessActivity.java new file mode 100644 index 0000000..fb782e6 --- /dev/null +++ b/app/src/main/java/com/aqp/mye_loading/GlobeTMProcessActivity.java @@ -0,0 +1,259 @@ +package com.aqp.mye_loading; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.app.Activity; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.ColorStateList; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.telephony.SmsManager; +import android.text.TextUtils; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.aqp.mye_loading.adapter.AdapterPromoList; +import com.aqp.mye_loading.model.PromoList; +import com.aqp.mye_loading.other.DBHandler; + +import java.util.ArrayList; +import java.util.Objects; + +public class GlobeTMProcessActivity extends AppCompatActivity { + private ArrayList promoLists; + private DBHandler dbHandler; + RecyclerView recyclerViewPromoList; + + LinearLayout layoutProcess, layoutFinalizing; + TextView textViewNumber, textViewNumberFinal, textViewPromo; + Button btnBack, btnNextToSend, btnSend, btnClose; + Button btn5,btn10,btn20,btn25,btn30,btn50,btn100; + String Number, Promo, telecom; + String ServerNumber = "8724"; + EditText edtAmount; + + CoordinatorLayout coordinatorLayoutRegular; + TextView selectTask1, itemRegular, itemPromo; + ColorStateList def; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); //will hide the title + Objects.requireNonNull(getSupportActionBar()).hide(); // hide the title bar + setContentView(R.layout.activity_process); + + if (Build.VERSION.SDK_INT >= 23) { + Window window = this.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.setStatusBarColor(this.getResources().getColor(R.color.white_smoke)); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + + recyclerViewPromoList = findViewById(R.id.recycleViewPromoList); + layoutProcess = findViewById(R.id.layoutProcess); + layoutFinalizing = findViewById(R.id.layoutFinalizing); + textViewNumber = findViewById(R.id.textView_Number); + textViewNumberFinal = findViewById(R.id.textView_NumberFinal); + textViewPromo = findViewById(R.id.textView_Promo); + btnBack = findViewById(R.id.backButton); + btnNextToSend = findViewById(R.id.btn_nextToSend); + btnSend = findViewById(R.id.btn_send); + btnClose = findViewById(R.id.btn_close); + + btn5 = findViewById(R.id.btn_5); + btn10 = findViewById(R.id.btn_10); + btn20 = findViewById(R.id.btn_20); + btn25 = findViewById(R.id.btn_25); + btn30 = findViewById(R.id.btn_30); + btn50 = findViewById(R.id.btn_50); + btn100 = findViewById(R.id.btn_100); + edtAmount = findViewById(R.id.editTextAmount); + + coordinatorLayoutRegular = findViewById(R.id.coordinatorRegular); + selectTask1 = findViewById(R.id.selectTask1); + itemRegular = findViewById(R.id.itemRegular); + itemPromo = findViewById(R.id.itemPromo); + + def = itemPromo.getTextColors(); + dbHandler = new DBHandler(GlobeTMProcessActivity.this); + + itemRegular.setOnClickListener(v -> { + selectTask1.animate().x(0).setDuration(100); + itemRegular.setTextColor(getResources().getColor(R.color.black)); + itemPromo.setTextColor(def); + clearData(); + coordinatorLayoutRegular.setVisibility(View.VISIBLE); + recyclerViewPromoList.setVisibility(View.GONE); + }); + itemPromo.setOnClickListener(v -> { + recyclerViewPromoList.setVisibility(View.VISIBLE); + setAdapter(); + itemPromo.setTextColor(getResources().getColor(R.color.black)); + itemRegular.setTextColor(def); + int size = itemPromo.getWidth(); + selectTask1.animate().x(size).setDuration(100); + coordinatorLayoutRegular.setVisibility(View.GONE); + }); + + promoLists = new ArrayList<>(); + + Intent intent = getIntent(); + Number = intent.getStringExtra("number"); + telecom = intent.getStringExtra("telecom"); + + textViewNumber.setText(Number); + + btn5.setOnClickListener(v -> edtAmount.setText(btn5.getText().toString().trim())); + btn10.setOnClickListener(v -> edtAmount.setText(btn10.getText().toString().trim())); + btn20.setOnClickListener(v -> edtAmount.setText(btn20.getText().toString().trim())); + btn25.setOnClickListener(v -> edtAmount.setText(btn25.getText().toString().trim())); + btn30.setOnClickListener(v -> edtAmount.setText(btn30.getText().toString().trim())); + btn50.setOnClickListener(v -> edtAmount.setText(btn50.getText().toString().trim())); + btn100.setOnClickListener(v -> edtAmount.setText(btn100.getText().toString().trim())); + btnBack.setOnClickListener(v -> finish()); + + btnNextToSend.setOnClickListener(v -> { + InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(),0); + ProcessLoad(); + }); + + btnClose.setOnClickListener(v -> { + layoutProcess.setVisibility(View.VISIBLE); + layoutFinalizing.setVisibility(View.GONE); + }); + + btnSend.setOnClickListener(v -> Send()); + } + + private void ProcessLoad(){ + Promo = "Regular Load "+edtAmount.getText().toString().trim(); + + if (TextUtils.isEmpty(edtAmount.getText())){ + Toast.makeText(GlobeTMProcessActivity.this, "Input or Choose Amount", Toast.LENGTH_SHORT).show(); + } else { + textViewNumberFinal.setText(Number); + textViewPromo.setText(Promo); + layoutProcess.setVisibility(View.GONE); + layoutFinalizing.setVisibility(View.VISIBLE); + } + } + + private void Send(){ + Toast.makeText(getBaseContext(), "Processing...!", + Toast.LENGTH_SHORT).show(); + btnSend.setVisibility(View.GONE); + + String SMS = Number+" "+edtAmount.getText().toString().trim(); + + String SENT = "SMS_SENT"; + String DELIVERED = "SMS_DELIVERED"; + + PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, + new Intent(SENT), 0); + + registerReceiver(new BroadcastReceiver(){ + @Override + public void onReceive(Context arg0, Intent arg1) { + switch (getResultCode()) + { + case Activity.RESULT_OK: + Toast.makeText(getBaseContext(), "Message Sent!", + Toast.LENGTH_SHORT).show(); + new Handler().postDelayed(() -> finish(), 1000); + break; + case SmsManager.RESULT_ERROR_GENERIC_FAILURE: + Toast.makeText(getBaseContext(), "Generic Failure", + Toast.LENGTH_SHORT).show(); + layoutProcess.setVisibility(View.VISIBLE); + layoutFinalizing.setVisibility(View.GONE); + btnSend.setVisibility(View.VISIBLE); + break; + case SmsManager.RESULT_ERROR_NO_SERVICE: + Toast.makeText(getBaseContext(), "No Service!", + Toast.LENGTH_SHORT).show(); + layoutProcess.setVisibility(View.VISIBLE); + layoutFinalizing.setVisibility(View.GONE); + btnSend.setVisibility(View.VISIBLE); + break; + case SmsManager.RESULT_ERROR_NULL_PDU: + Toast.makeText(getBaseContext(), "Null PDU", + Toast.LENGTH_SHORT).show(); + layoutProcess.setVisibility(View.VISIBLE); + layoutFinalizing.setVisibility(View.GONE); + btnSend.setVisibility(View.VISIBLE); + break; + case SmsManager.RESULT_ERROR_RADIO_OFF: + Toast.makeText(getBaseContext(), "Radio Off!", + Toast.LENGTH_SHORT).show(); + layoutProcess.setVisibility(View.VISIBLE); + layoutFinalizing.setVisibility(View.GONE); + btnSend.setVisibility(View.VISIBLE); + break; + } + } + }, new IntentFilter(SENT)); + + PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, + new Intent(DELIVERED), 0); + + registerReceiver(new BroadcastReceiver(){ + @Override + public void onReceive(Context arg0, Intent arg1) { + switch (getResultCode()) + { + case Activity.RESULT_OK: + Toast.makeText(getBaseContext(), "SMS Delivered!", + Toast.LENGTH_SHORT).show(); + break; + case Activity.RESULT_CANCELED: + Toast.makeText(getBaseContext(), "SMS Not Delivered!", + Toast.LENGTH_SHORT).show(); + break; + } + } + }, new IntentFilter(DELIVERED)); + + SmsManager sms = SmsManager.getDefault(); + sms.sendTextMessage(ServerNumber, null, SMS, sentPI, deliveredPI); + } + + private void setAdapter(){ + promoLists = dbHandler.readPromo(telecom); + + AdapterPromoList adapter = new AdapterPromoList(promoLists); + RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); + recyclerViewPromoList.setLayoutManager(layoutManager); + recyclerViewPromoList.setItemAnimator(new DefaultItemAnimator()); + recyclerViewPromoList.setAdapter(adapter); + } + + public void clearData() { + AdapterPromoList adapter = new AdapterPromoList(promoLists); + promoLists.clear(); // clear list + adapter.notifyDataSetChanged(); // let your adapter know about the changes and reload view. + } + + @Override + public void onBackPressed() { + finish(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/aqp/mye_loading/MainActivity.java b/app/src/main/java/com/aqp/mye_loading/MainActivity.java new file mode 100644 index 0000000..c1252a9 --- /dev/null +++ b/app/src/main/java/com/aqp/mye_loading/MainActivity.java @@ -0,0 +1,354 @@ +package com.aqp.mye_loading; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import android.Manifest; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.provider.ContactsContract; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class MainActivity extends AppCompatActivity { + private static final int MY_PERMISSIONS_REQUEST_SEND_SMS = 1 ; + private static final int CONTACT_PICKER_RESULT = 111; + Button btnExit, btnNextToProcess, btnContacts, btnNextToProcessContact, btnClose, btnAddPromo, btnClosePromo, btnCloseTelecom, + btnGlobe, btnSmart, btnTM, btnTNT, btnGlobeT, btnSmartT, btnTMT, btnTNTT; + EditText eTNumber, eTContactNumber; + TextView tvContactName, tvBalance, tvVersion; + String Number, ContactNumber; + LinearLayout layoutContact, layoutMain, layoutAddPromo, layoutTelecom; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); //will hide the title + Objects.requireNonNull(getSupportActionBar()).hide(); // hide the title bar + setContentView(R.layout.activity_main); + + if (Build.VERSION.SDK_INT >= 23) { + Window window = this.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.setStatusBarColor(this.getResources().getColor(R.color.white_smoke)); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + + btnExit = findViewById(R.id.btn_Exit); + btnNextToProcess = findViewById(R.id.btn_nextToProcess); + btnContacts = findViewById(R.id.btn_savedContact); + eTNumber = findViewById(R.id.editTextNumber); + btnNextToProcessContact = findViewById(R.id.btn_nextToProcessContact); + btnClose = findViewById(R.id.btn_close); + btnAddPromo = findViewById(R.id.btn_addPromo); + btnClosePromo = findViewById(R.id.btn_closePromo); + btnGlobe = findViewById(R.id.btn_Globe); + btnSmart = findViewById(R.id.btn_Smart); + btnTM = findViewById(R.id.btn_TM); + btnTNT = findViewById(R.id.btn_TNT); + btnGlobeT = findViewById(R.id.btn_GlobeT); + btnSmartT = findViewById(R.id.btn_SmartT); + btnTMT = findViewById(R.id.btn_TMT); + btnTNTT = findViewById(R.id.btn_TNTT); + btnCloseTelecom = findViewById(R.id.btn_closeTelecom); + eTContactNumber = findViewById(R.id.editTextContactNumber); + tvContactName = findViewById(R.id.textView_ContactName); + layoutContact = findViewById(R.id.layoutContacts); + layoutMain = findViewById(R.id.layoutMain); + layoutAddPromo = findViewById(R.id.layoutAddPromo); + layoutTelecom = findViewById(R.id.layoutTelecom); + tvBalance = findViewById(R.id.textViewBalance); + tvVersion = findViewById(R.id.tv_Version); + + if((ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) & ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)) != PackageManager.PERMISSION_GRANTED){ + checkPermission(); + } else { + GetBalanceSMS(); + } + + btnContacts.setOnClickListener(v -> { + layoutMain.setVisibility(View.GONE); + layoutContact.setVisibility(View.VISIBLE); + doLaunchContactPicker(v); + }); + tvContactName.setOnClickListener(this::doLaunchContactPicker); + + btnNextToProcess.setOnClickListener(v -> validateNumber()); + btnNextToProcessContact.setOnClickListener(v -> validateNumberContact()); + + btnAddPromo.setOnClickListener(view -> { + layoutMain.setVisibility(View.GONE); + layoutAddPromo.setVisibility(View.VISIBLE); + AddPromo(); + }); + //Close and Exit + btnClosePromo.setOnClickListener(view -> { + layoutMain.setVisibility(View.VISIBLE); + layoutAddPromo.setVisibility(View.GONE); + }); + btnClose.setOnClickListener(v -> { + layoutMain.setVisibility(View.VISIBLE); + layoutContact.setVisibility(View.GONE); + }); + btnCloseTelecom.setOnClickListener(v -> { + layoutMain.setVisibility(View.VISIBLE); + layoutTelecom.setVisibility(View.GONE); + }); + btnExit.setOnClickListener(v -> { + finishAffinity(); + System.exit(0); + }); + String version = "App Version: "+BuildConfig.VERSION_NAME; + tvVersion.setText(version); + } + + private void validateNumber(){ + Number = eTNumber.getText().toString().trim(); + + if (TextUtils.isEmpty(Number)) { + Toast.makeText(MainActivity.this, "Input the Numbers", Toast.LENGTH_SHORT).show(); + return; + } + if (Number.length() < 11){ + Toast.makeText(MainActivity.this, "Numbers should be 11 digits", Toast.LENGTH_SHORT).show(); + return; + } + + layoutMain.setVisibility(View.GONE); + layoutTelecom.setVisibility(View.VISIBLE); + + btnTNTT.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, SmartTNTActivity.class); + intent.putExtra("number", Number.replace(" ", "")); + intent.putExtra("telecom", "TNT"); + startActivity(intent); + layoutTelecom.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + btnTMT.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, GlobeTMProcessActivity.class); + intent.putExtra("number", Number.replace(" ", "")); + intent.putExtra("telecom", "TM"); + startActivity(intent); + layoutTelecom.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + btnSmartT.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, SmartTNTActivity.class); + intent.putExtra("number", Number.replace(" ", "")); + intent.putExtra("telecom", "Smart"); + startActivity(intent); + layoutTelecom.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + btnGlobeT.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, GlobeTMProcessActivity.class); + intent.putExtra("number", Number.replace(" ", "")); + intent.putExtra("telecom", "Globe"); + startActivity(intent); + layoutTelecom.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + } + private void validateNumberContact(){ + ContactNumber = eTContactNumber.getText().toString().trim().replace("+63","0"); + + if (TextUtils.isEmpty(ContactNumber)) { + Toast.makeText(MainActivity.this, "Input the Numbers", Toast.LENGTH_SHORT).show(); + return; + } + if (ContactNumber.length() < 11){ + Toast.makeText(MainActivity.this, "Numbers should be 11 digits", Toast.LENGTH_SHORT).show(); + return; + } + + layoutMain.setVisibility(View.GONE); + layoutTelecom.setVisibility(View.VISIBLE); + layoutContact.setVisibility(View.GONE); + + btnTNTT.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, SmartTNTActivity.class); + intent.putExtra("number", ContactNumber.replace(" ", "")); + intent.putExtra("telecom", "TNT"); + startActivity(intent); + layoutTelecom.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + btnTMT.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, GlobeTMProcessActivity.class); + intent.putExtra("number", ContactNumber.replace(" ", "")); + intent.putExtra("telecom", "TM"); + startActivity(intent); + layoutTelecom.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + btnSmartT.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, SmartTNTActivity.class); + intent.putExtra("number", ContactNumber.replace(" ", "")); + intent.putExtra("telecom", "Smart"); + startActivity(intent); + layoutTelecom.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + btnGlobeT.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, GlobeTMProcessActivity.class); + intent.putExtra("number", ContactNumber.replace(" ", "")); + intent.putExtra("telecom", "Globe"); + startActivity(intent); + layoutTelecom.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + } + + private void AddPromo(){ + btnTNT.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, AddPromoActivity.class); + intent.putExtra("telecom", "TNT"); + startActivity(intent); + layoutAddPromo.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + btnTM.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, AddPromoActivity.class); + intent.putExtra("telecom", "TM"); + startActivity(intent); + layoutAddPromo.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + btnSmart.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, AddPromoActivity.class); + intent.putExtra("telecom", "Smart"); + startActivity(intent); + layoutAddPromo.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + btnGlobe.setOnClickListener(view -> { + Intent intent = new Intent(MainActivity.this, AddPromoActivity.class); + intent.putExtra("telecom", "Globe"); + startActivity(intent); + layoutAddPromo.setVisibility(View.GONE); + layoutMain.setVisibility(View.VISIBLE); + }); + } + + public void doLaunchContactPicker(View view) { + Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, + ContactsContract.Contacts.CONTENT_URI); + startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT); + } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if ((requestCode == CONTACT_PICKER_RESULT) && (resultCode == RESULT_OK)) { + if (data != null) { + Uri contactData = data.getData(); + + try { + + String id = contactData.getLastPathSegment(); + String[] columns = {ContactsContract.CommonDataKinds.Phone.DATA, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME}; + Cursor phoneCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, columns, + ContactsContract.CommonDataKinds.Phone.CONTACT_ID + + " = ?", new String[]{id}, + null); + + final ArrayList phonesList = new ArrayList<>(); + String Name = null; + if (phoneCur.moveToFirst()) { + do { + Name = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); + String phone = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA)); + phonesList.add(phone); + } while (phoneCur.moveToNext()); + tvContactName.setText(Name); + } + + phoneCur.close(); + + if (phonesList.size() == 0) { + Toast.makeText( + this, "This contact does not contain any number", + Toast.LENGTH_LONG).show(); + } else if (phonesList.size() == 1) { + eTContactNumber.setText(phonesList.get(0)); + } else { + + final String[] phonesArr = new String[phonesList + .size()]; + for (int i = 0; i < phonesList.size(); i++) { + phonesArr[i] = phonesList.get(i); + } + + AlertDialog.Builder dialog = new AlertDialog.Builder( + MainActivity.this); + dialog.setTitle("Name : " + Name); + ((AlertDialog.Builder) dialog).setItems(phonesArr, + (dialog1, which) -> { + String selectedEmail = phonesArr[which]; + eTContactNumber.setText(selectedEmail); + }).create(); + dialog.show(); + } + } catch (Exception e) { + Log.e("FILES", "Failed to get phone data", e); + } + } + + } + } + + private void GetBalanceSMS(){ + Uri uriSMSURI = Uri.parse("content://sms/inbox"); + Cursor cur = getContentResolver().query(uriSMSURI, null, "address='8724'", null,null); + + if (cur.moveToFirst()) { + Pattern pattern = Pattern.compile("P(.*?)T"); + Matcher matcher = pattern.matcher(cur.getString(12)); + if (matcher.find()) + { + tvBalance.setText(Objects.requireNonNull(matcher.group(1)).trim()); + } + }else { + Toast.makeText(MainActivity.this, "No SMS Found on 8724", Toast.LENGTH_SHORT).show(); + } + + } + + private void checkPermission() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.SEND_SMS,Manifest.permission.READ_SMS,Manifest.permission.RECEIVE_SMS,Manifest.permission.READ_CONTACTS},MY_PERMISSIONS_REQUEST_SEND_SMS); + } + } + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == MY_PERMISSIONS_REQUEST_SEND_SMS && grantResults.length > 0 ){ + if(grantResults[0] == PackageManager.PERMISSION_GRANTED) + Toast.makeText(this,"Permission Granted",Toast.LENGTH_SHORT).show(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/aqp/mye_loading/PromoProcessActivity.java b/app/src/main/java/com/aqp/mye_loading/PromoProcessActivity.java new file mode 100644 index 0000000..44c2dd2 --- /dev/null +++ b/app/src/main/java/com/aqp/mye_loading/PromoProcessActivity.java @@ -0,0 +1,151 @@ +package com.aqp.mye_loading; + +import androidx.appcompat.app.AppCompatActivity; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.telephony.SmsManager; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import java.util.Objects; + +public class PromoProcessActivity extends AppCompatActivity { + String Number, PromoCode, telecom, Descriptions, Price; + String ServerNumber = "8724"; + + TextView textViewNumber, textViewPromo, textViewPrice, textViewPromoCode; + Button btnSend, btnClose; + ImageView imageViewTelecom; + + @SuppressLint("ResourceType") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); //will hide the title + Objects.requireNonNull(getSupportActionBar()).hide(); // hide the title bar + setContentView(R.layout.activity_promo_process); + + if (Build.VERSION.SDK_INT >= 23) { + Window window = this.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.setStatusBarColor(this.getResources().getColor(R.color.white_smoke)); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + + textViewNumber = findViewById(R.id.textView_NumberFinal); + textViewPromo = findViewById(R.id.textView_Promo); + textViewPrice = findViewById(R.id.textView_Price); + textViewPromoCode = findViewById(R.id.textView_PromoCode); + btnSend = findViewById(R.id.btn_send); + btnClose = findViewById(R.id.btn_close); + imageViewTelecom = findViewById(R.id.imageViewTelecom); + + Intent intent = getIntent(); + Number = intent.getStringExtra("number"); + telecom = intent.getStringExtra("telecom"); + PromoCode = intent.getStringExtra("promoCode"); + Descriptions = intent.getStringExtra("description"); + Price = "Total Price: "+intent.getStringExtra("price"); + + if (Objects.equals(telecom, "TNT") || Objects.equals(telecom, "Smart")){ + imageViewTelecom.setImageResource(R.raw.smart_tnt); + } + + textViewNumber.setText(Number); + textViewPromo.setText(Descriptions); + textViewPrice.setText(Price); + textViewPromoCode.setText(PromoCode); + + btnClose.setOnClickListener(v -> finish()); + + btnSend.setOnClickListener(v -> Send()); + } + + private void Send(){ + Toast.makeText(getBaseContext(), "Processing...!", + Toast.LENGTH_SHORT).show(); + btnSend.setVisibility(View.GONE); + + String SMS = Number+" "+PromoCode; + + String SENT = "SMS_SENT"; + String DELIVERED = "SMS_DELIVERED"; + + PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, + new Intent(SENT), 0); + + registerReceiver(new BroadcastReceiver(){ + @Override + public void onReceive(Context arg0, Intent arg1) { + switch (getResultCode()) + { + case Activity.RESULT_OK: + Toast.makeText(getBaseContext(), "Message Sent!", + Toast.LENGTH_LONG).show(); + new Handler().postDelayed(() -> finish(), 2000); + break; + case SmsManager.RESULT_ERROR_GENERIC_FAILURE: + Toast.makeText(getBaseContext(), "Generic Failure", + Toast.LENGTH_LONG).show(); + new Handler().postDelayed(() -> finish(), 2000); + break; + case SmsManager.RESULT_ERROR_NO_SERVICE: + Toast.makeText(getBaseContext(), "No Service!", + Toast.LENGTH_LONG).show(); + new Handler().postDelayed(() -> finish(), 2000); + break; + case SmsManager.RESULT_ERROR_NULL_PDU: + Toast.makeText(getBaseContext(), "Null PDU", + Toast.LENGTH_LONG).show(); + new Handler().postDelayed(() -> finish(), 2000); + break; + case SmsManager.RESULT_ERROR_RADIO_OFF: + Toast.makeText(getBaseContext(), "Radio Off!", + Toast.LENGTH_LONG).show(); + new Handler().postDelayed(() -> finish(), 2000); + break; + } + } + }, new IntentFilter(SENT)); + + PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, + new Intent(DELIVERED), 0); + + registerReceiver(new BroadcastReceiver(){ + @Override + public void onReceive(Context arg0, Intent arg1) { + switch (getResultCode()) + { + case Activity.RESULT_OK: + Toast.makeText(getBaseContext(), "SMS Delivered!", + Toast.LENGTH_LONG).show(); + new Handler().postDelayed(() -> finish(), 2000); + break; + case Activity.RESULT_CANCELED: + Toast.makeText(getBaseContext(), "SMS Not Delivered!", + Toast.LENGTH_LONG).show(); + new Handler().postDelayed(() -> finish(), 2000); + break; + } + } + }, new IntentFilter(DELIVERED)); + + SmsManager sms = SmsManager.getDefault(); + sms.sendTextMessage(ServerNumber, null, SMS, sentPI, deliveredPI); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/aqp/mye_loading/SmartTNTActivity.java b/app/src/main/java/com/aqp/mye_loading/SmartTNTActivity.java new file mode 100644 index 0000000..2bd6dbb --- /dev/null +++ b/app/src/main/java/com/aqp/mye_loading/SmartTNTActivity.java @@ -0,0 +1,246 @@ +package com.aqp.mye_loading; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.app.Activity; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.ColorStateList; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.telephony.SmsManager; +import android.text.TextUtils; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.aqp.mye_loading.adapter.AdapterPromoList; +import com.aqp.mye_loading.model.PromoList; +import com.aqp.mye_loading.other.DBHandler; + +import java.util.ArrayList; +import java.util.Objects; + +public class SmartTNTActivity extends AppCompatActivity { + private ArrayList promoLists; + private DBHandler dbHandler; + RecyclerView recyclerViewPromoList; + + LinearLayout layoutProcess, layoutFinalizing; + TextView textViewNumber, textViewNumberFinal, textViewPromo; + Button btnBack, btnNextToSend, btnSend, btnClose; + Button btn5,btn10,btn20,btn25,btn30,btn50,btn100; + String Number, Promo, telecom; + String ServerNumber = "8724"; + EditText edtAmount; + + CoordinatorLayout coordinatorLayoutRegular; + TextView selectTask1, itemRegular, itemPromo; + ColorStateList def; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + requestWindowFeature(Window.FEATURE_NO_TITLE); //will hide the title + Objects.requireNonNull(getSupportActionBar()).hide(); // hide the title bar + setContentView(R.layout.activity_smart_tntactivity); + + if (Build.VERSION.SDK_INT >= 23) { + Window window = this.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.setStatusBarColor(this.getResources().getColor(R.color.white_smoke)); + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + + recyclerViewPromoList = findViewById(R.id.recycleViewPromoList); + layoutProcess = findViewById(R.id.layoutProcess); + layoutFinalizing = findViewById(R.id.layoutFinalizing); + textViewNumber = findViewById(R.id.textView_Number); + textViewNumberFinal = findViewById(R.id.textView_NumberFinal); + textViewPromo = findViewById(R.id.textView_Promo); + btnBack = findViewById(R.id.backButton); + btnNextToSend = findViewById(R.id.btn_nextToSend); + btnSend = findViewById(R.id.btn_send); + btnClose = findViewById(R.id.btn_close); + + btn5 = findViewById(R.id.btn_5); + btn10 = findViewById(R.id.btn_10); + btn20 = findViewById(R.id.btn_20); + btn25 = findViewById(R.id.btn_25); + btn30 = findViewById(R.id.btn_30); + btn50 = findViewById(R.id.btn_50); + btn100 = findViewById(R.id.btn_100); + edtAmount = findViewById(R.id.editTextAmount); + + coordinatorLayoutRegular = findViewById(R.id.coordinatorRegular); + selectTask1 = findViewById(R.id.selectTask1); + itemRegular = findViewById(R.id.itemRegular); + itemPromo = findViewById(R.id.itemPromo); + + def = itemPromo.getTextColors(); + dbHandler = new DBHandler(SmartTNTActivity.this); + + itemRegular.setOnClickListener(v -> { + selectTask1.animate().x(0).setDuration(100); + itemRegular.setTextColor(getResources().getColor(R.color.black)); + itemPromo.setTextColor(def); + clearData(); + coordinatorLayoutRegular.setVisibility(View.VISIBLE); + recyclerViewPromoList.setVisibility(View.GONE); + }); + itemPromo.setOnClickListener(v -> { + recyclerViewPromoList.setVisibility(View.VISIBLE); + setAdapter(); + itemPromo.setTextColor(getResources().getColor(R.color.black)); + itemRegular.setTextColor(def); + int size = itemPromo.getWidth(); + selectTask1.animate().x(size).setDuration(100); + coordinatorLayoutRegular.setVisibility(View.GONE); + }); + + promoLists = new ArrayList<>(); + + Intent intent = getIntent(); + Number = intent.getStringExtra("number"); + telecom = intent.getStringExtra("telecom"); + + textViewNumber.setText(Number); + + btn5.setOnClickListener(v -> edtAmount.setText(btn5.getText().toString().trim())); + btn10.setOnClickListener(v -> edtAmount.setText(btn10.getText().toString().trim())); + btn20.setOnClickListener(v -> edtAmount.setText(btn20.getText().toString().trim())); + btn25.setOnClickListener(v -> edtAmount.setText(btn25.getText().toString().trim())); + btn30.setOnClickListener(v -> edtAmount.setText(btn30.getText().toString().trim())); + btn50.setOnClickListener(v -> edtAmount.setText(btn50.getText().toString().trim())); + btn100.setOnClickListener(v -> edtAmount.setText(btn100.getText().toString().trim())); + btnBack.setOnClickListener(v -> finish()); + + btnNextToSend.setOnClickListener(v -> { + InputMethodManager inputMethodManager = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(),0); + ProcessLoad(); + }); + + btnClose.setOnClickListener(v -> { + layoutProcess.setVisibility(View.VISIBLE); + layoutFinalizing.setVisibility(View.GONE); + }); + + btnSend.setOnClickListener(v -> Send()); + } + private void ProcessLoad(){ + Promo = "Regular Load "+edtAmount.getText().toString().trim(); + + if (TextUtils.isEmpty(edtAmount.getText())){ + Toast.makeText(SmartTNTActivity.this, "Input or Choose Amount", Toast.LENGTH_SHORT).show(); + } else { + textViewNumberFinal.setText(Number); + textViewPromo.setText(Promo); + + layoutProcess.setVisibility(View.GONE); + layoutFinalizing.setVisibility(View.VISIBLE); + } + + + } + + private void Send(){ + String SMS = Number+" "+edtAmount.getText().toString().trim(); + + String SENT = "SMS_SENT"; + String DELIVERED = "SMS_DELIVERED"; + + PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, + new Intent(SENT), 0); + + registerReceiver(new BroadcastReceiver(){ + @Override + public void onReceive(Context arg0, Intent arg1) { + switch (getResultCode()) + { + case Activity.RESULT_OK: + Toast.makeText(getBaseContext(), "Message Sent!", + Toast.LENGTH_SHORT).show(); + new Handler().postDelayed(() -> finish(), 1000); + break; + case SmsManager.RESULT_ERROR_GENERIC_FAILURE: + Toast.makeText(getBaseContext(), "Generic Failure", + Toast.LENGTH_SHORT).show(); + break; + case SmsManager.RESULT_ERROR_NO_SERVICE: + Toast.makeText(getBaseContext(), "No Service!", + Toast.LENGTH_SHORT).show(); + break; + case SmsManager.RESULT_ERROR_NULL_PDU: + Toast.makeText(getBaseContext(), "Null PDU", + Toast.LENGTH_SHORT).show(); + break; + case SmsManager.RESULT_ERROR_RADIO_OFF: + Toast.makeText(getBaseContext(), "Radio Off!", + Toast.LENGTH_SHORT).show(); + break; + } + } + }, new IntentFilter(SENT)); + + PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, + new Intent(DELIVERED), 0); + + registerReceiver(new BroadcastReceiver(){ + @Override + public void onReceive(Context arg0, Intent arg1) { + switch (getResultCode()) + { + case Activity.RESULT_OK: + Toast.makeText(getBaseContext(), "SMS Delivered!", + Toast.LENGTH_SHORT).show(); + break; + case Activity.RESULT_CANCELED: + Toast.makeText(getBaseContext(), "SMS Not Delivered!", + Toast.LENGTH_SHORT).show(); + break; + } + } + }, new IntentFilter(DELIVERED)); + + SmsManager sms = SmsManager.getDefault(); + sms.sendTextMessage(ServerNumber, null, SMS, sentPI, deliveredPI); + + } + + private void setAdapter(){ + promoLists = dbHandler.readPromo(telecom); + + AdapterPromoList adapter = new AdapterPromoList(promoLists); + RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); + recyclerViewPromoList.setLayoutManager(layoutManager); + recyclerViewPromoList.setItemAnimator(new DefaultItemAnimator()); + recyclerViewPromoList.setAdapter(adapter); + } + + public void clearData() { + AdapterPromoList adapter = new AdapterPromoList(promoLists); + promoLists.clear(); // clear list + adapter.notifyDataSetChanged(); // let your adapter know about the changes and reload view. + } + + @Override + public void onBackPressed() { + finish(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/aqp/mye_loading/adapter/AdapterPromoList.java b/app/src/main/java/com/aqp/mye_loading/adapter/AdapterPromoList.java new file mode 100644 index 0000000..9db2be9 --- /dev/null +++ b/app/src/main/java/com/aqp/mye_loading/adapter/AdapterPromoList.java @@ -0,0 +1,120 @@ +package com.aqp.mye_loading.adapter; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.aqp.mye_loading.other.DBHandler; +import com.aqp.mye_loading.model.PromoList; +import com.aqp.mye_loading.PromoProcessActivity; +import com.aqp.mye_loading.R; + +import java.util.ArrayList; + +public class AdapterPromoList extends RecyclerView.Adapter { + ArrayList promoLists; + DBHandler dbHandler; + String Number, telecom; + Intent intent; + + public AdapterPromoList(ArrayList promoLists) { + this.promoLists = promoLists; + } + + @NonNull + @Override + public AdapterPromoList.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_promo, parent,false); + return new MyViewHolder(view); + } + @Override + public void onBindViewHolder(@NonNull AdapterPromoList.MyViewHolder holder, int position) { + + String promocode = promoLists.get(position).getPromocode(); + String price = promoLists.get(position).getPrice(); + String sms = promoLists.get(position).getSms(); + String call = promoLists.get(position).getCall(); + String data = promoLists.get(position).getData(); + String validity = promoLists.get(position).getValidity(); + + holder.tvPromoCode.setText(promocode); + holder.tvPrice.setText(price); + holder.tvSms.setText(sms); + holder.tvCall.setText(call); + holder.tvData.setText(data); + holder.tvValidity.setText(validity); + + holder.btnDelete.setOnClickListener(view -> { + AlertDialog.Builder alertExit = new AlertDialog.Builder(holder.btnDelete.getContext()); + alertExit.setTitle("Delete Promo") + .setMessage("Are you sure, want to delete this promo? " + promoLists.get(position).getPromocode()) + .setCancelable(false) + .setPositiveButton("Yes", (dialog, which) -> { + dbHandler.deleteHandler(promoLists.get(position).getId()); + removeItem(position); + Toast.makeText(holder.btnDelete.getContext(), "Successfully Deleted!", Toast.LENGTH_SHORT).show(); + }) + .setNegativeButton("No", (dialog, which) -> { + + }); + AlertDialog dialog = alertExit.create(); + dialog.show(); + }); + + holder.layoutPromos.setOnClickListener(view -> { + + String SMS = "SMS: " + promoLists.get(position).getSms() + + "\nCall: " + promoLists.get(position).getCall() + + "\nInternet Data: " + promoLists.get(position).getData() + + "\nValidity: "+ promoLists.get(position).getValidity(); + + intent = new Intent(holder.layoutPromos.getContext(), PromoProcessActivity.class); + intent.putExtra("number", Number); + intent.putExtra("telecom", telecom); + intent.putExtra("promoCode", promoLists.get(position).getPromocode()); + intent.putExtra("price", promoLists.get(position).getPrice()); + intent.putExtra("description", SMS); + holder.layoutPromos.getContext().startActivity(intent); + }); + } + public void removeItem(int position) { + promoLists.remove(position); + notifyItemRemoved(position); + } + @Override + public int getItemCount() { + return promoLists.size(); + } + public class MyViewHolder extends RecyclerView.ViewHolder { + TextView tvPromoCode, tvPrice, tvSms, tvCall, tvData, tvValidity; + LinearLayout layoutPromos; + Button btnDelete; + public MyViewHolder(final View itemView) { + super(itemView); + layoutPromos = itemView.findViewById(R.id.layoutPromos); + tvPromoCode = itemView.findViewById(R.id.textViewPromoCode); + tvPrice = itemView.findViewById(R.id.textViewPrice); + tvSms = itemView.findViewById(R.id.textViewText); + tvCall = itemView.findViewById(R.id.textViewCall); + tvData = itemView.findViewById(R.id.textViewData); + tvValidity = itemView.findViewById(R.id.textViewValidity); + btnDelete = itemView.findViewById(R.id.btn_delete); + + dbHandler = new DBHandler(itemView.getContext()); + Intent intent = ((Activity) itemView.getContext()).getIntent(); + Number = intent.getStringExtra("number"); + telecom = intent.getStringExtra("telecom"); + } + } + +} diff --git a/app/src/main/java/com/aqp/mye_loading/model/PromoList.java b/app/src/main/java/com/aqp/mye_loading/model/PromoList.java new file mode 100644 index 0000000..e8a96ed --- /dev/null +++ b/app/src/main/java/com/aqp/mye_loading/model/PromoList.java @@ -0,0 +1,76 @@ +package com.aqp.mye_loading.model; + +public class PromoList { + private String promocode, price, sms, call, data, validity; + public int id; + + public PromoList(int id, String promocode, String price, String sms, String call, String data, String validity) { + this.id = id; + this.promocode = promocode; + this.price = price; + this.sms = sms; + this.call = call; + this.data = data; + this.validity = validity; + } + + public PromoList() { + + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getPromocode() { + return promocode; + } + + public void setPromocode(String promocode) { + this.promocode = promocode; + } + + public String getPrice() { + return price; + } + + public void setPrice(String price) { + this.price = price; + } + + public String getSms() { + return sms; + } + + public void setSms(String sms) { + this.sms = sms; + } + + public String getCall() { + return call; + } + + public void setCall(String call) { + this.call = call; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getValidity() { + return validity; + } + + public void setValidity(String validity) { + this.validity = validity; + } +} diff --git a/app/src/main/java/com/aqp/mye_loading/other/DBHandler.java b/app/src/main/java/com/aqp/mye_loading/other/DBHandler.java new file mode 100644 index 0000000..38633ca --- /dev/null +++ b/app/src/main/java/com/aqp/mye_loading/other/DBHandler.java @@ -0,0 +1,156 @@ +package com.aqp.mye_loading.other; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import com.aqp.mye_loading.model.PromoList; + +import java.util.ArrayList; +import java.util.Objects; + +public class DBHandler extends SQLiteOpenHelper { + + // creating a constant variables for our database. + // below variable is for our database name. + private static final String DB_NAME = "promodb"; + + // below int is our database version + private static final int DB_VERSION = 1; + + // below variable is for our table name. + private static final String TABLE_NAME = "mypromo"; + + // below variable is for our id column. + private static final String ID_COL = "id"; + + // below variable is for our name column + private static final String TELCO_COL = "telecom"; + private static final String PROMO_COL = "promocode"; + private static final String SMS_COL = "sms"; + private static final String CALL_COL = "call"; + private static final String DATA_COL = "data"; + private static final String VALIDITY_COL = "validity"; + private static final String PRICE_COL = "price"; + + // creating a constructor for our database handler. + public DBHandler(Context context) { + super(context, DB_NAME, null, DB_VERSION); + } + + // below method is for creating a database by running a sqlite query + @Override + public void onCreate(SQLiteDatabase db) { + // on below line we are creating + // an sqlite query and we are + // setting our column names + // along with their data types. + String query = "CREATE TABLE " + TABLE_NAME + " (" + + ID_COL + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + TELCO_COL + " TEXT," + + PROMO_COL + " TEXT," + + SMS_COL + " TEXT," + + CALL_COL + " TEXT," + + DATA_COL + " TEXT," + + VALIDITY_COL + " TEXT," + + PRICE_COL + " TEXT)"; + + // at last we are calling a exec sql + // method to execute above sql query + db.execSQL(query); + } + + // this method is use to add new course to our sqlite database. + public void addNewPromo(String telecom, String promoCode, String SMS, String Call, String Data, String Validity, String Price) { + + // on below line we are creating a variable for + // our sqlite database and calling writable method + // as we are writing data in our database. + SQLiteDatabase db = this.getWritableDatabase(); + + // on below line we are creating a + // variable for content values. + ContentValues values = new ContentValues(); + + // on below line we are passing all values + // along with its key and value pair. + values.put(TELCO_COL, telecom); + values.put(PROMO_COL, promoCode); + values.put(SMS_COL, SMS); + values.put(CALL_COL, Call); + values.put(DATA_COL, Data); + values.put(VALIDITY_COL, Validity); + values.put(PRICE_COL, Price); + + // after adding all values we are passing + // content values to our table. + db.insert(TABLE_NAME, null, values); + + // at last we are closing our + // database after adding database. + db.close(); + } + + public ArrayList readPromo(String telco) { + + SQLiteDatabase db = this.getReadableDatabase(); + + Cursor cursorPromo; + ArrayList courseModalArrayList = new ArrayList<>(); + + if (Objects.equals(telco, "TM")){ + cursorPromo = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE telecom = 'TM'", null); + } else if (Objects.equals(telco, "Globe")){ + cursorPromo = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE telecom = 'Globe'", null); + } else if (Objects.equals(telco, "TNT")){ + cursorPromo = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE telecom = 'TNT'", null); + } else if (Objects.equals(telco, "Smart")){ + cursorPromo = db.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE telecom = 'Smart'", null); + } else { + cursorPromo = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); + } + + if (cursorPromo.moveToFirst()) { + do { + courseModalArrayList.add(new PromoList(cursorPromo.getInt(0), + cursorPromo.getString(2), + cursorPromo.getString(7), + cursorPromo.getString(3), + cursorPromo.getString(4), + cursorPromo.getString(5), + cursorPromo.getString(6))); + } while (cursorPromo.moveToNext()); + } + + cursorPromo.close(); + return courseModalArrayList; + } + + public void deleteHandler(int ID) { + + String query = "Select*FROM " + TABLE_NAME + " WHERE " + ID_COL + " = '" + ID + "'"; + SQLiteDatabase db = this.getWritableDatabase(); + Cursor cursor = db.rawQuery(query, null); + PromoList promo = new PromoList(); + if (cursor.moveToFirst()) { + promo.setId(Integer.parseInt(cursor.getString(0))); + db.delete(TABLE_NAME, ID_COL + "=?", + new String[] { + String.valueOf(promo.getId()) + }); + System.out.println("DELETED!!"); + cursor.close(); + } + System.out.println("TEST!!"+query); + db.close(); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // this method is called to check if the table exists already. + db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); + onCreate(db); + } +} diff --git a/app/src/main/java/com/aqp/mye_loading/other/MessageListener.java b/app/src/main/java/com/aqp/mye_loading/other/MessageListener.java new file mode 100644 index 0000000..cdc9f88 --- /dev/null +++ b/app/src/main/java/com/aqp/mye_loading/other/MessageListener.java @@ -0,0 +1,9 @@ +package com.aqp.mye_loading.other; + +public interface MessageListener { + /** + * To call this method when new message received and send back + * @param message Message + */ + void messageReceived(String message); +} diff --git a/app/src/main/java/com/aqp/mye_loading/other/MessageReceiver.java b/app/src/main/java/com/aqp/mye_loading/other/MessageReceiver.java new file mode 100644 index 0000000..246fe7c --- /dev/null +++ b/app/src/main/java/com/aqp/mye_loading/other/MessageReceiver.java @@ -0,0 +1,29 @@ +package com.aqp.mye_loading.other; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.telephony.SmsMessage; + +import com.aqp.mye_loading.other.MessageListener; + +public class MessageReceiver extends BroadcastReceiver { + + private static MessageListener mListener; + + @Override + public void onReceive(Context context, Intent intent) { + Bundle data = intent.getExtras(); + Object[] pdus = (Object[]) data.get("pdus"); + for(int i=0; i + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/back_select.xml b/app/src/main/res/drawable/back_select.xml new file mode 100644 index 0000000..cc2f9c9 --- /dev/null +++ b/app/src/main/res/drawable/back_select.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/back_tabs.xml b/app/src/main/res/drawable/back_tabs.xml new file mode 100644 index 0000000..41c66b6 --- /dev/null +++ b/app/src/main/res/drawable/back_tabs.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/container.xml b/app/src/main/res/drawable/container.xml new file mode 100644 index 0000000..cd9ad4e --- /dev/null +++ b/app/src/main/res/drawable/container.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add.xml b/app/src/main/res/drawable/ic_add.xml new file mode 100644 index 0000000..0f3a211 --- /dev/null +++ b/app/src/main/res/drawable/ic_add.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_back.xml b/app/src/main/res/drawable/ic_back.xml new file mode 100644 index 0000000..05099f7 --- /dev/null +++ b/app/src/main/res/drawable/ic_back.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_call.xml b/app/src/main/res/drawable/ic_call.xml new file mode 100644 index 0000000..b072beb --- /dev/null +++ b/app/src/main/res/drawable/ic_call.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_code.xml b/app/src/main/res/drawable/ic_code.xml new file mode 100644 index 0000000..79e180c --- /dev/null +++ b/app/src/main/res/drawable/ic_code.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml new file mode 100644 index 0000000..c922063 --- /dev/null +++ b/app/src/main/res/drawable/ic_delete.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml new file mode 100644 index 0000000..c9027f0 --- /dev/null +++ b/app/src/main/res/drawable/ic_exit.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_number.xml b/app/src/main/res/drawable/ic_number.xml new file mode 100644 index 0000000..891f805 --- /dev/null +++ b/app/src/main/res/drawable/ic_number.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_person.xml b/app/src/main/res/drawable/ic_person.xml new file mode 100644 index 0000000..b1ff6a8 --- /dev/null +++ b/app/src/main/res/drawable/ic_person.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_price.xml b/app/src/main/res/drawable/ic_price.xml new file mode 100644 index 0000000..d61dd52 --- /dev/null +++ b/app/src/main/res/drawable/ic_price.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_sell.xml b/app/src/main/res/drawable/ic_sell.xml new file mode 100644 index 0000000..d61dd52 --- /dev/null +++ b/app/src/main/res/drawable/ic_sell.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_signal.xml b/app/src/main/res/drawable/ic_signal.xml new file mode 100644 index 0000000..41965e4 --- /dev/null +++ b/app/src/main/res/drawable/ic_signal.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_sms.xml b/app/src/main/res/drawable/ic_sms.xml new file mode 100644 index 0000000..818b48f --- /dev/null +++ b/app/src/main/res/drawable/ic_sms.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_time.xml b/app/src/main/res/drawable/ic_time.xml new file mode 100644 index 0000000..136a3db --- /dev/null +++ b/app/src/main/res/drawable/ic_time.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/rounded_btn.xml b/app/src/main/res/drawable/rounded_btn.xml new file mode 100644 index 0000000..09bda38 --- /dev/null +++ b/app/src/main/res/drawable/rounded_btn.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_add_promo.xml b/app/src/main/res/layout/activity_add_promo.xml new file mode 100644 index 0000000..7615ff8 --- /dev/null +++ b/app/src/main/res/layout/activity_add_promo.xml @@ -0,0 +1,221 @@ + + + + + + + +