Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 16 additions & 13 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="inc.padmal.ussdtrack">


<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
Expand All @@ -15,32 +14,36 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<service android:name=".USSDService"
<service
android:name=".Helpers.USSDService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="android.accessibilityservice"

<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/config_service" />
</service>

<receiver
android:name=".Controllers.SMSReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:name=".TrackingActivity"
android:label="@string/title_activity_tracking"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<receiver android:name=".SMSReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package inc.padmal.ussdtrack;
package inc.padmal.ussdtrack.Controllers;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

import inc.padmal.ussdtrack.Controllers.SmsListener;

/**
* Created by knight on 10/21/18.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package inc.padmal.ussdtrack;
package inc.padmal.ussdtrack.Controllers;

/**
* Created by knight on 10/21/18.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package inc.padmal.ussdtrack;
package inc.padmal.ussdtrack.Helpers;

import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.AsyncTask;
import android.widget.TextView;
import android.widget.Toast;

import com.github.mikephil.charting.charts.LineChart;
Expand All @@ -16,19 +17,27 @@
import java.util.Iterator;
import java.util.List;

import inc.padmal.ussdtrack.Models.HourAxisValueFormatter;
import inc.padmal.ussdtrack.Models.Medium;

/**
* Created by knight on 10/23/18.
*/

