Skip to content

Commit

Permalink
close: #60
Browse files Browse the repository at this point in the history
Show percentage of data usage as notification icon
  • Loading branch information
itsdrnoob committed Nov 6, 2022
1 parent 5306aa5 commit 824f931
Show file tree
Hide file tree
Showing 103 changed files with 1,560 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -840,6 +840,13 @@ else if (dataReset.getCheckedRadioButtonId() == R.id.custom_reset) {
Intent intent = new Intent(getContext(), DataUsageWidget.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);

boolean updateNotification = PreferenceManager.getDefaultSharedPreferences(getContext()).getBoolean("setup_notification", false);
if (updateNotification) {
Intent notificationIntent = new Intent(getContext(), NotificationUpdater.class);
getContext().sendBroadcast(notificationIntent);
}

getContext().sendBroadcast(intent);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,16 @@
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.graphics.drawable.IconCompat;
import androidx.preference.PreferenceManager;

import com.drnoob.datamonitor.R;
import com.drnoob.datamonitor.ui.activities.MainActivity;

import java.text.ParseException;

import static com.drnoob.datamonitor.core.Values.DATA_LIMIT;
import static com.drnoob.datamonitor.core.Values.DATA_TYPE;
import static com.drnoob.datamonitor.core.Values.DATA_USAGE_NOTIFICATION_CHANNEL_ID;
import static com.drnoob.datamonitor.core.Values.DATA_USAGE_NOTIFICATION_ID;
import static com.drnoob.datamonitor.core.Values.DATA_USAGE_NOTIFICATION_NOTIFICATION_GROUP;
Expand Down Expand Up @@ -76,31 +79,37 @@ public int onStartCommand(Intent intent, int flags, int startId) {
public void onCreate() {
super.onCreate();

mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
mUpdaterIntent = new Intent(this, NotificationUpdater.class);
mUpdaterPendingIntent = PendingIntent.getBroadcast(this, 0, mUpdaterIntent,
PendingIntent.FLAG_ONE_SHOT|PendingIntent.FLAG_IMMUTABLE);

Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this,
DATA_USAGE_NOTIFICATION_CHANNEL_ID);
builder.setSmallIcon(R.drawable.ic_mobile_data);
builder.setOngoing(true);
builder.setPriority(NotificationCompat.PRIORITY_LOW);
builder.setContentTitle(getString(R.string.title_data_usage_notification, getString(R.string.body_data_usage_notification_loading)));
builder.setContentText(getString(R.string.body_data_usage_notification_loading));
builder.setShowWhen(false);
builder.setVisibility(NotificationCompat.VISIBILITY_SECRET);
builder.setContentIntent(pendingIntent);
builder.setAutoCancel(false);
builder.setGroup(DATA_USAGE_NOTIFICATION_NOTIFICATION_GROUP);

startForeground(DATA_USAGE_NOTIFICATION_ID, builder.build());
startUpdater(getApplicationContext());

mAlarmManager.setExact(AlarmManager.RTC, System.currentTimeMillis(), mUpdaterPendingIntent);
boolean isChecked = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("setup_notification", false);
if (isChecked) {
mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
mUpdaterIntent = new Intent(this, NotificationUpdater.class);
mUpdaterPendingIntent = PendingIntent.getBroadcast(this, 0, mUpdaterIntent,
PendingIntent.FLAG_ONE_SHOT|PendingIntent.FLAG_IMMUTABLE);

Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this,
DATA_USAGE_NOTIFICATION_CHANNEL_ID);
builder.setSmallIcon(R.drawable.ic_mobile_data);
builder.setOngoing(true);
builder.setPriority(NotificationCompat.PRIORITY_LOW);
builder.setContentTitle(getString(R.string.title_data_usage_notification, getString(R.string.body_data_usage_notification_loading)));
builder.setContentText(getString(R.string.body_data_usage_notification_loading));
builder.setShowWhen(false);
builder.setVisibility(NotificationCompat.VISIBILITY_SECRET);
builder.setContentIntent(pendingIntent);
builder.setAutoCancel(false);
builder.setGroup(DATA_USAGE_NOTIFICATION_NOTIFICATION_GROUP);

startForeground(DATA_USAGE_NOTIFICATION_ID, builder.build());
startUpdater(getApplicationContext());

mAlarmManager.setExact(AlarmManager.RTC, System.currentTimeMillis(), mUpdaterPendingIntent);
}
else {
onDestroy();
}
}

