Add import/export db for QA #9766

This commit is contained in:
George Dregalo
2020-05-19 07:37:04 -04:00
committed by samartnik
parent 341632a5ba
commit 5449d97bf6
2 changed files with 181 additions and 50 deletions
@@ -5,21 +5,37 @@
package org.chromium.chrome.browser.settings.developer;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.Toast;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.lang.SecurityException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.chromium.base.ContextUtils;
import org.chromium.base.FileUtils;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.BraveConfig;
import org.chromium.chrome.browser.BraveRelaunchUtils;
@@ -31,6 +47,8 @@ import org.chromium.chrome.browser.settings.BravePreferenceFragment;
import org.chromium.chrome.browser.settings.ChromeSwitchPreference;
import org.chromium.chrome.browser.settings.SettingsUtils;
import org.chromium.base.Log;
/**
* Settings fragment containing preferences for QA team.
*/
@@ -42,6 +60,13 @@ public class BraveQAPreferences extends BravePreferenceFragment
private static final String PREF_QA_DEBUG_NTP= "qa_debug_ntp";
private static final String QA_ADS_PER_HOUR = "qa_ads_per_hour";
private static final String QA_IMPORT_REWARDS_DB = "qa_import_rewards_db";
private static final String QA_EXPORT_REWARDS_DB = "qa_export_rewards_db";
private static final String PUBLISHER_INFO_DB = "publisher_info_db";
private static final String REWARDS_DB_SRC_DIR = "app_chrome/Default";
private static final String REWARDS_DB_DST_DIR = "rewards";
private static final int STORAGE_PERMISSION_REQUEST_CODE = 8000;
private static final int MAX_ADS = 50;
private static final int DEFAULT_ADS_PER_HOUR = 2;
@@ -50,6 +75,12 @@ public class BraveQAPreferences extends BravePreferenceFragment
private ChromeSwitchPreference mMaximizeAdsNumber;
private ChromeSwitchPreference mDebugNTP;
private Preference mImportRewardsDb;
private Preference mExportRewardsDb;
private String mRewardsSrc;
private String mRewardsDst;
private String mRewardsDstDir;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -71,6 +102,146 @@ public class BraveQAPreferences extends BravePreferenceFragment
if(mDebugNTP != null) {
mDebugNTP.setOnPreferenceChangeListener(this);
}
mImportRewardsDb = findPreference(QA_IMPORT_REWARDS_DB);
mExportRewardsDb = findPreference(QA_EXPORT_REWARDS_DB);
setRewardsDbClickListeners();
}
private void setRewardsDbClickListeners() {
if (mImportRewardsDb != null) {
mImportRewardsDb.setOnPreferenceClickListener( preference -> {
Context context = ContextUtils.getApplicationContext();
mRewardsDst = context.getApplicationInfo().dataDir +
File.separator + REWARDS_DB_SRC_DIR +
File.separator + PUBLISHER_INFO_DB;
mRewardsSrc = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() +
File.separator + REWARDS_DB_DST_DIR + File.separator +
PUBLISHER_INFO_DB;
mRewardsDstDir = "";
if (isStoragePermissionGranted()) {
copyRewardsDbThread();
}
return true;
});
}
if (mExportRewardsDb != null) {
mExportRewardsDb.setOnPreferenceClickListener( preference -> {
Context context = ContextUtils.getApplicationContext();
mRewardsSrc = context.getApplicationInfo().dataDir +
File.separator + REWARDS_DB_SRC_DIR + File.separator +
PUBLISHER_INFO_DB;
mRewardsDstDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() +
File.separator + REWARDS_DB_DST_DIR;
SimpleDateFormat dateFormat =
new SimpleDateFormat("-yyyy-MM-dd-HHmmss");
mRewardsDst = mRewardsDstDir + File.separator +
PUBLISHER_INFO_DB + dateFormat.format(new Date());
if (isStoragePermissionGranted()) {
copyRewardsDbThread();
}
return true;
});
}
}
private void copyRewardsDbThread() {
// disable UI before starting the thread
mExportRewardsDb.setEnabled(false);
new Thread( () -> {
String erroMsg = "";
// create dest dir if necessary
if (!TextUtils.isEmpty(mRewardsDstDir)) {
if ( !createDstDir (mRewardsDstDir)) {
erroMsg = "Failed to create destination directory";
}
}
// no errors so far: copy the file
if (TextUtils.isEmpty(erroMsg)) {
boolean succeeded = copyFile(mRewardsSrc, mRewardsDst);
if (! succeeded) {
erroMsg = "Failed to copy db file";
}
}
// update UI
final String msg = (!TextUtils.isEmpty(erroMsg)) ? erroMsg : "Success";
getActivity().runOnUiThread( () -> {
Context context = ContextUtils.getApplicationContext();
Toast.makeText(context , msg, Toast.LENGTH_SHORT).show();
mExportRewardsDb.setEnabled(true);
});
}).start();
}
private boolean copyFile(String src, String dst) {
boolean succeeded = false;
try {
InputStream in = new FileInputStream(src);
FileUtils.copyStreamToFile(in, new File(dst));
succeeded = true;
}
catch (IOException e) {
}
return succeeded;
}
private boolean createDstDir(String dir) {
boolean succeeded = false;
File dst = new File(dir);
try {
if (! dst.exists()) {
succeeded = dst.mkdirs();
}
else {
succeeded = true;
}
}
catch (SecurityException e) {
succeeded = false;
}
return succeeded;
}
private boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Context context = ContextUtils.getApplicationContext();
if (context.checkSelfPermission(
android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
return true;
} else {
ActivityCompat.requestPermissions(getActivity(),
new String[]
{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},
STORAGE_PERMISSION_REQUEST_CODE);
return false;
}
}
else {
return true;
}
}
@Override
public void onRequestPermissionsResult(
int requestCode, String[] permissions, int[] grantResults) {
if (STORAGE_PERMISSION_REQUEST_CODE == requestCode &&
grantResults.length > 0 &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
copyRewardsDbThread();
}
}
@Override
@@ -176,49 +347,6 @@ public class BraveQAPreferences extends BravePreferenceFragment
BraveRewardsNativeWorker.getInstance().SetAdsPerHour(adsPerHour);
}
@Override
public void OnWalletInitialized(int error_code) {}
@Override
public void OnWalletProperties(int error_code) {}
@Override
public void OnPublisherInfo(int tabId) {}
@Override
public void OnGetCurrentBalanceReport(double[] report) {}
@Override
public void OnNotificationAdded(String id, int type, long timestamp, String[] args) {}
@Override
public void OnNotificationsCount(int count) {}
@Override
public void OnGetLatestNotification(String id, int type, long timestamp, String[] args) {}
@Override
public void OnNotificationDeleted(String id) {}
@Override
public void OnIsWalletCreated(boolean created) {}
@Override
public void OnGetPendingContributionsTotal(double amount) {}
@Override
public void OnGetRewardsMainEnabled(boolean enabled) {
}
@Override
public void OnGetAutoContributeProps() {}
@Override
public void OnGetReconcileStamp(long timestamp) {}
@Override
public void OnRecurringDonationUpdated() {}
@Override
public void OnResetTheWholeState(boolean success) {
if (success) {
@@ -234,12 +362,6 @@ public class BraveQAPreferences extends BravePreferenceFragment
}
}
@Override
public void OnRewardsMainEnabled(boolean enabled) {}
@Override
public void OnFetchPromotions() {}
@Override
public void onCreatePreferences(Bundle bundle, String s) {}
}
+10 -1
View File
@@ -26,5 +26,14 @@
android:summaryOn="@string/text_on"
android:summaryOff="@string/text_off"
android:defaultValue="false" />
<PreferenceCategory android:title="Database">
<org.chromium.chrome.browser.settings.ChromeBasePreference
android:key="qa_import_rewards_db"
android:title="Import Rewards Database"/>
<org.chromium.chrome.browser.settings.ChromeBasePreference
android:key="qa_export_rewards_db"
android:title="Export Rewards Database"/>
</PreferenceCategory>
</PreferenceScreen>