diff --git a/app/build.gradle b/app/build.gradle index 7bce85ebf..066b3104e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -93,7 +93,6 @@ dependencies { implementation 'org.apache.poi:poi:3.16' implementation 'com.github.mabbas007:TagsEditText:1.0.5' implementation 'com.jaredrummler:material-spinner:1.3.1' - implementation 'com.github.stom79:SQLite2XL:1.2' implementation "com.tonyodev.fetch2:fetch2:2.3.6" playstoreImplementation "io.github.kobakei:ratethisapp:$ratethisappLibraryVersion" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c266fa08..b32c4c837 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -112,6 +112,15 @@ android:pathPrefix="/@" /> + + + + + + + + = Build.VERSION_CODES.JELLY_BEAN) { if (ContextCompat.checkSelfPermission(BaseMainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { @@ -1420,12 +1420,12 @@ public abstract class BaseMainActivity extends BaseActivity intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { - intent.setType("application/vnd.ms-excel"); - String[] mimetypes = {"application/vnd.ms-excel"}; + intent.setType("*/*"); + String[] mimetypes = {"*/*"}; intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); startActivityForResult(intent, PICK_IMPORT); }else { - intent.setType("application/vnd.ms-excel"); + intent.setType("*/*"); Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); Intent chooserIntent = Intent.createChooser(intent, getString(R.string.toot_select_import)); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {pickIntent}); @@ -1439,40 +1439,7 @@ public abstract class BaseMainActivity extends BaseActivity return true; } } - SQLiteToExcel sqliteToExcel = new SQLiteToExcel(BaseMainActivity.this, DB_NAME); - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); - final String fileName = "Mastalab_export_"+timeStamp+".xls"; - List excludedValues = new ArrayList<>(); - excludedValues.add(Sqlite.TABLE_TRACKING_BLOCK); - excludedValues.add(Sqlite.TABLE_STATUSES_CACHE); - excludedValues.add(Sqlite.TABLE_CUSTOM_EMOJI); - excludedValues.add(Sqlite.TABLE_BOOST_SCHEDULE); - - sqliteToExcel.setExcludeValuesFromTables(excludedValues); - sqliteToExcel.exportAllTables(fileName, new SQLiteToExcel.ExportListener() { - @Override - public void onStart() { - - } - @Override - public void onCompleted(String filePath) { - final Intent intent = new Intent(); - Random r = new Random(); - final int notificationIdTmp = r.nextInt(10000); - File file = new File(filePath); - intent.setAction(android.content.Intent.ACTION_VIEW); - Uri uri = Uri.fromFile(file); - intent.setDataAndType(uri, "application/vnd.ms-excel"); - Helper.notify_user(getApplicationContext(), intent, notificationIdTmp, BitmapFactory.decodeResource(getResources(), - R.mipmap.ic_launcher), Helper.NotifType.STORE, getString(R.string.save_over), getString(R.string.download_from, fileName)); - Toasty.success(getApplicationContext(), getString(R.string.data_base_exported),Toast.LENGTH_LONG).show(); - } - @Override - public void onError(Exception e) { - e.printStackTrace(); - Toasty.error(getApplicationContext(), getString(R.string.data_export_error_simple),Toast.LENGTH_LONG).show(); - } - }); + exportDB(BaseMainActivity.this); return true; default: return true; @@ -2348,26 +2315,11 @@ public abstract class BaseMainActivity extends BaseActivity Toasty.error(getApplicationContext(),getString(R.string.toot_select_file_error),Toast.LENGTH_LONG).show(); return; } - ExcelToSQLite excelToSQLite = new ExcelToSQLite(getApplicationContext(), DB_NAME, true); String filename = Helper.getFilePathFromURI(getApplicationContext(), data.getData()); - assert filename != null; - excelToSQLite.importFromFile(filename, new ExcelToSQLite.ImportListener() { - @Override - public void onStart() { - Toasty.success(getApplicationContext(),getString(R.string.data_import_start),Toast.LENGTH_LONG).show(); - } + importDB(BaseMainActivity.this, filename); - @Override - public void onCompleted(String dbName) { - Toasty.success(getApplicationContext(),getString(R.string.data_import_success_simple),Toast.LENGTH_LONG).show(); - Helper.logoutCurrentUser(BaseMainActivity.this); - } - - @Override - public void onError(Exception e) { - Toasty.error(getApplicationContext(),getString(R.string.data_import_error_simple),Toast.LENGTH_LONG).show(); - } - }); + }else{ + Toasty.error(getApplicationContext(),getString(R.string.toot_select_file_error),Toast.LENGTH_LONG).show(); } } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java index 7425e1965..a802d608e 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/LoginActivity.java @@ -55,7 +55,6 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; -import com.ajts.androidmads.library.ExcelToSQLite; import com.elconfidencial.bubbleshowcase.BubbleShowCase; import com.elconfidencial.bubbleshowcase.BubbleShowCaseBuilder; import com.elconfidencial.bubbleshowcase.BubbleShowCaseListener; @@ -89,6 +88,7 @@ import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor; import static fr.gouv.etalab.mastodon.helper.Helper.changeMaterialSpinnerColor; import static fr.gouv.etalab.mastodon.helper.Helper.convertDpToPixel; import static fr.gouv.etalab.mastodon.sqlite.Sqlite.DB_NAME; +import static fr.gouv.etalab.mastodon.sqlite.Sqlite.importDB; /** @@ -821,26 +821,10 @@ public class LoginActivity extends BaseActivity { Toasty.error(getApplicationContext(),getString(R.string.toot_select_file_error),Toast.LENGTH_LONG).show(); return; } - ExcelToSQLite excelToSQLite = new ExcelToSQLite(getApplicationContext(), DB_NAME, true); String filename = Helper.getFilePathFromURI(getApplicationContext(), data.getData()); - assert filename != null; - excelToSQLite.importFromFile(filename, new ExcelToSQLite.ImportListener() { - @Override - public void onStart() { - Toasty.success(getApplicationContext(),getString(R.string.data_import_start),Toast.LENGTH_LONG).show(); - } - - @Override - public void onCompleted(String dbName) { - Toasty.success(getApplicationContext(),getString(R.string.data_import_success_simple),Toast.LENGTH_LONG).show(); - Helper.logoutCurrentUser(LoginActivity.this); - } - - @Override - public void onError(Exception e) { - Toasty.error(getApplicationContext(),getString(R.string.data_import_error_simple),Toast.LENGTH_LONG).show(); - } - }); + importDB(LoginActivity.this, filename); + }else{ + Toasty.error(getApplicationContext(),getString(R.string.toot_select_file_error),Toast.LENGTH_LONG).show(); } } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java index 355ce53fa..6cbb90f5a 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java @@ -919,6 +919,8 @@ public class API { } catch (JSONException e) { e.printStackTrace(); } + if( apiResponse == null) + apiResponse = new APIResponse(); apiResponse.setStatuses(statuses); return apiResponse; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index 933044389..ba7b13e43 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -134,6 +134,7 @@ import java.io.OutputStream; import java.lang.ref.WeakReference; import java.lang.reflect.Type; import java.net.InetAddress; +import java.nio.channels.FileChannel; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.Security; @@ -3730,4 +3731,8 @@ public class Helper { e.printStackTrace(); } } + + + + } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java index b76476c73..f115d3ff3 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/Sqlite.java @@ -15,9 +15,29 @@ package fr.gouv.etalab.mastodon.sqlite; +import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Environment; +import android.widget.Toast; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.nio.channels.FileChannel; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.Random; + +import es.dmoral.toasty.Toasty; +import fr.gouv.etalab.mastodon.R; +import fr.gouv.etalab.mastodon.activities.LoginActivity; +import fr.gouv.etalab.mastodon.helper.Helper; /** * Created by Thomas on 23/04/2017. @@ -359,4 +379,56 @@ public class Sqlite extends SQLiteOpenHelper { db.close(); } } + + + + + + public static void importDB(Activity activity, String backupDBPath) { + try { + db.close(); + File dbDest = activity.getDatabasePath(DB_NAME); + File dbSource = new File(backupDBPath); + FileChannel src = new FileInputStream(dbSource).getChannel(); + FileChannel dst = new FileOutputStream(dbDest).getChannel(); + dst.transferFrom(src, 0, src.size()); + src.close(); + dst.close(); + Helper.logoutCurrentUser(activity); + } catch (Exception e) { + e.printStackTrace(); + Toasty.error(activity, activity.getString(R.string.data_import_error_simple),Toast.LENGTH_LONG).show(); + } + } + + public static void exportDB(Context context) { + try { + File sd = Environment.getExternalStorageDirectory(); + + if (sd.canWrite()) { + + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); + String backupDBPath = "Fedilab_export_"+timeStamp+".fedilab"; + File dbSource = context.getDatabasePath(DB_NAME); + File dbDest = new File(sd,backupDBPath); + FileChannel src = new FileInputStream(dbSource).getChannel(); + FileChannel dst = new FileOutputStream(dbDest).getChannel(); + dst.transferFrom(src, 0, src.size()); + src.close(); + dst.close(); + final Intent intent = new Intent(); + Random r = new Random(); + final int notificationIdTmp = r.nextInt(10000); + intent.setAction(android.content.Intent.ACTION_VIEW); + Uri uri = Uri.fromFile(dbDest); + intent.setDataAndType(uri, "*/*"); + Helper.notify_user(context, intent, notificationIdTmp, BitmapFactory.decodeResource(context.getResources(), + R.mipmap.ic_launcher), Helper.NotifType.STORE, context.getString(R.string.save_over), context.getString(R.string.download_from, backupDBPath)); + Toasty.success(context, context.getString(R.string.data_base_exported),Toast.LENGTH_LONG).show(); + } + } catch (Exception e) { + e.printStackTrace(); + Toasty.error(context, context.getString(R.string.data_export_error_simple), Toast.LENGTH_LONG).show(); + } + } }