@Override
Expand Down Expand Up @@ -131,6 +140,7 @@ public static class NotificationUpdater extends BroadcastReceiver {
private static final String TAG = NotificationUpdater.class.getSimpleName();
private String mobileDataUsage, wifiDataUsage, totalDataUsage;
private Long[] mobile, wifi;
private Boolean showPercent;

@Override
public void onReceive(Context context, Intent intent) {
Expand All @@ -141,6 +151,10 @@ public void onReceive(Context context, Intent intent) {

if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean("setup_notification", true)) {

Float dataLimit = PreferenceManager.getDefaultSharedPreferences(context).getFloat(DATA_LIMIT, -1);
showPercent = dataLimit > 0;
Float mobileMB;
int percent = 0;
try {
mobile = getDeviceMobileDataUsage(context, SESSION_TODAY, 1);
String[] mobileData = formatData(mobile[0], mobile[1]);
Expand All @@ -157,6 +171,21 @@ public void onReceive(Context context, Intent intent) {
mobileData[2]);
wifiDataUsage = context.getResources().getString(R.string.notification_wifi_data_usage,
wifiData[2]);

if (showPercent) {
if (mobileData[2].split(" ")[1].equalsIgnoreCase("GB")) {
mobileMB = Float.parseFloat(mobileData[2].split(" ")[0]) * 1024;
}
else {
mobileMB = Float.parseFloat(mobileData[2].split(" ")[0]);
}
if (mobileMB > dataLimit) {
percent = 100;
}
else {
percent = (int) (mobileMB / dataLimit * 100);
}
}
} catch (ParseException e) {
e.printStackTrace();
} catch (RemoteException e) {
Expand All @@ -173,13 +202,22 @@ public void onReceive(Context context, Intent intent) {
Boolean showWifi = PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean(NOTIFICATION_WIFI, true);


Intent activityIntent = new Intent(context, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, activityIntent, PendingIntent.FLAG_IMMUTABLE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context,
DATA_USAGE_NOTIFICATION_CHANNEL_ID);
builder.setSmallIcon(R.drawable.ic_mobile_data);
if (showPercent) {
String iconPrefix = "ic_data_usage_percent_";
String iconSuffix = String.valueOf(percent);
String iconName = iconPrefix + iconSuffix;
int iconResID = context.getResources().getIdentifier(iconName , "drawable", context.getPackageName());
IconCompat icon = IconCompat.createWithResource(context, iconResID);
builder.setSmallIcon(icon);
}
else {
builder.setSmallIcon(R.drawable.ic_mobile_data);
}
builder.setOngoing(true);
builder.setPriority(NotificationCompat.PRIORITY_LOW);
// builder.setContentTitle(context.getString(R.string.title_data_usage_notification));
Expand Down
12 changes: 12 additions & 0 deletions app/src/main/res/drawable/ic_data_usage_percent_0.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="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M33.9196,36.5068V35.9151C33.9196,35.4658 34.0172,35.053 34.2125,34.6767C34.4115,34.2968 34.6988,33.9936 35.0742,33.7671C35.4535,33.537 35.9153,33.4219 36.4598,33.4219C37.0118,33.4219 37.4755,33.5352 37.851,33.7616C38.2302,33.9881 38.5156,34.2913 38.7071,34.6712C38.9024,35.0475 39,35.4621 39,35.9151V36.5068C39,36.9562 38.9024,37.3708 38.7071,37.7507C38.5119,38.1269 38.2246,38.4283 37.8454,38.6548C37.4661,38.8849 37.0043,39 36.4598,39C35.9078,39 35.4441,38.8849 35.0686,38.6548C34.6931,38.4283 34.4077,38.1269 34.2125,37.7507C34.0172,37.3708 33.9196,36.9562 33.9196,36.5068ZM35.5586,35.9151V36.5068C35.5586,36.7662 35.6225,37.011 35.7501,37.2411C35.8815,37.4712 36.1181,37.5863 36.4598,37.5863C36.8015,37.5863 37.0343,37.4731 37.1582,37.2466C37.2859,37.0201 37.3497,36.7735 37.3497,36.5068V35.9151C37.3497,35.6484 37.2896,35.4 37.1695,35.1699C37.0493,34.9397 36.8128,34.8247 36.4598,34.8247C36.1219,34.8247 35.8872,34.9397 35.7558,35.1699C35.6243,35.4 35.5586,35.6484 35.5586,35.9151ZM28,30.0849V29.4932C28,29.0402 28.0995,28.6256 28.2985,28.2493C28.4975,27.8694 28.7848,27.5662 29.1603,27.3397C29.5395,27.1132 29.9976,27 30.5346,27C31.0903,27 31.5559,27.1132 31.9314,27.3397C32.3069,27.5662 32.5923,27.8694 32.7875,28.2493C32.9828,28.6256 33.0804,29.0402 33.0804,29.4932V30.0849C33.0804,30.5379 32.9809,30.9525 32.7819,31.3288C32.5866,31.705 32.2994,32.0064 31.9201,32.2329C31.5446,32.4557 31.0828,32.5671 30.5346,32.5671C29.9863,32.5671 29.5226,32.4539 29.1434,32.2274C28.7679,31.9973 28.4825,31.6959 28.2873,31.3233C28.0958,30.947 28,30.5342 28,30.0849ZM29.6503,29.4932V30.0849C29.6503,30.3516 29.7141,30.5982 29.8418,30.8247C29.9732,31.0511 30.2041,31.1644 30.5346,31.1644C30.88,31.1644 31.1147,31.0511 31.2386,30.8247C31.3663,30.5982 31.4301,30.3516 31.4301,30.0849V29.4932C31.4301,29.2265 31.37,28.9781 31.2499,28.7479C31.1297,28.5178 30.8913,28.4027 30.5346,28.4027C30.2004,28.4027 29.9694,28.5196 29.8418,28.7534C29.7141,28.9872 29.6503,29.2338 29.6503,29.4932ZM28.7435,38.611L36.6738,27.389H38.1495L30.2191,38.611H28.7435Z"
android:fillColor="#000000"/>
<path
android:pathData="M16,39C14.1282,38.9906 12.5176,38.3918 11.1681,37.2037C9.8259,36.0156 8.7921,34.2947 8.0666,32.041C7.3484,29.7874 6.9928,27.0764 7.0001,23.9081C7.0001,20.7492 7.3592,18.057 8.0775,15.8317C8.803,13.6063 9.8368,11.9137 11.179,10.7539C12.5285,9.5846 14.1355,9 16,9C17.8645,9 19.4679,9.5846 20.8101,10.7539C22.1595,11.9231 23.197,13.6205 23.9225,15.8458C24.648,18.0618 25.0071,20.7492 24.9999,23.9081C24.9999,27.0858 24.6371,29.8015 23.9116,32.0552C23.1934,34.3088 22.1632,36.0297 20.821,37.2178C19.4788,38.4059 17.8718,39 16,39ZM16,33.9222C17.2769,33.9222 18.2962,33.0877 19.058,31.4187C19.8198,29.7496 20.197,27.2461 20.1898,23.9081C20.1898,21.711 20.0157,19.8817 19.6674,18.4201C19.3264,16.9585 18.8404,15.86 18.2092,15.1245C17.5852,14.389 16.8488,14.0212 16,14.0212C14.7304,14.0212 13.7147,14.8463 12.9529,16.4965C12.1911,18.1466 11.8066,20.6172 11.7993,23.9081C11.7993,26.1334 11.9698,27.991 12.3108,29.4809C12.659,30.9613 13.1488,32.074 13.78,32.819C14.4111,33.5545 15.1512,33.9222 16,33.9222Z"
android:fillColor="#000000"/>
</vector>
12 changes: 12 additions & 0 deletions app/src/main/res/drawable/ic_data_usage_percent_1.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="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M33.9196,36.5068V35.9151C33.9196,35.4658 34.0172,35.053 34.2125,34.6767C34.4115,34.2968 34.6988,33.9936 35.0742,33.7671C35.4535,33.537 35.9153,33.4219 36.4598,33.4219C37.0118,33.4219 37.4755,33.5352 37.851,33.7616C38.2302,33.9881 38.5156,34.2913 38.7071,34.6712C38.9024,35.0475 39,35.4621 39,35.9151V36.5068C39,36.9562 38.9024,37.3708 38.7071,37.7507C38.5119,38.1269 38.2246,38.4283 37.8454,38.6548C37.4661,38.8849 37.0043,39 36.4598,39C35.9078,39 35.4441,38.8849 35.0686,38.6548C34.6931,38.4283 34.4077,38.1269 34.2125,37.7507C34.0172,37.3708 33.9196,36.9562 33.9196,36.5068ZM35.5586,35.9151V36.5068C35.5586,36.7662 35.6225,37.011 35.7501,37.2411C35.8815,37.4712 36.1181,37.5863 36.4598,37.5863C36.8015,37.5863 37.0343,37.4731 37.1582,37.2466C37.2859,37.0201 37.3497,36.7735 37.3497,36.5068V35.9151C37.3497,35.6484 37.2896,35.4 37.1695,35.1699C37.0493,34.9397 36.8128,34.8247 36.4598,34.8247C36.1219,34.8247 35.8872,34.9397 35.7558,35.1699C35.6243,35.4 35.5586,35.6484 35.5586,35.9151ZM28,30.0849V29.4932C28,29.0402 28.0995,28.6256 28.2985,28.2493C28.4975,27.8694 28.7848,27.5662 29.1603,27.3397C29.5395,27.1132 29.9976,27 30.5346,27C31.0903,27 31.5559,27.1132 31.9314,27.3397C32.3069,27.5662 32.5923,27.8694 32.7875,28.2493C32.9828,28.6256 33.0804,29.0402 33.0804,29.4932V30.0849C33.0804,30.5379 32.9809,30.9525 32.7819,31.3288C32.5866,31.705 32.2994,32.0064 31.9201,32.2329C31.5446,32.4557 31.0828,32.5671 30.5346,32.5671C29.9863,32.5671 29.5226,32.4539 29.1434,32.2274C28.7679,31.9973 28.4825,31.6959 28.2873,31.3233C28.0958,30.947 28,30.5342 28,30.0849ZM29.6503,29.4932V30.0849C29.6503,30.3516 29.7141,30.5982 29.8418,30.8247C29.9732,31.0511 30.2041,31.1644 30.5346,31.1644C30.88,31.1644 31.1147,31.0511 31.2386,30.8247C31.3663,30.5982 31.4301,30.3516 31.4301,30.0849V29.4932C31.4301,29.2265 31.37,28.9781 31.2499,28.7479C31.1297,28.5178 30.8913,28.4027 30.5346,28.4027C30.2004,28.4027 29.9694,28.5196 29.8418,28.7534C29.7141,28.9872 29.6503,29.2338 29.6503,29.4932ZM28.7435,38.611L36.6738,27.389H38.1495L30.2191,38.611H28.7435Z"
android:fillColor="#000000"/>
<path
android:pathData="M21,9V39H16.2626V15.0205H16.1313L11,19.3271V13.7021L16.547,9H21Z"
android:fillColor="#000000"/>
</vector>
15 changes: 15 additions & 0 deletions app/src/main/res/drawable/ic_data_usage_percent_10.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M11.6974,9.396V38.3635H6.6296V15.2093H6.4892L1,19.3678V13.9364L6.9339,9.396H11.6974Z"
android:fillColor="#000000"/>
<path
android:pathData="M24.3207,39C22.3076,38.9906 20.5754,38.3918 19.1242,37.2037C17.6807,36.0156 16.5688,34.2947 15.7885,32.041C15.0161,29.7874 14.6337,27.0764 14.6415,23.9081C14.6415,20.7492 15.0278,18.057 15.8002,15.8317C16.5805,13.6063 17.6924,11.9137 19.1359,10.7539C20.5872,9.5846 22.3154,9 24.3207,9C26.326,9 28.0504,9.5846 29.4939,10.7539C30.9452,11.9231 32.0609,13.6205 32.8412,15.8458C33.6215,18.0618 34.0077,20.7492 33.9999,23.9081C33.9999,27.0858 33.6098,29.8015 32.8295,32.0552C32.057,34.3088 30.9491,36.0297 29.5056,37.2178C28.0621,38.4059 26.3338,39 24.3207,39ZM24.3207,33.9222C25.694,33.9222 26.7902,33.0877 27.6095,31.4187C28.4288,29.7496 28.8345,27.2461 28.8267,23.9081C28.8267,21.711 28.6395,19.8817 28.2649,18.4201C27.8982,16.9585 27.3754,15.86 26.6966,15.1245C26.0256,14.389 25.2336,14.0212 24.3207,14.0212C22.9553,14.0212 21.8629,14.8463 21.0436,16.4965C20.2243,18.1466 19.8108,20.6172 19.803,23.9081C19.803,26.1334 19.9863,27.991 20.3531,29.4809C20.7276,30.9613 21.2543,32.074 21.9331,32.819C22.6119,33.5545 23.4078,33.9222 24.3207,33.9222Z"
android:fillColor="#000000"/>
<path
android:pathData="M42.9196,36.5068V35.9151C42.9196,35.4658 43.0172,35.053 43.2125,34.6767C43.4115,34.2968 43.6988,33.9936 44.0742,33.7671C44.4535,33.537 44.9153,33.4219 45.4598,33.4219C46.0118,33.4219 46.4755,33.5352 46.851,33.7616C47.2302,33.9881 47.5156,34.2913 47.7071,34.6712C47.9024,35.0475 48,35.4621 48,35.9151V36.5068C48,36.9562 47.9024,37.3708 47.7071,37.7507C47.5119,38.1269 47.2246,38.4283 46.8454,38.6548C46.4661,38.8849 46.0043,39 45.4598,39C44.9078,39 44.4441,38.8849 44.0686,38.6548C43.6931,38.4283 43.4077,38.1269 43.2125,37.7507C43.0172,37.3708 42.9196,36.9562 42.9196,36.5068ZM44.5586,35.9151V36.5068C44.5586,36.7662 44.6225,37.011 44.7501,37.2411C44.8815,37.4712 45.1181,37.5863 45.4598,37.5863C45.8015,37.5863 46.0343,37.4731 46.1582,37.2466C46.2859,37.0201 46.3497,36.7735 46.3497,36.5068V35.9151C46.3497,35.6484 46.2896,35.4 46.1695,35.1699C46.0493,34.9397 45.8128,34.8247 45.4598,34.8247C45.1219,34.8247 44.8872,34.9397 44.7558,35.1699C44.6243,35.4 44.5586,35.6484 44.5586,35.9151ZM37,30.0849V29.4932C37,29.0402 37.0995,28.6256 37.2985,28.2493C37.4975,27.8694 37.7848,27.5662 38.1603,27.3397C38.5395,27.1132 38.9976,27 39.5346,27C40.0903,27 40.5559,27.1132 40.9314,27.3397C41.3069,27.5662 41.5923,27.8694 41.7875,28.2493C41.9828,28.6256 42.0804,29.0402 42.0804,29.4932V30.0849C42.0804,30.5379 41.9809,30.9525 41.7819,31.3288C41.5866,31.705 41.2994,32.0064 40.9201,32.2329C40.5446,32.4557 40.0828,32.5671 39.5346,32.5671C38.9863,32.5671 38.5226,32.4539 38.1434,32.2274C37.7679,31.9973 37.4825,31.6959 37.2873,31.3233C37.0958,30.947 37,30.5342 37,30.0849ZM38.6503,29.4932V30.0849C38.6503,30.3516 38.7141,30.5982 38.8418,30.8247C38.9732,31.0511 39.2041,31.1644 39.5346,31.1644C39.88,31.1644 40.1147,31.0511 40.2386,30.8247C40.3663,30.5982 40.4301,30.3516 40.4301,30.0849V29.4932C40.4301,29.2265 40.37,28.9781 40.2499,28.7479C40.1297,28.5178 39.8913,28.4027 39.5346,28.4027C39.2004,28.4027 38.9694,28.5196 38.8418,28.7534C38.7141,28.9872 38.6503,29.2338 38.6503,29.4932ZM37.7435,38.611L45.6738,27.389H47.1495L39.2191,38.611H37.7435Z"
android:fillColor="#000000"/>
</vector>
Loading

0 comments on commit 824f931

Please sign in to comment.