Add DB info to debug screen

This commit is contained in:
xynngh 2020-05-06 18:36:07 +04:00
parent 146acd4483
commit 0efe3523b3
9 changed files with 120 additions and 41 deletions

View File

@ -7,15 +7,20 @@ import android.widget.EditText;
import android.widget.TextView; import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.util.Pair;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode; import org.greenrobot.eventbus.ThreadMode;
import java.util.Date;
import dummydomain.yetanothercallblocker.event.SecondaryDbUpdateFinished; import dummydomain.yetanothercallblocker.event.SecondaryDbUpdateFinished;
import dummydomain.yetanothercallblocker.sia.DatabaseSingleton; import dummydomain.yetanothercallblocker.sia.DatabaseSingleton;
import dummydomain.yetanothercallblocker.sia.model.NumberCategory; import dummydomain.yetanothercallblocker.sia.model.NumberCategory;
import dummydomain.yetanothercallblocker.sia.model.database.CommunityDatabase;
import dummydomain.yetanothercallblocker.sia.model.database.CommunityDatabaseItem; import dummydomain.yetanothercallblocker.sia.model.database.CommunityDatabaseItem;
import dummydomain.yetanothercallblocker.sia.model.database.FeaturedDatabase;
import dummydomain.yetanothercallblocker.sia.model.database.FeaturedDatabaseItem; import dummydomain.yetanothercallblocker.sia.model.database.FeaturedDatabaseItem;
import dummydomain.yetanothercallblocker.work.TaskService; import dummydomain.yetanothercallblocker.work.TaskService;
@ -26,6 +31,8 @@ public class DebugActivity extends AppCompatActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_debug); setContentView(R.layout.activity_debug);
hideSummary(); hideSummary();
onDbInfoButtonClick(null);
} }
@Override @Override
@ -52,17 +59,23 @@ public class DebugActivity extends AppCompatActivity {
setResult(""); setResult("");
hideSummary(); hideSummary();
new AsyncTask<Void, Void, CommunityDatabaseItem>() { new AsyncTask<Void, Void, Pair<CommunityDatabaseItem, FeaturedDatabaseItem>>() {
@Override @Override
protected CommunityDatabaseItem doInBackground(Void... voids) { protected Pair<CommunityDatabaseItem, FeaturedDatabaseItem> doInBackground(Void... voids) {
CommunityDatabaseItem item = DatabaseSingleton.getCommunityDatabase() CommunityDatabaseItem item = DatabaseSingleton.getCommunityDatabase()
.getDbItemByNumber(getNumber()); .getDbItemByNumber(getNumber());
return item; FeaturedDatabaseItem featuredItem = DatabaseSingleton.getFeaturedDatabase()
.getDbItemByNumber(getNumber());
return new Pair(item, featuredItem);
} }
@Override @Override
protected void onPostExecute(CommunityDatabaseItem item) { protected void onPostExecute(Pair<CommunityDatabaseItem, FeaturedDatabaseItem> result) {
CommunityDatabaseItem item = result.first;
FeaturedDatabaseItem featuredItem = result.second;
String string; String string;
if (item != null) { if (item != null) {
string = item.getNumber() + "\n"; string = item.getNumber() + "\n";
@ -82,36 +95,55 @@ public class DebugActivity extends AppCompatActivity {
} else { } else {
string = DebugActivity.this.getString(R.string.debug_not_found); string = DebugActivity.this.getString(R.string.debug_not_found);
} }
if (featuredItem != null) {
string += "\n" + "Featured name: " + featuredItem.getName();
}
setResult(string); setResult(string);
} }
}.execute(); }.execute();
} }
public void onQueryFeaturedDbButtonClick(View view) {
setResult("");
hideSummary();
new AsyncTask<Void, Void, FeaturedDatabaseItem>() {
@Override
protected FeaturedDatabaseItem doInBackground(Void... voids) {
FeaturedDatabaseItem item = DatabaseSingleton.getFeaturedDatabase()
.getDbItemByNumber(getNumber());
return item;
}
@Override
protected void onPostExecute(FeaturedDatabaseItem item) {
setResult(item != null ? item.toString()
: DebugActivity.this.getString(R.string.debug_not_found));
}
}.execute();
}
public void onLoadReviewsButtonClick(View view) { public void onLoadReviewsButtonClick(View view) {
ReviewsActivity.startForNumber(this, getNumber()); ReviewsActivity.startForNumber(this, getNumber());
} }
public void onDbInfoButtonClick(View view) {
setResult("");
hideSummary();
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
StringBuilder sb = new StringBuilder();
CommunityDatabase communityDatabase = DatabaseSingleton.getCommunityDatabase();
sb.append("DB info:\n");
sb.append("Operational: ").append(communityDatabase.isOperational()).append('\n');
sb.append("Base version: ").append(communityDatabase.getBaseDbVersion());
sb.append(" (SIA: ").append(communityDatabase.getSiaAppVersion()).append(")\n");
sb.append("Effective version: ").append(communityDatabase.getEffectiveDbVersion()).append('\n');
sb.append("Last update time: ").append(new Date(App.getSettings().getLastUpdateTime())).append('\n');
sb.append("Last update check time: ").append(new Date(App.getSettings().getLastUpdateCheckTime())).append('\n');
FeaturedDatabase featuredDatabase = DatabaseSingleton.getFeaturedDatabase();
sb.append("Featured DB info:\n");
sb.append("Operational: ").append(featuredDatabase.isOperational()).append('\n');
sb.append("Effective version: ").append(featuredDatabase.getBaseDbVersion()).append('\n');
return sb.toString();
}
@Override
protected void onPostExecute(String info) {
setResult(info);
}
}.execute();
}
public void onUpdateDbButtonClick(View view) { public void onUpdateDbButtonClick(View view) {
setResult(""); setResult("");
hideSummary(); hideSummary();

View File

@ -7,6 +7,8 @@ public class Settings {
private static final String PREF_INCOMING_CALL_NOTIFICATIONS = "incomingCallNotifications"; private static final String PREF_INCOMING_CALL_NOTIFICATIONS = "incomingCallNotifications";
private static final String PREF_BLOCK_CALLS = "blockCalls"; private static final String PREF_BLOCK_CALLS = "blockCalls";
private static final String PREF_LAST_UPDATE_TIME = "lastUpdateTime";
private static final String PREF_LAST_UPDATE_CHECK_TIME = "lastUpdateCheckTime";
private final SharedPreferences pref; private final SharedPreferences pref;
@ -30,6 +32,22 @@ public class Settings {
setBoolean(PREF_BLOCK_CALLS, block); setBoolean(PREF_BLOCK_CALLS, block);
} }
public long getLastUpdateTime() {
return getLong(PREF_LAST_UPDATE_TIME, 0);
}
public void setLastUpdateTime(long timestamp) {
setLong(PREF_LAST_UPDATE_TIME, timestamp);
}
public long getLastUpdateCheckTime() {
return getLong(PREF_LAST_UPDATE_CHECK_TIME, 0);
}
public void setLastUpdateCheckTime(long timestamp) {
setLong(PREF_LAST_UPDATE_CHECK_TIME, timestamp);
}
public boolean getBoolean(String key) { public boolean getBoolean(String key) {
return getBoolean(key, false); return getBoolean(key, false);
} }
@ -38,8 +56,16 @@ public class Settings {
return pref.getBoolean(key, defValue); return pref.getBoolean(key, defValue);
} }
private void setBoolean(String key, boolean value) { public void setBoolean(String key, boolean value) {
pref.edit().putBoolean(key, value).apply(); pref.edit().putBoolean(key, value).apply();
} }
public long getLong(String key, long defValue) {
return pref.getLong(key, defValue);
}
public void setLong(String key, long value) {
pref.edit().putLong(key, value).apply();
}
} }

