diff --git a/app/build.gradle b/app/build.gradle index b007d019a..9cf7f766c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,4 +45,5 @@ dependencies { implementation 'com.github.stom79:mytransl:1.2' playstoreImplementation 'io.github.kobakei:ratethisapp:1.2.0' implementation 'org.conscrypt:conscrypt-android:1.0.0.RC13' + implementation 'com.google.code.gson:gson:2.8.2' } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java index 788e4ebf7..db9874db3 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Account.java @@ -25,7 +25,7 @@ import java.util.Date; * Manage accounts */ -public class Account implements Parcelable, Serializable { +public class Account implements Parcelable { private String id; private String username; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Application.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Application.java index 5684056a6..b41254eae 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Application.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Application.java @@ -20,7 +20,7 @@ import java.io.Serializable; * Created by Thomas on 23/04/2017. */ -public class Application implements Serializable { +public class Application { public String name; public String website; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Attachment.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Attachment.java index 7d313314b..a26ddb567 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Attachment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Attachment.java @@ -24,7 +24,7 @@ import java.io.Serializable; * Manages Media */ -public class Attachment implements Parcelable, Serializable{ +public class Attachment implements Parcelable{ private String id; private String type; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Emojis.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Emojis.java index 2de25e5ae..6af3cdb84 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Emojis.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Emojis.java @@ -20,7 +20,7 @@ import java.io.Serializable; * Created by Thomas on 20/10/2017. */ -public class Emojis implements Serializable { +public class Emojis { private String shortcode; private String static_url; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/List.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/List.java index f19ca3f3b..f0c82a147 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/List.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/List.java @@ -21,7 +21,7 @@ import java.io.Serializable; * Manage List */ -public class List implements Serializable { +public class List { private String id; private String title; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Mention.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Mention.java index 3f74d7a7d..cd43d8886 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Mention.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Mention.java @@ -24,7 +24,7 @@ import java.io.Serializable; * Manages mentions in toots */ -public class Mention implements Parcelable, Serializable { +public class Mention implements Parcelable { private String url; private String username; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java index 7db3ae6df..75837b547 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java @@ -61,7 +61,7 @@ import fr.gouv.etalab.mastodon.sqlite.Sqlite; * Manage Status (ie: toots) */ -public class Status implements Parcelable, Serializable{ +public class Status implements Parcelable{ private String id; private String uri; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Tag.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Tag.java index dd47bc355..70d9cb29d 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Tag.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Tag.java @@ -21,7 +21,7 @@ import java.io.Serializable; * Manage Tags */ -public class Tag implements Serializable { +public class Tag { private String name; private String url; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/DraftsListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/DraftsListAdapter.java index 02af9db07..2bd2d0e7e 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/DraftsListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/DraftsListAdapter.java @@ -110,7 +110,7 @@ public class DraftsListAdapter extends BaseAdapter { final SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); - if( this.clickable){ + if( this.clickable ){ if (draft.getStatus().getContent().length() > 300) holder.draft_title.setText(String.format("%s…",draft.getStatus().getContent().substring(0, 299))); else diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayDraftsFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayDraftsFragment.java index fbf4c4870..f31685794 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayDraftsFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayDraftsFragment.java @@ -19,9 +19,11 @@ import android.content.DialogInterface; import android.content.SharedPreferences; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v7.app.AlertDialog; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -54,7 +56,7 @@ public class DisplayDraftsFragment extends Fragment { private DraftsListAdapter draftsListAdapter; private RelativeLayout textviewNoAction; @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_drafts, container, false); context = getContext(); 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 60b0206f6..68c0be3d8 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 @@ -92,6 +92,7 @@ import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.transition.Transition; +import com.google.gson.Gson; import org.conscrypt.Conscrypt; @@ -1554,17 +1555,8 @@ public class Helper { * @return String serialized Status */ public static String statusToStringStorage(Status status){ - String serialized = null; - try { - ByteArrayOutputStream bo = new ByteArrayOutputStream(); - ObjectOutputStream so = new ObjectOutputStream(bo); - so.writeObject(status); - so.flush(); - serialized = new String(Base64.encode(bo.toByteArray(), Base64.DEFAULT)); - } catch (IOException e) { - e.printStackTrace(); - } - return serialized; + Gson gson = new Gson(); + return gson.toJson(status); } /** @@ -1573,24 +1565,12 @@ public class Helper { * @return Status */ public static Status restoreStatusFromString(String serializedStatus){ - Status status = null; - if(serializedStatus == null) - return null; - byte b[]; + Gson gson = new Gson(); try { - b = Base64.decode(serializedStatus.getBytes(), Base64.DEFAULT); - ByteArrayInputStream bi = new ByteArrayInputStream(b); - ObjectInputStream si = new ObjectInputStream(bi); - status = (Status) si.readObject(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (ClassNotFoundException e) { - e.printStackTrace(); + return gson.fromJson(serializedStatus, Status.class); + }catch (Exception e){ + return null; } - return status; - } /** diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/StatusStoredDAO.java b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/StatusStoredDAO.java index 2d0953ba1..b4d896bcd 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/StatusStoredDAO.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/StatusStoredDAO.java @@ -303,6 +303,10 @@ public class StatusStoredDAO { StoredStatus storedStatus = new StoredStatus(); storedStatus.setId(c.getInt(c.getColumnIndex(Sqlite.COL_ID))); Status status = Helper.restoreStatusFromString(c.getString(c.getColumnIndex(Sqlite.COL_STATUS_SERIALIZED))); + if( status == null){ + remove(c.getInt(c.getColumnIndex(Sqlite.COL_ID))); + return null; + } storedStatus.setStatus(status); Status statusReply = Helper.restoreStatusFromString(c.getString(c.getColumnIndex(Sqlite.COL_STATUS_REPLY_SERIALIZED))); storedStatus.setStatusReply(statusReply); @@ -334,6 +338,10 @@ public class StatusStoredDAO { StoredStatus storedStatus = new StoredStatus(); storedStatus.setId(c.getInt(c.getColumnIndex(Sqlite.COL_ID))); Status status = Helper.restoreStatusFromString(c.getString(c.getColumnIndex(Sqlite.COL_STATUS_SERIALIZED))); + if( status == null){ + remove(c.getInt(c.getColumnIndex(Sqlite.COL_ID))); + continue; + } storedStatus.setStatus(status); Status statusReply = Helper.restoreStatusFromString(c.getString(c.getColumnIndex(Sqlite.COL_STATUS_REPLY_SERIALIZED))); storedStatus.setStatusReply(statusReply);