class BackGrounds extends AsyncTask<Medium, Void, LineData> {
public class BackGrounds extends AsyncTask<Medium, Void, LineData> {

@SuppressLint("StaticFieldLeak")
private LineChart chart;
private TextView tv;
private boolean mode;
private String lastValue = "";

private HourAxisValueFormatter axisFormatter;

BackGrounds(LineChart chart) {
public BackGrounds(LineChart chart, TextView tv, boolean mode) {
this.chart = chart;
this.tv = tv;
this.mode = mode;
axisFormatter = new HourAxisValueFormatter(0);
}

Expand Down Expand Up @@ -64,6 +73,8 @@ protected LineData doInBackground(Medium... media) {
i++;
}

this.lastValue = String.valueOf(entries.get(entries.size() - 1).getY());

LineDataSet dataSet = new LineDataSet(entries, medium.getLabel());
dataSet.setColor(medium.getColor());
dataSet.setCircleColor(Color.BLACK);
Expand All @@ -75,6 +86,8 @@ protected LineData doInBackground(Medium... media) {
@Override
protected void onPostExecute(LineData data) {
super.onPostExecute(data);
String v = (mode ? "Balance Rs. " : "Data ") + lastValue + (!mode ? " MB" : "");
tv.setText(v);
chart.getXAxis().setValueFormatter(axisFormatter);
chart.getDescription().setEnabled(false);
chart.setData(data);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package inc.padmal.ussdtrack;
package inc.padmal.ussdtrack.Helpers;

import android.content.Context;
import android.widget.TextView;

import com.github.mikephil.charting.charts.LineChart;

import org.json.JSONException;
import org.json.JSONObject;

import inc.padmal.ussdtrack.Models.Medium;

/**
* Created by knight on 10/22/18.
*/
Expand All @@ -19,17 +22,19 @@ public static Plotter getInstance() {
return ourInstance;
}

public void plotChart(Context context, JSONObject i, LineChart chart, String label, int color) {
public void plotChart(Context context, JSONObject i, LineChart chart, String label,
int color, TextView tv, boolean mode) {
Medium medium = new Medium(context, i, chart, label, color);
BackGrounds backGrounds = new BackGrounds(chart);
BackGrounds backGrounds = new BackGrounds(chart, tv, mode);
backGrounds.execute(medium);
}

public void loadCharts(Context context, LineChart chart, String data, int color, String label) {
public void loadCharts(Context context, LineChart chart, String data, int color, String label,
TextView tv, boolean mode) {
if (!data.isEmpty()) {
try {
JSONObject j = new JSONObject(data);
plotChart(context, j, chart, label, color);
plotChart(context, j, chart, label, color, tv, mode);
} catch (JSONException e) {
e.printStackTrace();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package inc.padmal.ussdtrack;
package inc.padmal.ussdtrack.Helpers;

import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package inc.padmal.ussdtrack;
package inc.padmal.ussdtrack.Models;

import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package inc.padmal.ussdtrack;
package inc.padmal.ussdtrack.Models;

import android.content.Context;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,13 @@
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
Expand All @@ -27,7 +32,13 @@
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {
import inc.padmal.ussdtrack.Controllers.SMSReceiver;
import inc.padmal.ussdtrack.Controllers.SmsListener;
import inc.padmal.ussdtrack.Helpers.Plotter;
import inc.padmal.ussdtrack.Helpers.USSDService;

public class TrackingActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {

LineChart chartMoney, chartData;
String ussd = "*100" + Uri.encode("#");
Expand All @@ -38,10 +49,19 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setContentView(R.layout.activity_tracking);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);

chartMoney = findViewById(R.id.chartMoney);
chartData = findViewById(R.id.chartData);

Expand All @@ -61,18 +81,16 @@ protected void onCreate(Bundle savedInstanceState) {
@Override
public void messageReceived(String messageText) {
processData(Logs.getString("DATA", ""),
messageText, chartData, "DATA", "Data", Color.RED);
setCurrentValues(tvData, chartData, "Data", false);
setCurrentValues(tvMoney, chartMoney, "Money", true);
messageText, chartData, "DATA", "Data", Color.RED, tvData, false);
}
});

makeTheCall();

plotter.loadCharts(getApplicationContext(), chartMoney,
Logs.getString("MONEY", ""), Color.BLUE, "Money");
Logs.getString("MONEY", ""), Color.BLUE, "Money", tvMoney, true);
plotter.loadCharts(getApplicationContext(), chartData,
Logs.getString("DATA", ""), Color.RED, "Data");
Logs.getString("DATA", ""), Color.RED, "Data", tvData, false);
}

private void setCurrentValues(TextView t, LineChart c, String l, boolean mode) {
Expand All @@ -89,9 +107,19 @@ private void makeTheCall() {
}
}

@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
getMenuInflater().inflate(R.menu.menu_tracking, menu);
return true;
}

Expand All @@ -104,8 +132,8 @@ public boolean onOptionsItemSelected(MenuItem item) {
case R.id.action_clean:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder
.setMessage("You are going to delete all the chart data. Are you sure?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
.setMessage(getString(R.string.delete_confirmation))
.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Logs.edit().clear().apply();
chartMoney.invalidate();
Expand All @@ -114,7 +142,7 @@ public void onClick(DialogInterface dialog, int id) {
chartData.clear();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
.setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {/**/}
})
.create().show();
Expand All @@ -126,32 +154,62 @@ public void onClick(DialogInterface dialog, int id) {/**/}
return true;
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {

switch (item.getItemId()) {
case R.id.nav_settings:
break;
case R.id.nav_camera:
break;
case R.id.nav_gallery:
break;
case R.id.nav_slideshow:
break;
case R.id.nav_manage:
break;
case R.id.nav_share:
break;
case R.id.nav_send:
break;
default:
break;
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}

private BroadcastReceiver USSDReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("USSD");
processData(Logs.getString("MONEY", ""),
message.substring(message.indexOf("Rs.") + 4, message.indexOf("will") - 1),
chartMoney, "MONEY", "Money", Color.BLUE);
chartMoney, "MONEY", "Money", Color.BLUE, tvMoney, true);
}
};

private void processData(String JStr, String msg, LineChart chart, String Key, String label, int color) {
private void processData(String JStr, String msg, LineChart chart, String Key, String label,
int color, TextView tv, boolean mode) {
try {
JSONObject jsonObject = new JSONObject(JStr);
jsonObject.put(String.valueOf(System.currentTimeMillis()), msg);
String updateJSONString = jsonObject.toString();
Logs.edit().putString(Key, updateJSONString).apply();
plotter.plotChart(getApplicationContext(), jsonObject, chart, label, color);
plotter.plotChart(getApplicationContext(), jsonObject, chart, label,
color, tv, mode);
} catch (JSONException e) {
JSONObject FirstJSON = new JSONObject();
try {
FirstJSON.put(String.valueOf(System.currentTimeMillis()), msg);
String updateJSONString = FirstJSON.toString();
Logs.edit().putString(Key, updateJSONString).apply();
plotter.plotChart(getApplicationContext(), FirstJSON, chart, label, color);
plotter.plotChart(getApplicationContext(), FirstJSON, chart, label,
color, tv, mode);
} catch (JSONException j) {
Toast.makeText(getApplicationContext(), "Error in parsing", Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), getString(R.string.error_parse), Toast.LENGTH_LONG).show();
}
}
}
Expand Down
12 changes: 12 additions & 0 deletions app/src/main/res/drawable/ic_menu_camera.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0" />
<path
android:fillColor="#FF000000"
android:pathData="M9,2L7.17,4H4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2H9zm3,15c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z" />
</vector>
Loading