diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5b3de8b..717091f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,7 +2,6 @@ - @@ -15,18 +14,29 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> - - - + + + + + + + @@ -34,13 +44,6 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/java/inc/padmal/ussdtrack/SMSReceiver.java b/app/src/main/java/inc/padmal/ussdtrack/Controllers/SMSReceiver.java similarity index 92% rename from app/src/main/java/inc/padmal/ussdtrack/SMSReceiver.java rename to app/src/main/java/inc/padmal/ussdtrack/Controllers/SMSReceiver.java index e853831..a827a27 100644 --- a/app/src/main/java/inc/padmal/ussdtrack/SMSReceiver.java +++ b/app/src/main/java/inc/padmal/ussdtrack/Controllers/SMSReceiver.java @@ -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. diff --git a/app/src/main/java/inc/padmal/ussdtrack/SmsListener.java b/app/src/main/java/inc/padmal/ussdtrack/Controllers/SmsListener.java similarity index 74% rename from app/src/main/java/inc/padmal/ussdtrack/SmsListener.java rename to app/src/main/java/inc/padmal/ussdtrack/Controllers/SmsListener.java index f4f958f..f0cb2d3 100644 --- a/app/src/main/java/inc/padmal/ussdtrack/SmsListener.java +++ b/app/src/main/java/inc/padmal/ussdtrack/Controllers/SmsListener.java @@ -1,4 +1,4 @@ -package inc.padmal.ussdtrack; +package inc.padmal.ussdtrack.Controllers; /** * Created by knight on 10/21/18. diff --git a/app/src/main/java/inc/padmal/ussdtrack/BackGrounds.java b/app/src/main/java/inc/padmal/ussdtrack/Helpers/BackGrounds.java similarity index 80% rename from app/src/main/java/inc/padmal/ussdtrack/BackGrounds.java rename to app/src/main/java/inc/padmal/ussdtrack/Helpers/BackGrounds.java index e800c6e..61a39a8 100644 --- a/app/src/main/java/inc/padmal/ussdtrack/BackGrounds.java +++ b/app/src/main/java/inc/padmal/ussdtrack/Helpers/BackGrounds.java @@ -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; @@ -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 { +public class BackGrounds extends AsyncTask { @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); } @@ -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); @@ -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); diff --git a/app/src/main/java/inc/padmal/ussdtrack/Plotter.java b/app/src/main/java/inc/padmal/ussdtrack/Helpers/Plotter.java similarity index 65% rename from app/src/main/java/inc/padmal/ussdtrack/Plotter.java rename to app/src/main/java/inc/padmal/ussdtrack/Helpers/Plotter.java index c8fb99c..8411957 100644 --- a/app/src/main/java/inc/padmal/ussdtrack/Plotter.java +++ b/app/src/main/java/inc/padmal/ussdtrack/Helpers/Plotter.java @@ -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. */ @@ -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(); } diff --git a/app/src/main/java/inc/padmal/ussdtrack/USSDService.java b/app/src/main/java/inc/padmal/ussdtrack/Helpers/USSDService.java similarity index 97% rename from app/src/main/java/inc/padmal/ussdtrack/USSDService.java rename to app/src/main/java/inc/padmal/ussdtrack/Helpers/USSDService.java index dfb814f..35aeb96 100644 --- a/app/src/main/java/inc/padmal/ussdtrack/USSDService.java +++ b/app/src/main/java/inc/padmal/ussdtrack/Helpers/USSDService.java @@ -1,4 +1,4 @@ -package inc.padmal.ussdtrack; +package inc.padmal.ussdtrack.Helpers; import android.accessibilityservice.AccessibilityService; import android.accessibilityservice.AccessibilityServiceInfo; diff --git a/app/src/main/java/inc/padmal/ussdtrack/HourAxisValueFormatter.java b/app/src/main/java/inc/padmal/ussdtrack/Models/HourAxisValueFormatter.java similarity index 97% rename from app/src/main/java/inc/padmal/ussdtrack/HourAxisValueFormatter.java rename to app/src/main/java/inc/padmal/ussdtrack/Models/HourAxisValueFormatter.java index 7d65311..2b9938b 100644 --- a/app/src/main/java/inc/padmal/ussdtrack/HourAxisValueFormatter.java +++ b/app/src/main/java/inc/padmal/ussdtrack/Models/HourAxisValueFormatter.java @@ -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; diff --git a/app/src/main/java/inc/padmal/ussdtrack/Medium.java b/app/src/main/java/inc/padmal/ussdtrack/Models/Medium.java similarity index 97% rename from app/src/main/java/inc/padmal/ussdtrack/Medium.java rename to app/src/main/java/inc/padmal/ussdtrack/Models/Medium.java index 49a26a6..9964e3b 100644 --- a/app/src/main/java/inc/padmal/ussdtrack/Medium.java +++ b/app/src/main/java/inc/padmal/ussdtrack/Models/Medium.java @@ -1,4 +1,4 @@ -package inc.padmal.ussdtrack; +package inc.padmal.ussdtrack.Models; import android.content.Context; diff --git a/app/src/main/java/inc/padmal/ussdtrack/MainActivity.java b/app/src/main/java/inc/padmal/ussdtrack/TrackingActivity.java similarity index 63% rename from app/src/main/java/inc/padmal/ussdtrack/MainActivity.java rename to app/src/main/java/inc/padmal/ussdtrack/TrackingActivity.java index 4aee90b..dcd5c3b 100644 --- a/app/src/main/java/inc/padmal/ussdtrack/MainActivity.java +++ b/app/src/main/java/inc/padmal/ussdtrack/TrackingActivity.java @@ -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; @@ -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("#"); @@ -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); @@ -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) { @@ -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; } @@ -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(); @@ -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(); @@ -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(); } } } diff --git a/app/src/main/res/drawable/ic_menu_camera.xml b/app/src/main/res/drawable/ic_menu_camera.xml new file mode 100644 index 0000000..0d9ea10 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_menu_gallery.xml b/app/src/main/res/drawable/ic_menu_gallery.xml new file mode 100644 index 0000000..f6872c4 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_gallery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_manage.xml b/app/src/main/res/drawable/ic_menu_manage.xml new file mode 100644 index 0000000..c1be60b --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_manage.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_menu_send.xml b/app/src/main/res/drawable/ic_menu_send.xml new file mode 100644 index 0000000..00c668c --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_send.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_share.xml b/app/src/main/res/drawable/ic_menu_share.xml new file mode 100644 index 0000000..a28fb9e --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_share.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_slideshow.xml b/app/src/main/res/drawable/ic_menu_slideshow.xml new file mode 100644 index 0000000..209aa64 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_slideshow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_settings.xml b/app/src/main/res/drawable/icon_settings.xml new file mode 100644 index 0000000..ace746c --- /dev/null +++ b/app/src/main/res/drawable/icon_settings.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml new file mode 100644 index 0000000..6d81870 --- /dev/null +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_tracking.xml b/app/src/main/res/layout/activity_tracking.xml new file mode 100644 index 0000000..fdaead1 --- /dev/null +++ b/app/src/main/res/layout/activity_tracking.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/app_bar_tracking.xml similarity index 89% rename from app/src/main/res/layout/activity_main.xml rename to app/src/main/res/layout/app_bar_tracking.xml index b5af6e9..6b21fd2 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/app_bar_tracking.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="inc.padmal.ussdtrack.MainActivity"> + tools:context="inc.padmal.ussdtrack.TrackingActivity"> - + diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_tracking.xml similarity index 95% rename from app/src/main/res/layout/content_main.xml rename to app/src/main/res/layout/content_tracking.xml index 52dd4e4..2d6fcb7 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_tracking.xml @@ -5,8 +5,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" - tools:context="inc.padmal.ussdtrack.MainActivity" - tools:showIn="@layout/activity_main"> + tools:context="inc.padmal.ussdtrack.TrackingActivity" + tools:showIn="@layout/activity_tracking"> + + + + + + + + + diff --git a/app/src/main/res/menu/activity_tracking_drawer.xml b/app/src/main/res/menu/activity_tracking_drawer.xml new file mode 100644 index 0000000..e041ea8 --- /dev/null +++ b/app/src/main/res/menu/activity_tracking_drawer.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_tracking.xml similarity index 90% rename from app/src/main/res/menu/menu_main.xml rename to app/src/main/res/menu/menu_tracking.xml index 9011066..44d5361 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_tracking.xml @@ -1,7 +1,7 @@ + tools:context="inc.padmal.ussdtrack.TrackingActivity"> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 59a0b0c..03c4820 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,3 +1,8 @@ 16dp + + 16dp + 16dp + 8dp + 176dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index da70b6f..43f491c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,4 +4,13 @@ Padmal\'s stuff Review Clean + TrackingActivity + + Open navigation drawer + Close navigation drawer + + You are going to delete all the chart data. Are you sure? + Yes + No + Error in parsing diff --git a/upload-apk.sh b/upload-apk.sh index 3c88db7..23f7b8b 100644 --- a/upload-apk.sh +++ b/upload-apk.sh @@ -10,6 +10,9 @@ git config --global user.name "Travis CI" #clone the repository git clone --quiet --branch=apk https://CloudyPadmal:$GITHUB_API_KEY@github.com/CloudyPadmal/USSDTrack apk > /dev/null +echo "List of files in current directory" +ls -la + cd apk \cp -r ../app/build/outputs/apk/*/**.apk . @@ -22,10 +25,10 @@ if [ "$TRAVIS_BRANCH" == "$PUBLISH_BRANCH" ]; then echo "Push to main branch detected, generating apk..." # Rename apks with dev prefixes mv app-debug.apk app-dev-debug.apk - mv app-release-unsigned.apk app-dev-release.apk + rm -rf app-release-unsigned.apk # Push generated apk files to apk branch git checkout apk git add -A git commit -am "Travis build pushed [Padmal]" git push origin apk --force --quiet> /dev/null -fi \ No newline at end of file +fi