diff --git a/.github/workflows/archive.yml b/.github/workflows/archive.yml index 28e2d2376..d41537923 100644 --- a/.github/workflows/archive.yml +++ b/.github/workflows/archive.yml @@ -5,15 +5,15 @@ jobs: build: runs-on: macos-latest steps: - - uses: actions/setup-java@v2 - with: - java-version: '11' - distribution: 'temurin' - - name: checkout - uses: actions/checkout@v2 - - run: ./gradlew clean && ./gradlew assembleDevFullRelease - - name: uploads dev apk - uses: actions/upload-artifact@v3 - with: - name: dev-apk - path: app/build/outputs/apk/devFull/release + - uses: actions/setup-java@v2 + with: + java-version: '11' + distribution: 'temurin' + - name: checkout + uses: actions/checkout@v2 + - run: ./gradlew clean assembleDevFullRelease + - name: uploads dev apk + uses: actions/upload-artifact@v3 + with: + name: dev-apk + path: app/build/outputs/apk/devFull/release \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 3e12618e7..174fef7f1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,15 +2,15 @@ apply plugin: 'com.android.application' apply from: 'jacoco.gradle' android { - compileSdk 33 + compileSdk 34 ndkVersion '22.0.7026061' defaultConfig { applicationId 'org.openobservatory.ooniprobe' minSdk 21 - targetSdk 33 - versionName '3.8.1' - versionCode 99 + targetSdk 34 + versionName '3.8.3' + versionCode 102 testInstrumentationRunner "org.openobservatory.ooniprobe.TestAndroidJUnitRunner" buildConfigField 'String', 'OONI_API_BASE_URL', '"https://api.ooni.io/"' buildConfigField 'String', 'NOTIFICATION_SERVER', '"https://countly.ooni.io"' @@ -105,7 +105,7 @@ dependencies { implementation project(path: ':engine') // AndroidX - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.lifecycle:lifecycle-process:2.5.1' implementation 'androidx.preference:preference:1.2.0' @@ -160,7 +160,7 @@ dependencies { testImplementation 'org.mockito:mockito-inline:4.6.1' testImplementation 'org.robolectric:robolectric:4.5.1' testImplementation 'com.github.blocoio:faker:1.2.8' - testImplementation 'org.ooni:oonimkall:2023.03.16-173249' + testImplementation 'org.ooni:oonimkall:2023.07.18-162729' testAnnotationProcessor 'com.google.dagger:dagger-compiler:2.36' // Instrumentation Testing diff --git a/app/src/debug/assets/v2.db b/app/src/debug/assets/v2.db index cf8e1d5d3..fcd73997e 100644 Binary files a/app/src/debug/assets/v2.db and b/app/src/debug/assets/v2.db differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ea8a639c6..78c0d0b76 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,8 @@ + + requestPermissionLauncher; + public static Intent newIntent(Context context, int resItem) { return new Intent(context, MainActivity.class).putExtra(RES_ITEM, resItem).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); } @@ -59,9 +71,10 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { finish(); } else { - setContentView(R.layout.activity_main); ButterKnife.bind(this); - bottomNavigation.setOnNavigationItemSelectedListener(item -> { + binding = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + binding.bottomNavigation.setOnItemSelectedListener(item -> { switch (item.getItemId()) { case R.id.dashboard: getSupportFragmentManager().beginTransaction().replace(R.id.content, new DashboardFragment()).commit(); @@ -76,7 +89,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { return false; } }); - bottomNavigation.setSelectedItemId(getIntent().getIntExtra(RES_ITEM, R.id.dashboard)); + binding.bottomNavigation.setSelectedItemId(getIntent().getIntExtra(RES_ITEM, R.id.dashboard)); if (notificationManager.shouldShowAutoTest()) { new ConfirmDialogFragment.Builder() .withTitle(getString(R.string.Modal_Autorun_Modal_Title)) @@ -109,7 +122,45 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); } } + requestNotificationPermission(); + } + + private void requestNotificationPermission() { + + requestPermissionLauncher = registerForActivityResult( + new ActivityResultContracts.RequestPermission(), + (result) -> { + if (!result) { + Snackbar.make( + binding.getRoot(), + "Please grant Notification permission from App Settings", + Snackbar.LENGTH_LONG + ).setAction(R.string.Settings_Title, view -> { + Intent intent = new Intent(); + intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + //for Android 5-7 + intent.putExtra("app_package", getPackageName()); + intent.putExtra("app_uid", getApplicationInfo().uid); + + // for Android 8 and above + intent.putExtra("android.provider.extra.APP_PACKAGE", getPackageName()); + + startActivity(intent); + }).show(); + } + } + ); + NotificationUtility.setChannel(getApplicationContext(), CHANNEL_ID, getString(R.string.Settings_AutomatedTesting_Label), false, false, false); + if (ContextCompat.checkSelfPermission( + this, + Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED + ) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS); + } + } } @Override @@ -117,7 +168,7 @@ protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intent.getExtras() != null){ if (intent.getExtras().containsKey(RES_ITEM)) - bottomNavigation.setSelectedItemId(intent.getIntExtra(RES_ITEM, R.id.dashboard)); + binding.bottomNavigation.setSelectedItemId(intent.getIntExtra(RES_ITEM, R.id.dashboard)); else if (intent.getExtras().containsKey(NOTIFICATION_DIALOG)){ new ConfirmDialogFragment.Builder() .withTitle(intent.getExtras().getString("title")) diff --git a/app/src/main/java/org/openobservatory/ooniprobe/activity/RunningActivity.java b/app/src/main/java/org/openobservatory/ooniprobe/activity/RunningActivity.java index 31f42857d..d40d95dcb 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/activity/RunningActivity.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/activity/RunningActivity.java @@ -1,5 +1,7 @@ package org.openobservatory.ooniprobe.activity; +import static java.util.Locale.ENGLISH; + import android.app.AlertDialog; import android.app.NotificationManager; import android.content.Context; @@ -17,6 +19,7 @@ import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.localbroadcastmanager.content.LocalBroadcastManager; @@ -143,8 +146,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { }); testProgressRepository.getEta().observe(this,etaValue -> { if (etaValue!=null) { - eta.setText(getString(R.string.Dashboard_Running_Seconds, - String.valueOf(Math.round(etaValue)))); + eta.setText(readableTimeRemaining(etaValue)); } }); @@ -186,8 +188,7 @@ private void applyUIChanges(RunTestService service) { Double etaValue = testProgressRepository.getEta().getValue(); if (etaValue!=null){ - eta.setText(getString(R.string.Dashboard_Running_Seconds, - String.valueOf(Math.round(etaValue)))); + eta.setText(readableTimeRemaining(etaValue)); }else { eta.setText(R.string.Dashboard_Running_CalculatingETA); } @@ -270,8 +271,8 @@ public void onRun(String value) { public void onProgress(int state, double timeLeft) { progress.setIndeterminate(false); progress.setProgress(state); - eta.setText(getString(R.string.Dashboard_Running_Seconds, - String.valueOf(Math.round(timeLeft)))); + + eta.setText(readableTimeRemaining(timeLeft)); } @Override @@ -300,4 +301,10 @@ public void onEnd(Context context) { testEnded(context); } } + + @NonNull + private static String readableTimeRemaining(double timeLeft) { + long letaValue = Math.round(timeLeft); + return String.format(ENGLISH,"%dm %02ds", letaValue/60, letaValue%60); + } } diff --git a/app/src/main/java/org/openobservatory/ooniprobe/adapters/LogRecyclerViewAdapter.java b/app/src/main/java/org/openobservatory/ooniprobe/adapters/LogRecyclerViewAdapter.java index 4a4698962..98a2bb5fc 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/adapters/LogRecyclerViewAdapter.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/adapters/LogRecyclerViewAdapter.java @@ -83,6 +83,9 @@ public void onBindViewHolder(ViewHolder viewHolder, final int position) { case API: viewHolder.binding.textView.setTextColor(context.getResources().getColor(R.color.color_blue9)); break; + default: + viewHolder.binding.textView.setTextColor(context.getResources().getColor(R.color.color_black)); + break; } }catch (Exception e){ System.out.println(items.get(position).trim()); diff --git a/app/src/main/java/org/openobservatory/ooniprobe/common/AppLogger.java b/app/src/main/java/org/openobservatory/ooniprobe/common/AppLogger.java index d4bce4739..7f0ffa021 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/common/AppLogger.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/common/AppLogger.java @@ -39,6 +39,10 @@ public void i(String tag, String message) { logger.i(String.format("%s: %s", tag, message)); } + public void d(String tag, String message) { + logger.d(String.format("%s: %s", tag, message)); + } + public void deleteOldLog() { logger.deleteOldLog(); } diff --git a/app/src/main/java/org/openobservatory/ooniprobe/common/PreferenceManager.java b/app/src/main/java/org/openobservatory/ooniprobe/common/PreferenceManager.java index 2e39f23b9..ba228a80b 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/common/PreferenceManager.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/common/PreferenceManager.java @@ -39,6 +39,7 @@ public class PreferenceManager { public static final String AUTORUN_COUNT = "autorun_count"; public static final String AUTORUN_DATE = "autorun_last_date"; public static final int IGNORE_OPTIMIZATION_REQUEST = 15; + public static final int COUNT_WEBSITE_CATEGORIES = 31; public static final int ASK_UPDATE_APP = 16; private final SharedPreferences sp; @@ -264,6 +265,14 @@ public Integer countEnabledCategory() { return count; } + public void updateAllWebsiteCategories(boolean value) { + SharedPreferences.Editor ed = sp.edit(); + for (String key : r.getStringArray(R.array.CategoryCodes)){ + ed.putBoolean(key,value); + } + ed.apply(); + } + public boolean canCallDeleteJson(){ long lastCalled = sp.getLong(DELETE_JSON_KEY, 0); diff --git a/app/src/main/java/org/openobservatory/ooniprobe/common/service/RunTestService.java b/app/src/main/java/org/openobservatory/ooniprobe/common/service/RunTestService.java index 221399f12..a7d3e2259 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/common/service/RunTestService.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/common/service/RunTestService.java @@ -1,5 +1,6 @@ package org.openobservatory.ooniprobe.common.service; +import android.Manifest; import android.annotation.SuppressLint; import android.app.ActivityManager; import android.app.KeyguardManager; @@ -9,17 +10,17 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.os.Binder; import android.os.IBinder; import android.util.Log; +import androidx.core.app.ActivityCompat; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; +import androidx.core.content.ContextCompat; import androidx.localbroadcastmanager.content.LocalBroadcastManager; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; - import org.openobservatory.ooniprobe.R; import org.openobservatory.ooniprobe.activity.MainActivity; import org.openobservatory.ooniprobe.activity.RunningActivity; @@ -47,7 +48,7 @@ public void onCreate() { super.onCreate(); IntentFilter filter = new IntentFilter(ACTION_INTERRUPT); receiver = new ActionReceiver(); - this.registerReceiver(receiver, filter); + ContextCompat.registerReceiver(this, receiver, filter, ContextCompat.RECEIVER_NOT_EXPORTED); LocalBroadcastManager.getInstance(this).registerReceiver( new ProgressBroadcastReceiver(), @@ -110,6 +111,12 @@ public void onDestroy() { .setContentIntent(pendingIntent) .setAutoCancel(true) .setProgress(100, 100, false); + if (ActivityCompat.checkSelfPermission( + RunTestService.this, + Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED + ) { + return; + } notificationManager.notify(1, builder.build()); } else if (notificationManager != null) notificationManager.cancel(NOTIFICATION_ID); @@ -195,6 +202,12 @@ private class ProgressBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { String key = intent.getStringExtra("key"); String value = intent.getStringExtra("value"); + if (ActivityCompat.checkSelfPermission( + RunTestService.this, + Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED + ) { + return; + } switch (key) { case TestAsyncTask.RUN: Log.d(TAG, "TestAsyncTask.RUN"); diff --git a/app/src/main/java/org/openobservatory/ooniprobe/common/service/ServiceUtil.java b/app/src/main/java/org/openobservatory/ooniprobe/common/service/ServiceUtil.java index 46d1a4de7..82b1895de 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/common/service/ServiceUtil.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/common/service/ServiceUtil.java @@ -94,7 +94,7 @@ public static void callCheckInAPI(Application app) { public static void startRunTestService(Context context, ArrayList iTestSuites, boolean storeDB) { ArrayList testSuites = Lists.newArrayList( - Iterables.filter(iTestSuites, testSuite -> !testSuite.isTestEmpty(d.preferenceManager)) + Iterables.filter(Iterables.filter(iTestSuites, item -> item != null), testSuite -> !testSuite.isTestEmpty(d.preferenceManager)) ); Intent serviceIntent = new Intent(context, RunTestService.class); diff --git a/app/src/main/java/org/openobservatory/ooniprobe/fragment/PreferenceFragment.java b/app/src/main/java/org/openobservatory/ooniprobe/fragment/PreferenceFragment.java index d4d17b892..a3de2c4b8 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/fragment/PreferenceFragment.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/fragment/PreferenceFragment.java @@ -1,5 +1,7 @@ package org.openobservatory.ooniprobe.fragment; +import static org.openobservatory.ooniprobe.common.PreferenceManager.COUNT_WEBSITE_CATEGORIES; + import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -10,9 +12,13 @@ import android.os.PowerManager; import android.provider.Settings; import android.text.TextUtils; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.widget.Toast; import androidx.annotation.IdRes; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.XmlRes; import androidx.preference.EditTextPreference; @@ -33,6 +39,8 @@ import java.util.Arrays; +import javax.inject.Inject; + import localhost.toolkit.app.fragment.MessageDialogFragment; import localhost.toolkit.preference.ExtendedPreferenceFragment; @@ -54,6 +62,7 @@ public static PreferenceFragment newInstance(@XmlRes int preferencesResId, @IdRe @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { this.rootKey = rootKey; + setHasOptionsMenu(true); } @Override @@ -226,4 +235,43 @@ public void onActivityResult(int requestCode, int resultCode, @Nullable Intent d } } } + + @Override + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { + PreferenceScreen ourPreferenceScreen = findPreference(getString(R.string.Settings_Websites_Categories_Label)); + if (getPreferenceScreen().equals(ourPreferenceScreen)) { + inflater.inflate(R.menu.website_categories, menu); + } + int enabledCategories = ((Application) getActivity().getApplication()).getPreferenceManager().countEnabledCategory(); + + if (enabledCategories>=COUNT_WEBSITE_CATEGORIES){ + MenuItem item = menu.findItem(R.id.selectAll); + if (item != null) { + item.setVisible(false); + } + } else if (enabledCategories<=0){ + MenuItem item = menu.findItem(R.id.selectNone); + if (item != null) { + item.setVisible(false); + } + } + + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + PreferenceManager preferenceManager = ((Application) getActivity().getApplication()).getPreferenceManager(); + int itemId = item.getItemId(); + if (itemId == R.id.selectAll) { + preferenceManager.updateAllWebsiteCategories(true); + getActivity().finish(); + return true; + } else if (itemId == R.id.selectNone) { + preferenceManager.updateAllWebsiteCategories(false); + getActivity().finish(); + return true; + } + return super.onOptionsItemSelected(item); + } } diff --git a/app/src/main/java/org/openobservatory/ooniprobe/fragment/PreferenceGlobalFragment.java b/app/src/main/java/org/openobservatory/ooniprobe/fragment/PreferenceGlobalFragment.java index 18e1b098b..9033dc831 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/fragment/PreferenceGlobalFragment.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/fragment/PreferenceGlobalFragment.java @@ -8,22 +8,22 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; import org.openobservatory.ooniprobe.R; - -import butterknife.BindView; -import butterknife.ButterKnife; +import org.openobservatory.ooniprobe.databinding.FragmentContentBinding; public class PreferenceGlobalFragment extends Fragment { - @BindView(R.id.toolbar) Toolbar toolbar; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View v = inflater.inflate(R.layout.fragment_content, container, false); - ButterKnife.bind(this, v); - ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); + FragmentContentBinding binding = FragmentContentBinding.inflate(inflater); + ((AppCompatActivity) getActivity()).setSupportActionBar(binding.toolbar); + return binding.getRoot(); + } + + @Override + public void onStart() { + super.onStart(); getParentFragmentManager().beginTransaction().replace(R.id.subContent, PreferenceFragment.newInstance(R.xml.preferences_global, R.id.subContent, null)).commit(); - return v; } } diff --git a/app/src/main/java/org/openobservatory/ooniprobe/receiver/TestRunBroadRequestReceiver.java b/app/src/main/java/org/openobservatory/ooniprobe/receiver/TestRunBroadRequestReceiver.java index 8d220878e..668d8933f 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/receiver/TestRunBroadRequestReceiver.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/receiver/TestRunBroadRequestReceiver.java @@ -58,7 +58,7 @@ public void onReceive(Context context, Intent intent) { break; case TestAsyncTask.PRG: try { - if (service != null && service.task.testSuites.indexOf(service.task.currentSuite) > 0) { + if (service != null && service.task.testSuites.contains(service.task.currentSuite)) { List previousTestSuites = service.task.testSuites.subList(0, service.task.testSuites.indexOf(service.task.currentSuite)); int previousTestProgress = ListUtility.sum(Lists.transform( diff --git a/app/src/main/java/org/openobservatory/ooniprobe/test/test/AbstractTest.java b/app/src/main/java/org/openobservatory/ooniprobe/test/test/AbstractTest.java index 7defcb41c..2f66abdb7 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/test/test/AbstractTest.java +++ b/app/src/main/java/org/openobservatory/ooniprobe/test/test/AbstractTest.java @@ -147,6 +147,9 @@ void run(Context c, PreferenceManager pm, AppLogger logger, Gson gson, Settings case "WARNING": logger.w(TAG, event.value.message); break; + case "DEBUG": + logger.d(TAG, event.value.message); + break; default: logger.i(TAG, event.value.message); break; diff --git a/app/src/main/res/menu/website_categories.xml b/app/src/main/res/menu/website_categories.xml new file mode 100644 index 000000000..ce54ab80d --- /dev/null +++ b/app/src/main/res/menu/website_categories.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 3b63fab4b..106cce24b 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -72,7 +72,7 @@ Jalankan tes percobaan baru Jalankan tes eksperimen baru ini yang dikembangkan oleh tim OONI:\n%1$s\n\nHasil Anda akan dipubikasikan di [OONI Explorer](https://explorer.ooni.org/) dan [OONI API](https://api.ooni.io/). The following tests will only be run as part of automated testing: - Disabled Tests + Tes Dimatikan Gbit/s Mbit/s kbit/s @@ -255,8 +255,8 @@ Handshake Diblok juga Bekerja - [RiseupVPN](https://riseup.net/vpn) appears to be blocked. - We were able to successfully connect to RiseupVPN\'s bootstrap server and VPN gateways. This means that [RiseupVPN](https://riseup.net/vpn) should work. + [RiseupVPN](https://riseup.net/vpn) sepertinya diblokir. + Kami berhasil terhubung ke server dan gateway VPN dari RiseupVPN. Ini menunjukan bahwa [RiseupVPN](https://riseup.net/vpn) berfungsi. Bootstrap server Koneksi OpenVPN Bridged connections @@ -293,8 +293,8 @@ OONI Probe tidak dapat berjalan dengan otomatis tanpa pengoptimalan baterai. Apakah Anda ingin mencoba lagi? Mohon nonaktifkan koneksi VPN Anda. Jika Anda menjalankan tes OONI Probe dengan VPN yang diaktifkan, hasil tes akan terlihat berasal dari negara yang salah. Mohon nonaktifkan koneksi VPN. - Some measurements were taken over VPN. - If you upload measurements taken when VPN enabled, the test results may appear to come from the wrong country. + Beberapa hasil pengecekan diambil dari koneksi VPN + Jika anda melakukan pengecekan dengan VPN, hasil tes akan terlihat datang dari negara yang berbeda. Unggahan berhasil Tampilkan log kesalahan Dapatkan informasi terbaru mengenai penyensoran Internet diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 937440be6..63d934a91 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -72,7 +72,7 @@ Executar novos testes experimentais Execute os seguintes novos testes experimentais desenvolvidos pela equipe OONI:\n%1$s\n\nSeus resultados serão publicados em [OONI Explorer](https://explorer.ooni.org/) e [OONI API](https://api.ooni.io/). Os testes a seguir serão executados apenas como parte de testes automatizados: - Disabled Tests + Testes Desabilitados Gbit/s Mbit/s kbit/s diff --git a/app/src/sharedTest/java/org/openobservatory/ooniprobe/factory/EventResultFactory.java b/app/src/sharedTest/java/org/openobservatory/ooniprobe/factory/EventResultFactory.java index 3ee94615e..1705988dc 100644 --- a/app/src/sharedTest/java/org/openobservatory/ooniprobe/factory/EventResultFactory.java +++ b/app/src/sharedTest/java/org/openobservatory/ooniprobe/factory/EventResultFactory.java @@ -80,7 +80,7 @@ public static EventResult buildDataUsage(double download, double upload) { public static EventResult buildLog(String message) { EventResult.Value value = new EventResult.Value(); value.message = message; - + value.log_level = "WARNING"; return build("log", value); } public static EventResult buildProgress(Double percentage, String message) { diff --git a/applogger/src/main/java/org/openobservatory/applogger/ILogger.kt b/applogger/src/main/java/org/openobservatory/applogger/ILogger.kt index 02e159cb8..00e5e85e6 100644 --- a/applogger/src/main/java/org/openobservatory/applogger/ILogger.kt +++ b/applogger/src/main/java/org/openobservatory/applogger/ILogger.kt @@ -4,5 +4,6 @@ interface ILogger { fun e(msg: String) fun w(msg: String) fun i(msg: String) + fun d(msg: String) fun api(msg: String) } diff --git a/applogger/src/main/java/org/openobservatory/applogger/InAppLogger.kt b/applogger/src/main/java/org/openobservatory/applogger/InAppLogger.kt index 2570ef98d..21fb5f8d2 100644 --- a/applogger/src/main/java/org/openobservatory/applogger/InAppLogger.kt +++ b/applogger/src/main/java/org/openobservatory/applogger/InAppLogger.kt @@ -32,6 +32,10 @@ class InAppLogger(context: Context) : LoggerManager(context) { saveLog("${DateFormat.format("yyyy-MM-dd hh:mm:ss a", Date())} : ${LogType.INFO.name} : $msg", LogType.INFO.name) } + override fun d(msg: String) { + saveLog("${DateFormat.format("yyyy-MM-dd hh:mm:ss a", Date())} : ${LogType.DEBUG.name} : $msg", LogType.DEBUG.name) + } + override fun api(msg: String) { saveLog("${DateFormat.format("yyyy-MM-dd hh:mm:ss a", Date())} : ${LogType.API.name} : $msg", LogType.API.name) } diff --git a/applogger/src/main/java/org/openobservatory/applogger/LogType.kt b/applogger/src/main/java/org/openobservatory/applogger/LogType.kt index 1daaa0e4c..12df5f1ab 100644 --- a/applogger/src/main/java/org/openobservatory/applogger/LogType.kt +++ b/applogger/src/main/java/org/openobservatory/applogger/LogType.kt @@ -1,9 +1,9 @@ package org.openobservatory.applogger enum class LogType { - ALL, ERROR, WARNING, INFO, API; + ALL, DEBUG, ERROR, WARNING, INFO, API; companion object { - fun getAllTypes() = listOf(ALL.name, ERROR.name, WARNING.name, INFO.name, API.name) + fun getAllTypes() = listOf(ALL.name, DEBUG.name, ERROR.name, WARNING.name, INFO.name, API.name) } } diff --git a/applogger/src/main/java/org/openobservatory/applogger/LoggerManager.kt b/applogger/src/main/java/org/openobservatory/applogger/LoggerManager.kt index 94bfd8e68..b552367c4 100644 --- a/applogger/src/main/java/org/openobservatory/applogger/LoggerManager.kt +++ b/applogger/src/main/java/org/openobservatory/applogger/LoggerManager.kt @@ -20,7 +20,11 @@ abstract class LoggerManager(private val context: Context) : ILogger, Subject { companion object { @JvmStatic fun getTag(line: String): String { - return line.substring(24).trim().split(":").first().trim() + return try { + line.substring(24).trim().split(":").first().trim() + } catch (e: Exception) { + "DEBUG" + } } } diff --git a/engine/build.gradle b/engine/build.gradle index 0f9cbb4e6..93facfd52 100644 --- a/engine/build.gradle +++ b/engine/build.gradle @@ -32,8 +32,8 @@ android { dependencies { // For the stable and dev app flavours we're using the library // build published at Maven Central. - stableImplementation 'org.ooni:oonimkall:2023.03.16-173249' - devImplementation 'org.ooni:oonimkall:2023.03.16-173249' + stableImplementation 'org.ooni:oonimkall:2023.07.18-162729' + devImplementation 'org.ooni:oonimkall:2023.07.18-162729' // For the experimental flavour, you need to compile your own // oonimkall.aar and put it into the ../engine-experimental dir