Merge branch 'GnuCash' into 'master'

Update GnuCash to 1.6.0 (16006)

Note: I patched it to disable Google Drive & Dropbox syncing options. I didn't test the APK yet.

See merge request !844
master
Boris Kraut 2015-07-01 16:27:40 +00:00
commit b097c7144c
2 changed files with 466 additions and 4 deletions

View File

@ -143,8 +143,38 @@ Build:1.5.5,48
prebuild=mv java src
target=android-21
Auto Update Mode:Version v%v
Update Check Mode:Tags v[0-9.]*$
Current Version:1.5.5
Current Version Code:48
Build:1.6.0,16006
commit=v1.6.0
subdir=app
gradle=production
rm=app/libs/*.jar;app/src/main/jniLibs/*/*
patch=disable_gms_dropbox.diff
srclibs=CWACMerge@v1.1.1,CWACSacklist@v1.0.2,MPAndroidChart@v2.1.0,ViewPagerIndicator@2.4.1
prebuild=sed -e "/\<Crashlytics\>/ d" -i `grep -lr "\<Crashlytics\>" src/main/java/` && \
sed -e "/crashlytics/ d" -i build.gradle ../build.gradle && \
sed -e "/gms/ d" -i build.gradle && \
sed -e "/cwac/ d" -i build.gradle && \
sed -e "/maven\s*{\s*url.*}/ d" -i ../build.gradle && \
cp -fR $$CWACMerge$$/merge/src/com src/main/java/ && \
cp -fR $$CWACSacklist$$/sacklist/src/com src/main/java/ && \
cp -fR $$MPAndroidChart$$/src/com/ src/main/java/ && \
cp -fR $$ViewPagerIndicator$$ ../ViewPagerIndicator && \
rm -f ../ViewPagerIndicator/libs/*.jar && \
echo "include ':ViewPagerIndicator'" >> ../settings.gradle && \
echo -e "apply plugin: 'com.android.library' \
\nandroid { compileSdkVersion 21 \n buildToolsVersion \"22.0.1\"" > ../ViewPagerIndicator/build.gradle && \
echo -e "lintOptions.abortOnError = false \
\n sourceSets{main{ \
\n manifest.srcFile 'AndroidManifest.xml' \
\n java.srcDirs = ['src'] \
\n res.srcDirs = ['res'] }}} \
\n dependencies {compile 'com.android.support:support-v4:22.1.1'}" >> ../ViewPagerIndicator/build.gradle && \
sed -i -e "s/.*viewpagerindicator.*/project(':ViewPagerIndicator'),/" build.gradle && \
sed -i -e "/MPAndroidChart/d" build.gradle && \
sed -i -e '/variant.outputs.each/,/ }/ d' build.gradle
Auto Update Mode:Version v%v
Update Check Mode:Tags v[0-9.]*
Current Version:1.6.0
Current Version Code:16006

View File

