Loading demoapp/build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -33,7 +33,7 @@ android { dependencies { implementation project(':privacymoduletrackers') implementation 'foundation.e:privacymodule.api:0.5.0-dev' implementation 'foundation.e:privacymodule.api:1.0.0' implementation 'com.google.code.gson:gson:2.9.0' Loading privacymoduletrackers/build.gradle +2 −2 Original line number Diff line number Diff line Loading @@ -10,7 +10,7 @@ android { targetSdkVersion 30 versionCode 1 versionName "0.5.1" versionName "0.6.0" } buildTypes { Loading @@ -26,7 +26,7 @@ android { } } dependencies{ implementation 'foundation.e:privacymodule.api:0.6.0' implementation 'foundation.e:privacymodule.api:1.0.0' } publishing { Loading privacymoduletrackers/src/main/java/foundation/e/privacymodules/trackers/api/TrackTrackersPrivacyModule.java +7 −6 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import foundation.e.privacymodules.trackers.ITrackTrackersPrivacyModule; import foundation.e.privacymodules.trackers.Tracker; import foundation.e.privacymodules.trackers.data.StatsRepository; import foundation.e.privacymodules.trackers.data.TrackersRepository; import kotlin.Pair; public class TrackTrackersPrivacyModule implements ITrackTrackersPrivacyModule { Loading Loading @@ -69,18 +70,18 @@ public class TrackTrackersPrivacyModule implements ITrackTrackersPrivacyModule { @NonNull @Override public List<Integer> getPastDayTrackersCalls() { return statsRepository.getTrackersLeaksOnPeriod(24, ChronoUnit.HOURS); public List<Pair<Integer, Integer>> getPastDayTrackersCalls() { return statsRepository.getTrackersCallsOnPeriod(24, ChronoUnit.HOURS); } @Override public List<Integer> getPastMonthTrackersCalls() { return statsRepository.getTrackersLeaksOnPeriod(30, ChronoUnit.DAYS); public List<Pair<Integer, Integer>> getPastMonthTrackersCalls() { return statsRepository.getTrackersCallsOnPeriod(30, ChronoUnit.DAYS); } @Override public List<Integer> getPastYearTrackersCalls() { return statsRepository.getTrackersLeaksOnPeriod(12, ChronoUnit.MONTHS); public List<Pair<Integer, Integer>> getPastYearTrackersCalls() { return statsRepository.getTrackersCallsOnPeriod(12, ChronoUnit.MONTHS); } @Override Loading privacymoduletrackers/src/main/java/foundation/e/privacymodules/trackers/data/StatsDatabase.java +14 −15 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.provider.BaseColumns; import android.util.Log; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; Loading @@ -39,7 +38,7 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import foundation.e.privacymodules.trackers.Tracker; import foundation.e.privacymodules.trackers.data.TrackersRepository; import kotlin.Pair; public class StatsDatabase extends SQLiteOpenHelper { public static final int DATABASE_VERSION = 1; Loading Loading @@ -88,7 +87,7 @@ public class StatsDatabase extends SQLiteOpenHelper { AppTrackerEntry.COLUMN_NAME_NUMBER_BLOCKED + " INTEGER)"; private HashMap<String, Integer> getLeaksByPeriod( private HashMap<String, Pair<Integer, Integer>> getCallsByPeriod( int periodsCount, TemporalUnit periodUnit, String sqlitePeriodFormat Loading @@ -115,26 +114,26 @@ public class StatsDatabase extends SQLiteOpenHelper { " ORDER BY " + AppTrackerEntry.COLUMN_NAME_TIMESTAMP + " DESC" + " LIMIT " + periodsCount, selectionArg); HashMap<String, Integer> leaksByPeriod = new HashMap<>(); HashMap<String, Pair<Integer, Integer>> callsByPeriod = new HashMap<>(); while (cursor.moveToNext()) { int contacted = cursor.getInt(cursor.getColumnIndex(projectionNameContactedSum)); int blocked = cursor.getInt(cursor.getColumnIndex(projectionNameBlockedSum)); leaksByPeriod.put( callsByPeriod.put( cursor.getString(cursor.getColumnIndex(projectionNamePeriod)), contacted - blocked new Pair(blocked, contacted - blocked) ); } cursor.close(); db.close(); return leaksByPeriod; return callsByPeriod; } } private List<Integer> leaksByPeriodToPeriodsList( Map<String, Integer> leaksByPeriod, private List<Pair<Integer, Integer>> callsByPeriodToPeriodsList( Map<String, Pair<Integer, Integer>> callsByPeriod, int periodsCount, TemporalUnit periodUnit, String javaPeriodFormat Loading @@ -142,17 +141,17 @@ public class StatsDatabase extends SQLiteOpenHelper { ZonedDateTime currentDate = ZonedDateTime.now().minus(periodsCount, periodUnit); DateTimeFormatter formater = DateTimeFormatter.ofPattern(javaPeriodFormat); List<Integer> leaks = new ArrayList(periodsCount); List<Pair<Integer, Integer>> calls = new ArrayList(periodsCount); for (int i = 0; i < periodsCount; i++) { currentDate = currentDate.plus(1, periodUnit); String currentPeriod = formater.format(currentDate); leaks.add(leaksByPeriod.getOrDefault(currentPeriod, 0)); calls.add(callsByPeriod.getOrDefault(currentPeriod, new Pair(0, 0))); } return leaks; return calls; } public List<Integer> getTrackersLeaksOnPeriod(int periodsCount, TemporalUnit periodUnit) { public List<Pair<Integer, Integer>> getTrackersCallsOnPeriod(int periodsCount, TemporalUnit periodUnit) { String sqlitePeriodFormat = "%Y%m"; String javaPeriodFormat = "yyyyMM"; Loading @@ -167,8 +166,8 @@ public class StatsDatabase extends SQLiteOpenHelper { javaPeriodFormat = "yyyyMMddHH"; } Map<String, Integer> leaksByPeriod = getLeaksByPeriod(periodsCount, periodUnit, sqlitePeriodFormat); return leaksByPeriodToPeriodsList(leaksByPeriod, periodsCount, periodUnit, javaPeriodFormat); Map<String, Pair<Integer, Integer>> callsByPeriod = getCallsByPeriod(periodsCount, periodUnit, sqlitePeriodFormat); return callsByPeriodToPeriodsList(callsByPeriod, periodsCount, periodUnit, javaPeriodFormat); } Loading privacymoduletrackers/src/main/java/foundation/e/privacymodules/trackers/data/StatsRepository.java +3 −2 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ import java.util.Map; import java.util.function.Consumer; import foundation.e.privacymodules.trackers.Tracker; import kotlin.Pair; public class StatsRepository { private static StatsRepository instance; Loading Loading @@ -38,8 +39,8 @@ public class StatsRepository { } } public List<Integer> getTrackersLeaksOnPeriod(int periodsCount, TemporalUnit periodUnit) { return database.getTrackersLeaksOnPeriod(periodsCount, periodUnit); public List<Pair<Integer, Integer>> getTrackersCallsOnPeriod(int periodsCount, TemporalUnit periodUnit) { return database.getTrackersCallsOnPeriod(periodsCount, periodUnit); } public int getActiveTrackersByPeriod(int periodsCount, TemporalUnit periodUnit) { Loading Loading
demoapp/build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -33,7 +33,7 @@ android { dependencies { implementation project(':privacymoduletrackers') implementation 'foundation.e:privacymodule.api:0.5.0-dev' implementation 'foundation.e:privacymodule.api:1.0.0' implementation 'com.google.code.gson:gson:2.9.0' Loading
privacymoduletrackers/build.gradle +2 −2 Original line number Diff line number Diff line Loading @@ -10,7 +10,7 @@ android { targetSdkVersion 30 versionCode 1 versionName "0.5.1" versionName "0.6.0" } buildTypes { Loading @@ -26,7 +26,7 @@ android { } } dependencies{ implementation 'foundation.e:privacymodule.api:0.6.0' implementation 'foundation.e:privacymodule.api:1.0.0' } publishing { Loading
privacymoduletrackers/src/main/java/foundation/e/privacymodules/trackers/api/TrackTrackersPrivacyModule.java +7 −6 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import foundation.e.privacymodules.trackers.ITrackTrackersPrivacyModule; import foundation.e.privacymodules.trackers.Tracker; import foundation.e.privacymodules.trackers.data.StatsRepository; import foundation.e.privacymodules.trackers.data.TrackersRepository; import kotlin.Pair; public class TrackTrackersPrivacyModule implements ITrackTrackersPrivacyModule { Loading Loading @@ -69,18 +70,18 @@ public class TrackTrackersPrivacyModule implements ITrackTrackersPrivacyModule { @NonNull @Override public List<Integer> getPastDayTrackersCalls() { return statsRepository.getTrackersLeaksOnPeriod(24, ChronoUnit.HOURS); public List<Pair<Integer, Integer>> getPastDayTrackersCalls() { return statsRepository.getTrackersCallsOnPeriod(24, ChronoUnit.HOURS); } @Override public List<Integer> getPastMonthTrackersCalls() { return statsRepository.getTrackersLeaksOnPeriod(30, ChronoUnit.DAYS); public List<Pair<Integer, Integer>> getPastMonthTrackersCalls() { return statsRepository.getTrackersCallsOnPeriod(30, ChronoUnit.DAYS); } @Override public List<Integer> getPastYearTrackersCalls() { return statsRepository.getTrackersLeaksOnPeriod(12, ChronoUnit.MONTHS); public List<Pair<Integer, Integer>> getPastYearTrackersCalls() { return statsRepository.getTrackersCallsOnPeriod(12, ChronoUnit.MONTHS); } @Override Loading
privacymoduletrackers/src/main/java/foundation/e/privacymodules/trackers/data/StatsDatabase.java +14 −15 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.provider.BaseColumns; import android.util.Log; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; Loading @@ -39,7 +38,7 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import foundation.e.privacymodules.trackers.Tracker; import foundation.e.privacymodules.trackers.data.TrackersRepository; import kotlin.Pair; public class StatsDatabase extends SQLiteOpenHelper { public static final int DATABASE_VERSION = 1; Loading Loading @@ -88,7 +87,7 @@ public class StatsDatabase extends SQLiteOpenHelper { AppTrackerEntry.COLUMN_NAME_NUMBER_BLOCKED + " INTEGER)"; private HashMap<String, Integer> getLeaksByPeriod( private HashMap<String, Pair<Integer, Integer>> getCallsByPeriod( int periodsCount, TemporalUnit periodUnit, String sqlitePeriodFormat Loading @@ -115,26 +114,26 @@ public class StatsDatabase extends SQLiteOpenHelper { " ORDER BY " + AppTrackerEntry.COLUMN_NAME_TIMESTAMP + " DESC" + " LIMIT " + periodsCount, selectionArg); HashMap<String, Integer> leaksByPeriod = new HashMap<>(); HashMap<String, Pair<Integer, Integer>> callsByPeriod = new HashMap<>(); while (cursor.moveToNext()) { int contacted = cursor.getInt(cursor.getColumnIndex(projectionNameContactedSum)); int blocked = cursor.getInt(cursor.getColumnIndex(projectionNameBlockedSum)); leaksByPeriod.put( callsByPeriod.put( cursor.getString(cursor.getColumnIndex(projectionNamePeriod)), contacted - blocked new Pair(blocked, contacted - blocked) ); } cursor.close(); db.close(); return leaksByPeriod; return callsByPeriod; } } private List<Integer> leaksByPeriodToPeriodsList( Map<String, Integer> leaksByPeriod, private List<Pair<Integer, Integer>> callsByPeriodToPeriodsList( Map<String, Pair<Integer, Integer>> callsByPeriod, int periodsCount, TemporalUnit periodUnit, String javaPeriodFormat Loading @@ -142,17 +141,17 @@ public class StatsDatabase extends SQLiteOpenHelper { ZonedDateTime currentDate = ZonedDateTime.now().minus(periodsCount, periodUnit); DateTimeFormatter formater = DateTimeFormatter.ofPattern(javaPeriodFormat); List<Integer> leaks = new ArrayList(periodsCount); List<Pair<Integer, Integer>> calls = new ArrayList(periodsCount); for (int i = 0; i < periodsCount; i++) { currentDate = currentDate.plus(1, periodUnit); String currentPeriod = formater.format(currentDate); leaks.add(leaksByPeriod.getOrDefault(currentPeriod, 0)); calls.add(callsByPeriod.getOrDefault(currentPeriod, new Pair(0, 0))); } return leaks; return calls; } public List<Integer> getTrackersLeaksOnPeriod(int periodsCount, TemporalUnit periodUnit) { public List<Pair<Integer, Integer>> getTrackersCallsOnPeriod(int periodsCount, TemporalUnit periodUnit) { String sqlitePeriodFormat = "%Y%m"; String javaPeriodFormat = "yyyyMM"; Loading @@ -167,8 +166,8 @@ public class StatsDatabase extends SQLiteOpenHelper { javaPeriodFormat = "yyyyMMddHH"; } Map<String, Integer> leaksByPeriod = getLeaksByPeriod(periodsCount, periodUnit, sqlitePeriodFormat); return leaksByPeriodToPeriodsList(leaksByPeriod, periodsCount, periodUnit, javaPeriodFormat); Map<String, Pair<Integer, Integer>> callsByPeriod = getCallsByPeriod(periodsCount, periodUnit, sqlitePeriodFormat); return callsByPeriodToPeriodsList(callsByPeriod, periodsCount, periodUnit, javaPeriodFormat); } Loading
privacymoduletrackers/src/main/java/foundation/e/privacymodules/trackers/data/StatsRepository.java +3 −2 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ import java.util.Map; import java.util.function.Consumer; import foundation.e.privacymodules.trackers.Tracker; import kotlin.Pair; public class StatsRepository { private static StatsRepository instance; Loading Loading @@ -38,8 +39,8 @@ public class StatsRepository { } } public List<Integer> getTrackersLeaksOnPeriod(int periodsCount, TemporalUnit periodUnit) { return database.getTrackersLeaksOnPeriod(periodsCount, periodUnit); public List<Pair<Integer, Integer>> getTrackersCallsOnPeriod(int periodsCount, TemporalUnit periodUnit) { return database.getTrackersCallsOnPeriod(periodsCount, periodUnit); } public int getActiveTrackersByPeriod(int periodsCount, TemporalUnit periodUnit) { Loading