View File

@ -40,6 +40,11 @@ public abstract class AbstractDatabase<T extends AbstractDatabaseDataSlice<V>, V
return loaded; return loaded;
} }
public int getBaseDbVersion() {
checkLoaded();
return baseDatabaseVersion;
}
public boolean reload() { public boolean reload() {
return load(); return load();
} }

View File

@ -219,12 +219,12 @@ public class CommunityDatabase extends AbstractDatabase<CommunityDatabaseDataSli
FileUtils.createDirectory(getDataDir(), getSecondaryDbPathPrefix()); FileUtils.createDirectory(getDataDir(), getSecondaryDbPathPrefix());
} }
public void updateSecondaryDb() { public boolean updateSecondaryDb() {
LOG.info("updateSecondaryDb() started"); LOG.info("updateSecondaryDb() started");
if (!isOperational()) { if (!isOperational()) {
LOG.warn("updateSecondaryDb() DB is not operational, update aborted"); LOG.warn("updateSecondaryDb() DB is not operational, update aborted");
return; return false;
} }
long startTimestamp = System.currentTimeMillis(); long startTimestamp = System.currentTimeMillis();
@ -249,6 +249,8 @@ public class CommunityDatabase extends AbstractDatabase<CommunityDatabaseDataSli
} }
LOG.info("updateSecondaryDb() finished in {} ms", System.currentTimeMillis() - startTimestamp); LOG.info("updateSecondaryDb() finished in {} ms", System.currentTimeMillis() - startTimestamp);
return updated;
} }
private UpdateResult updateSecondaryDbInternal() { private UpdateResult updateSecondaryDbInternal() {

View File

@ -15,8 +15,10 @@ import androidx.core.content.ContextCompat;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import dummydomain.yetanothercallblocker.App;
import dummydomain.yetanothercallblocker.NotificationHelper; import dummydomain.yetanothercallblocker.NotificationHelper;
import dummydomain.yetanothercallblocker.R; import dummydomain.yetanothercallblocker.R;
import dummydomain.yetanothercallblocker.Settings;
import dummydomain.yetanothercallblocker.event.MainDbDownloadFinishedEvent; import dummydomain.yetanothercallblocker.event.MainDbDownloadFinishedEvent;
import dummydomain.yetanothercallblocker.event.MainDbDownloadingEvent; import dummydomain.yetanothercallblocker.event.MainDbDownloadingEvent;
import dummydomain.yetanothercallblocker.event.SecondaryDbUpdateFinished; import dummydomain.yetanothercallblocker.event.SecondaryDbUpdateFinished;
@ -111,11 +113,16 @@ public class TaskService extends IntentService {
} }
private void updateSecondaryDb() { private void updateSecondaryDb() {
Settings settings = App.getSettings();
SecondaryDbUpdatingEvent sticky = new SecondaryDbUpdatingEvent(); SecondaryDbUpdatingEvent sticky = new SecondaryDbUpdatingEvent();
postStickyEvent(sticky); postStickyEvent(sticky);
try { try {
DatabaseSingleton.getCommunityDatabase().updateSecondaryDb(); if (DatabaseSingleton.getCommunityDatabase().updateSecondaryDb()) {
settings.setLastUpdateTime(System.currentTimeMillis());
}
settings.setLastUpdateCheckTime(System.currentTimeMillis());
} finally { } finally {
removeStickyEvent(sticky); removeStickyEvent(sticky);
} }

View File

@ -6,14 +6,19 @@ import androidx.annotation.NonNull;
import androidx.work.Worker; import androidx.work.Worker;
import androidx.work.WorkerParameters; import androidx.work.WorkerParameters;
import org.greenrobot.eventbus.EventBus;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import dummydomain.yetanothercallblocker.App;
import dummydomain.yetanothercallblocker.Settings;
import dummydomain.yetanothercallblocker.event.SecondaryDbUpdateFinished; import dummydomain.yetanothercallblocker.event.SecondaryDbUpdateFinished;
import dummydomain.yetanothercallblocker.event.SecondaryDbUpdatingEvent; import dummydomain.yetanothercallblocker.event.SecondaryDbUpdatingEvent;
import dummydomain.yetanothercallblocker.sia.DatabaseSingleton; import dummydomain.yetanothercallblocker.sia.DatabaseSingleton;
import static dummydomain.yetanothercallblocker.EventUtils.postEvent;
import static dummydomain.yetanothercallblocker.EventUtils.postStickyEvent;
import static dummydomain.yetanothercallblocker.EventUtils.removeStickyEvent;
public class UpdateWorker extends Worker { public class UpdateWorker extends Worker {
private static final Logger LOG = LoggerFactory.getLogger(UpdateWorker.class); private static final Logger LOG = LoggerFactory.getLogger(UpdateWorker.class);
@ -27,18 +32,21 @@ public class UpdateWorker extends Worker {
public Result doWork() { public Result doWork() {
LOG.info("doWork() started"); LOG.info("doWork() started");
EventBus bus = EventBus.getDefault(); Settings settings = App.getSettings();
SecondaryDbUpdatingEvent sticky = new SecondaryDbUpdatingEvent(); SecondaryDbUpdatingEvent sticky = new SecondaryDbUpdatingEvent();
bus.postSticky(sticky); postStickyEvent(sticky);
try { try {
DatabaseSingleton.getCommunityDatabase().updateSecondaryDb(); if (DatabaseSingleton.getCommunityDatabase().updateSecondaryDb()) {
settings.setLastUpdateTime(System.currentTimeMillis());
}
settings.setLastUpdateCheckTime(System.currentTimeMillis());
} finally { } finally {
bus.removeStickyEvent(sticky); removeStickyEvent(sticky);
} }
bus.post(new SecondaryDbUpdateFinished()); postEvent(new SecondaryDbUpdateFinished());
LOG.info("doWork() finished"); LOG.info("doWork() finished");
return Result.success(); return Result.success();

View File

@ -28,14 +28,14 @@
<Button <Button
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:onClick="onQueryFeaturedDbButtonClick" android:onClick="onLoadReviewsButtonClick"
android:text="@string/debug_query_featured_db" /> android:text="@string/debug_load_reviews" />
<Button <Button
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:onClick="onLoadReviewsButtonClick" android:onClick="onDbInfoButtonClick"
android:text="@string/debug_load_reviews" /> android:text="@string/debug_db_info" />
<Button <Button
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -25,7 +25,6 @@
<string name="open_debug_activity">Открыть экран отладки</string> <string name="open_debug_activity">Открыть экран отладки</string>
<string name="debug_activity_label">Отладка</string> <string name="debug_activity_label">Отладка</string>
<string name="debug_query_db">Искать в общей базе</string> <string name="debug_query_db">Искать в общей базе</string>
<string name="debug_query_featured_db">Искать в базе организаций</string>
<string name="debug_load_reviews">Показать online-отзывы</string> <string name="debug_load_reviews">Показать online-отзывы</string>
<string name="debug_update_db">Обновить базы</string> <string name="debug_update_db">Обновить базы</string>
<string name="debug_not_found">Не найдено</string> <string name="debug_not_found">Не найдено</string>

View File

@ -75,9 +75,9 @@
<string name="open_debug_activity">Open debug screen</string> <string name="open_debug_activity">Open debug screen</string>
<string name="debug_activity_label">Debug</string> <string name="debug_activity_label">Debug</string>
<string name="debug_query_db">Query DB</string> <string name="debug_query_db">Query DB</string>
<string name="debug_query_featured_db">Query featured DB</string>
<string name="debug_load_reviews">Load reviews (online)</string> <string name="debug_load_reviews">Load reviews (online)</string>
<string name="debug_default_test_number" translatable="false">74995861192</string> <string name="debug_default_test_number" translatable="false">74995861192</string>
<string name="debug_db_info">DB info</string>
<string name="debug_update_db">Manually update DB</string> <string name="debug_update_db">Manually update DB</string>
<string name="debug_not_found">Not found</string> <string name="debug_not_found">Not found</string>
<string name="debug_update_result">Update finished; DB ver: %d</string> <string name="debug_update_result">Update finished; DB ver: %d</string>