@ -0,0 +1,432 @@
diff --git a/app/src/main/java/org/gnucash/android/ui/export/ExportDialogFragment.java b/app/src/main/java/org/gnucash/android/ui/export/ExportDialogFragment.java
index 6df927c..6b8da42 100644
--- a/app/src/main/java/org/gnucash/android/ui/export/ExportDialogFragment.java
+++ b/app/src/main/java/org/gnucash/android/ui/export/ExportDialogFragment.java
@@ -39,7 +39,6 @@ import android.widget.TextView;
import com.doomonafireball.betterpickers.recurrencepicker.EventRecurrence;
import com.doomonafireball.betterpickers.recurrencepicker.EventRecurrenceFormatter;
import com.doomonafireball.betterpickers.recurrencepicker.RecurrencePickerDialog;
-import com.dropbox.sync.android.DbxAccountManager;
import org.gnucash.android.R;
import org.gnucash.android.app.GnuCashApplication;
@@ -215,23 +214,6 @@ public class ExportDialogFragment extends DialogFragment implements RecurrencePi
mExportTarget = ExportParams.ExportTarget.SD_CARD;
recurrenceOptionsView.setVisibility(View.VISIBLE);
break;
- case 1:
- recurrenceOptionsView.setVisibility(View.VISIBLE);
- mExportTarget = ExportParams.ExportTarget.DROPBOX;
- String dropboxAppKey = getString(R.string.dropbox_app_key, SettingsActivity.DROPBOX_APP_KEY);
- String dropboxAppSecret = getString(R.string.dropbox_app_secret, SettingsActivity.DROPBOX_APP_SECRET);
- DbxAccountManager mDbxAccountManager = DbxAccountManager.getInstance(getActivity().getApplicationContext(),
- dropboxAppKey, dropboxAppSecret);
- if (!mDbxAccountManager.hasLinkedAccount()){
- mDbxAccountManager.startLink(getActivity(), 0);
- }
- break;
- case 2:
- recurrenceOptionsView.setVisibility(View.VISIBLE);
- mExportTarget = ExportParams.ExportTarget.GOOGLE_DRIVE;
- SettingsActivity.mGoogleApiClient = SettingsActivity.getGoogleApiClient(getActivity());
- SettingsActivity.mGoogleApiClient.connect();
- break;
case 3:
mExportTarget = ExportParams.ExportTarget.SHARING;
recurrenceOptionsView.setVisibility(View.GONE);
@@ -344,9 +326,6 @@ public class ExportDialogFragment extends DialogFragment implements RecurrencePi
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == SettingsActivity.REQUEST_RESOLVE_CONNECTION && resultCode == Activity.RESULT_OK) {
- SettingsActivity.mGoogleApiClient.connect();
- }
}
}
diff --git a/app/src/main/java/org/gnucash/android/ui/settings/BackupPreferenceFragment.java b/app/src/main/java/org/gnucash/android/ui/settings/BackupPreferenceFragment.java
index 4c7dc24..9d5101f 100644
--- a/app/src/main/java/org/gnucash/android/ui/settings/BackupPreferenceFragment.java
+++ b/app/src/main/java/org/gnucash/android/ui/settings/BackupPreferenceFragment.java
@@ -77,14 +77,6 @@ public class BackupPreferenceFragment extends PreferenceFragment implements OnPr
pref = findPreference(getString(R.string.key_create_backup));
pref.setOnPreferenceClickListener((SettingsActivity)getActivity());
-
- pref = findPreference(getString(R.string.key_dropbox_sync));
- pref.setOnPreferenceClickListener((SettingsActivity)getActivity());
- ((SettingsActivity)getActivity()).toggleDropboxPreference(pref);
-
- pref = findPreference(getString(R.string.key_google_drive_sync));
- pref.setOnPreferenceClickListener((SettingsActivity) getActivity());
- ((SettingsActivity)getActivity()).toggleGoogleDrivePreference(pref);
}
/**
diff --git a/app/src/main/java/org/gnucash/android/ui/settings/SettingsActivity.java b/app/src/main/java/org/gnucash/android/ui/settings/SettingsActivity.java
index a4ef751..7c4f2c7 100644
--- a/app/src/main/java/org/gnucash/android/ui/settings/SettingsActivity.java
+++ b/app/src/main/java/org/gnucash/android/ui/settings/SettingsActivity.java
@@ -40,15 +40,6 @@ import android.widget.Toast;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
import com.actionbarsherlock.view.MenuItem;
-import com.crashlytics.android.Crashlytics;
-import com.dropbox.sync.android.DbxAccountManager;
-import com.google.android.gms.common.ConnectionResult;
-import com.google.android.gms.common.GooglePlayServicesUtil;
-import com.google.android.gms.common.api.GoogleApiClient;
-import com.google.android.gms.common.api.ResultCallback;
-import com.google.android.gms.drive.Drive;
-import com.google.android.gms.drive.DriveFolder;
-import com.google.android.gms.drive.MetadataChangeSet;
import org.gnucash.android.R;
import org.gnucash.android.app.GnuCashApplication;
@@ -125,11 +116,6 @@ public class SettingsActivity extends SherlockPreferenceActivity implements OnPr
* Only useful on devices with API level < 11
*/
private int mDeleteTransactionsClickCount;
- private DbxAccountManager mDbxAccountManager;
- /**
- * Client for Google Drive Sync
- */
- public static GoogleApiClient mGoogleApiClient;
/**
* Constructs the headers to display in the header list when the Settings activity is first opened
@@ -146,13 +132,6 @@ public class SettingsActivity extends SherlockPreferenceActivity implements OnPr
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- String dropboxAppKey = getString(R.string.dropbox_app_key, DROPBOX_APP_KEY);
- String dropboxAppSecret = getString(R.string.dropbox_app_secret, DROPBOX_APP_SECRET);
- mDbxAccountManager = DbxAccountManager.getInstance(getApplicationContext(),
- dropboxAppKey, dropboxAppSecret);
-
- mGoogleApiClient = getGoogleApiClient(this);
-
//retrieve version from Manifest and set it
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(R.string.title_settings);
@@ -189,14 +168,6 @@ public class SettingsActivity extends SherlockPreferenceActivity implements OnPr
pref = findPreference(getString(R.string.key_change_passcode));
pref.setOnPreferenceClickListener(this);
- pref = findPreference(getString(R.string.key_dropbox_sync));
- toggleDropboxPreference(pref);
- pref.setOnPreferenceClickListener(this);
-
- pref = findPreference(getString(R.string.key_google_drive_sync));
- pref.setOnPreferenceClickListener(this);
- toggleGoogleDrivePreference(pref);
-
pref = findPreference(getString(R.string.key_create_backup));
pref.setOnPreferenceClickListener(this);
@@ -317,16 +288,6 @@ public class SettingsActivity extends SherlockPreferenceActivity implements OnPr
return true;
}
- if (key.equals(getString(R.string.key_dropbox_sync))){
- toggleDropboxSync();
- toggleDropboxPreference(preference);
- }
-
- if (key.equals(getString(R.string.key_google_drive_sync))){
- toggleGoogleDriveSync();
- toggleGoogleDrivePreference(preference);
- }
-
if (key.equals(getString(R.string.key_create_backup))){
boolean result = GncXmlExporter.createBackup();
int msg = result ? R.string.toast_backup_successful : R.string.toast_backup_failed;
@@ -385,110 +346,6 @@ public class SettingsActivity extends SherlockPreferenceActivity implements OnPr
}
/**
- * Toggles the authorization state of a DropBox account.
- * If a link exists, it is removed else DropBox authorization is started
- */
- private void toggleDropboxSync() {
- if (mDbxAccountManager.hasLinkedAccount()){
- mDbxAccountManager.unlink();
- } else {
- mDbxAccountManager.startLink(this, REQUEST_LINK_TO_DBX);
- }
- }
-
- /**
- * Toggles synchronization with Google Drive on or off
- */
- private void toggleGoogleDriveSync(){
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- final String appFolderId = sharedPreferences.getString(getString(R.string.key_google_drive_app_folder_id), null);
- if (appFolderId != null){
- sharedPreferences.edit().remove(getString(R.string.key_google_drive_app_folder_id)).commit(); //commit (not apply) because we need it to be saved *now*
- mGoogleApiClient.disconnect();
- } else {
- mGoogleApiClient.connect();
- }
- }
-
- /**
- * Toggles the checkbox of the DropBox Sync preference if a DropBox account is linked
- * @param pref DropBox Sync preference
- */
- public void toggleDropboxPreference(Preference pref) {
- ((CheckBoxPreference)pref).setChecked(mDbxAccountManager.hasLinkedAccount());
- }
-
- /**
- * Toggles the checkbox of the GoogleDrive Sync preference if a Google Drive account is linked
- * @param pref Google Drive Sync preference
- */
- public void toggleGoogleDrivePreference(Preference pref){
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- String appFolderId = sharedPreferences.getString(getString(R.string.key_google_drive_app_folder_id),null);
- ((CheckBoxPreference)pref).setChecked(appFolderId != null);
- }
-
-
- public static GoogleApiClient getGoogleApiClient(final Context context) {
- return new GoogleApiClient.Builder(context)
- .addApi(Drive.API)
- .addScope(Drive.SCOPE_APPFOLDER)
- .addScope(Drive.SCOPE_FILE)
- .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
- @Override
- public void onConnected(Bundle bundle) {
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
- String appFolderId = sharedPreferences.getString(context.getString(R.string.key_google_drive_app_folder_id), null);
- if (appFolderId == null) {
- MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
- .setTitle(context.getString(R.string.app_name)).build();
- Drive.DriveApi.getRootFolder(mGoogleApiClient).createFolder(
- mGoogleApiClient, changeSet).setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
- @Override
- public void onResult(DriveFolder.DriveFolderResult result) {
- if (!result.getStatus().isSuccess()) {
- Log.e(LOG_TAG, "Error creating the application folder");
- return;
- }
-
- String folderId = result.getDriveFolder().getDriveId().toString();
- PreferenceManager.getDefaultSharedPreferences(context)
- .edit().putString(context.getString(R.string.key_google_drive_app_folder_id),
- folderId).commit(); //commit because we need it to be saved *now*
- }
- });
-
- }
- Toast.makeText(context, "Connected to Google Drive", Toast.LENGTH_SHORT).show();
- }
-
- @Override
- public void onConnectionSuspended(int i) {
- Toast.makeText(context, "Connection to Google Drive suspended!", Toast.LENGTH_LONG).show();
- }
- })
- .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
- @Override
- public void onConnectionFailed(ConnectionResult connectionResult) {
- Log.e(SettingsActivity.class.getName(), "Connection to Google Drive failed");
- if (connectionResult.hasResolution() && context instanceof Activity) {
- try {
- Log.e(SettingsActivity.class.getName(), "Trying resolution of Google API connection failure");
- connectionResult.startResolutionForResult((Activity) context, REQUEST_RESOLVE_CONNECTION);
- } catch (IntentSender.SendIntentException e) {
- Log.e(SettingsActivity.class.getName(), e.getMessage());
- Toast.makeText(context, "Unable to link to Google Drive", Toast.LENGTH_LONG).show();
- }
- } else {
- if (context instanceof Activity)
- GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), (Activity) context, 0).show();
- }
- }
- })
- .build();
- }
-
- /**
* Resets the tap counter for preferences which need to be double-tapped
*/
private class ResetCounter extends TimerTask {
@@ -631,20 +484,9 @@ public class SettingsActivity extends SherlockPreferenceActivity implements OnPr
break;
case REQUEST_LINK_TO_DBX:
- Preference preference = findPreference(getString(R.string.key_dropbox_sync));
- if (preference == null) //if we are in a preference header fragment, this may return null
- break;
- toggleDropboxPreference(preference);
break;
case REQUEST_RESOLVE_CONNECTION:
- if (resultCode == RESULT_OK) {
- mGoogleApiClient.connect();
- Preference pref = findPreference(getString(R.string.key_dropbox_sync));
- if (pref == null) //if we are in a preference header fragment, this may return null
- break;
- toggleDropboxPreference(pref);
- }
break;
}
}
diff --git a/app/src/main/java/org/gnucash/android/export/ExportAsyncTask.java b/app/src/main/java/org/gnucash/android/export/ExportAsyncTask.java
index ba20e61..0833f79 100644
--- a/app/src/main/java/org/gnucash/android/export/ExportAsyncTask.java
+++ b/app/src/main/java/org/gnucash/android/export/ExportAsyncTask.java
@@ -30,21 +30,6 @@ import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;
-import com.crashlytics.android.Crashlytics;
-import com.dropbox.sync.android.DbxAccountManager;
-import com.dropbox.sync.android.DbxException;
-import com.dropbox.sync.android.DbxFile;
-import com.dropbox.sync.android.DbxFileSystem;
-import com.dropbox.sync.android.DbxPath;
-import com.google.android.gms.common.api.GoogleApiClient;
-import com.google.android.gms.common.api.ResultCallback;
-import com.google.android.gms.drive.Drive;
-import com.google.android.gms.drive.DriveApi;
-import com.google.android.gms.drive.DriveContents;
-import com.google.android.gms.drive.DriveFolder;
-import com.google.android.gms.drive.DriveId;
-import com.google.android.gms.drive.MetadataChangeSet;
-
import org.gnucash.android.R;
import org.gnucash.android.app.GnuCashApplication;
import org.gnucash.android.db.AccountsDbAdapter;
@@ -178,14 +162,6 @@ public class ExportAsyncTask extends AsyncTask<ExportParams, Void, Boolean> {
shareFile(mExportParams.getTargetFilepath());
return true;
- case DROPBOX:
- copyExportToDropbox();
- return true;
-
- case GOOGLE_DRIVE:
- copyExportToGoogleDrive();
- return true;
-
case SD_CARD:
copyExportToSDCard();
return true;
@@ -215,9 +191,6 @@ public class ExportAsyncTask extends AsyncTask<ExportParams, Void, Boolean> {
case DROPBOX:
targetLocation = "DropBox -> Apps -> GnuCash";
break;
- case GOOGLE_DRIVE:
- targetLocation = "Google Drive -> " + mContext.getString(R.string.app_name);
- break;
default:
targetLocation = "external service";
}
@@ -246,68 +219,6 @@ public class ExportAsyncTask extends AsyncTask<ExportParams, Void, Boolean> {
}
}
- private void copyExportToGoogleDrive(){
- Log.i(TAG, "Moving exported file to Google Drive");
- final GoogleApiClient googleApiClient = SettingsActivity.getGoogleApiClient(GnuCashApplication.getAppContext());
- googleApiClient.blockingConnect();
- final ResultCallback<DriveFolder.DriveFileResult> fileCallback = new
- ResultCallback<DriveFolder.DriveFileResult>() {
- @Override
- public void onResult(DriveFolder.DriveFileResult result) {
- if (!result.getStatus().isSuccess()) {
- Log.e(TAG, "Error while trying to sync to Google Drive");
- return;
- }
- Log.i(TAG, "Created a file with content: " + result.getDriveFile().getDriveId());
- }
- };
-
- Drive.DriveApi.newDriveContents(googleApiClient).setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() {
- @Override
- public void onResult(DriveApi.DriveContentsResult result) {
- if (!result.getStatus().isSuccess()) {
- Log.e(TAG, "Error while trying to create new file contents");
- return;
- }
- final DriveContents driveContents = result.getDriveContents();
- try {
- // write content to DriveContents
- OutputStream outputStream = driveContents.getOutputStream();
- List<String> exportedFilePaths = getExportedFiles();
- for (String exportedFilePath : exportedFilePaths) {
- File exportedFile = new File(exportedFilePath);
- FileInputStream fileInputStream = new FileInputStream(exportedFile);
- byte[] buffer = new byte[1024];
- int count = 0;
-
- while ((count = fileInputStream.read(buffer)) >= 0) {
- outputStream.write(buffer, 0, count);
- }
- fileInputStream.close();
- outputStream.flush();
- exportedFile.delete();
-
- MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
- .setTitle(exportedFile.getName())
- .setMimeType(getExportMimeType())
- .build();
-
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
- String folderId = sharedPreferences.getString(mContext.getString(R.string.key_google_drive_app_folder_id), "");
- DriveFolder folder = Drive.DriveApi.getFolder(googleApiClient, DriveId.decodeFromString(folderId));
- // create a file on root folder
- folder.createFile(googleApiClient, changeSet, driveContents)
- .setResultCallback(fileCallback);
- }
-
- } catch (IOException e) {
- Crashlytics.logException(e);
- Log.e(TAG, e.getMessage());
- }
- }
- });
- }
-
/**
* Returns the mime type for the configured export format
* @return MIME type as string
@@ -323,36 +234,6 @@ public class ExportAsyncTask extends AsyncTask<ExportParams, Void, Boolean> {
}
}
- private void copyExportToDropbox() {
- Log.i(TAG, "Copying exported file to DropBox");
- String dropboxAppKey = mContext.getString(R.string.dropbox_app_key, SettingsActivity.DROPBOX_APP_KEY);
- String dropboxAppSecret = mContext.getString(R.string.dropbox_app_secret, SettingsActivity.DROPBOX_APP_SECRET);
- DbxAccountManager mDbxAcctMgr = DbxAccountManager.getInstance(mContext.getApplicationContext(),
- dropboxAppKey, dropboxAppSecret);
- DbxFile dbExportFile = null;
- try {
- DbxFileSystem dbxFileSystem = DbxFileSystem.forAccount(mDbxAcctMgr.getLinkedAccount());
- List<String> exportedFilePaths = getExportedFiles();
- for (String exportedFilePath : exportedFilePaths) {
- File exportedFile = new File(exportedFilePath);
- dbExportFile = dbxFileSystem.create(new DbxPath(exportedFile.getName()));
- dbExportFile.writeFromExistingFile(exportedFile, false);
- exportedFile.delete();
- }
- } catch (DbxException.Unauthorized unauthorized) {
- Crashlytics.logException(unauthorized);
- Log.e(TAG, unauthorized.getMessage());
- throw new Exporter.ExporterException(mExportParams);
- } catch (IOException e) {
- Crashlytics.logException(e);
- Log.e(TAG, e.getMessage());
- } finally {
- if (dbExportFile != null) {
- dbExportFile.close();
- }
- }
- }
-
/**
* Returns the list of files generated by one export session.
* <p>Typically it is one file. But QIF export generate multiple files per currency.</p>