diff --git a/app/src/main/java/app/fedilab/android/activities/PixelfedComposeActivity.java b/app/src/main/java/app/fedilab/android/activities/PixelfedComposeActivity.java index 60c51c219..12c2ad455 100644 --- a/app/src/main/java/app/fedilab/android/activities/PixelfedComposeActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/PixelfedComposeActivity.java @@ -1277,7 +1277,7 @@ public class PixelfedComposeActivity extends BaseActivity implements UploadStatu toot.setSensitive(isSensitive); toot.setVisibility(visibility); toot.setMedia_attachments(attachments); - toot.setContent(tootContent); + toot.setContent(PixelfedComposeActivity.this, tootContent); if (timestamp == null) if (scheduledstatus == null) new PostStatusAsyncTask(getApplicationContext(), social, account, toot, PixelfedComposeActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); @@ -1960,7 +1960,7 @@ public class PixelfedComposeActivity extends BaseActivity implements UploadStatu toot.setSensitive(isSensitive); toot.setMedia_attachments(attachments); toot.setVisibility(visibility); - toot.setContent(currentContent); + toot.setContent(PixelfedComposeActivity.this, currentContent); SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); diff --git a/app/src/main/java/app/fedilab/android/activities/SettingsActivity.java b/app/src/main/java/app/fedilab/android/activities/SettingsActivity.java index 8dfefc3e4..23e96a216 100644 --- a/app/src/main/java/app/fedilab/android/activities/SettingsActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/SettingsActivity.java @@ -110,6 +110,7 @@ public class SettingsActivity extends BaseActivity { tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.notifications))); tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.settings_category_label_interface))); tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.compose))); + tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.action_privacy))); tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.theming))); tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.hide_menu_items))); tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.administration))); @@ -216,14 +217,17 @@ public class SettingsActivity extends BaseActivity { typeOfSettings = ContentSettingsFragment.type.COMPOSE; break; case 4: - return new ColorSettingsFragment(); + typeOfSettings = ContentSettingsFragment.type.PRIVACY; + break; case 5: + return new ColorSettingsFragment(); + case 6: typeOfSettings = ContentSettingsFragment.type.MENU; break; - case 6: + case 7: typeOfSettings = ContentSettingsFragment.type.ADMIN; break; - case 7: + case 8: typeOfSettings = ContentSettingsFragment.type.LANGUAGE; break; default: diff --git a/app/src/main/java/app/fedilab/android/activities/TootActivity.java b/app/src/main/java/app/fedilab/android/activities/TootActivity.java index fae2c9983..0718d4ca8 100644 --- a/app/src/main/java/app/fedilab/android/activities/TootActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/TootActivity.java @@ -2312,7 +2312,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, toot.setVisibility(visibility); if (tootReply != null) toot.setIn_reply_to_id(tootReply.getId()); - toot.setContent(tootContent); + toot.setContent(TootActivity.this, tootContent); if (social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) { if (poll != null) { toot.setPoll(poll); @@ -2702,7 +2702,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, toot.setVisibility(visibility); if (apiResponse.getStatuses() != null && apiResponse.getStatuses().size() > 0) toot.setIn_reply_to_id(apiResponse.getStatuses().get(0).getId()); - toot.setContent(tootContent); + toot.setContent(TootActivity.this, tootContent); new PostStatusAsyncTask(getApplicationContext(), social, account, toot, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); return; @@ -3867,7 +3867,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, if (toot_cw_content.getText().toString().trim().length() > 0) toot.setSpoiler_text(toot_cw_content.getText().toString().trim()); toot.setVisibility(visibility); - toot.setContent(currentContent); + toot.setContent(TootActivity.this, currentContent); if (poll != null) toot.setPoll(poll); diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index 1f2deeb75..36050416c 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -377,7 +377,7 @@ public class API { status.setUrl(comment.get("url").toString()); status.setSensitive(false); status.setSpoiler_text(""); - status.setContent(comment.get("text").toString()); + status.setContent(context, comment.get("text").toString()); status.setIn_reply_to_id(comment.get("inReplyToCommentId").toString()); status.setAccount(parseAccountResponsePeertube(context, instance, comment.getJSONObject("account"))); status.setCreated_at(Helper.mstStringToDate(context, comment.get("createdAt").toString())); @@ -652,7 +652,7 @@ public class API { status.setApplication(application); status.setAccount(parseAccountResponse(context, resobj.getJSONObject("account"))); - status.setContent(resobj.get("content").toString()); + status.setContent(context, resobj.get("content").toString()); if (!resobj.isNull("favourites_count")) { status.setFavourites_count(Integer.valueOf(resobj.get("favourites_count").toString())); } else { @@ -750,7 +750,7 @@ public class API { } catch (Exception e) { status.setVisibility("public"); } - status.setContent(resobj.get("text").toString()); + status.setContent(context, resobj.get("text").toString()); } catch (JSONException ignored) { } return status; @@ -850,7 +850,7 @@ public class API { status.setAccount(parseMisskeyAccountResponse(context, instance, resobj.getJSONObject("user"))); - status.setContent(resobj.get("text").toString()); + status.setContent(context, resobj.get("text").toString()); try { status.setReplies_count(Integer.valueOf(resobj.get("repliesCount").toString())); } catch (Exception e) { diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Status.java b/app/src/main/java/app/fedilab/android/client/Entities/Status.java index 134702133..5f4018489 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Status.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Status.java @@ -1469,9 +1469,9 @@ public class Status implements Parcelable { return content; } - public void setContent(String content) { + public void setContent(Context context, String content) { //Remove UTM by default - this.content = Helper.remove_tracking_param(content); + this.content = Helper.remove_tracking_param(context, content); } public boolean isShortReply() { diff --git a/app/src/main/java/app/fedilab/android/client/GNUAPI.java b/app/src/main/java/app/fedilab/android/client/GNUAPI.java index d22535d52..a0dd74f03 100644 --- a/app/src/main/java/app/fedilab/android/client/GNUAPI.java +++ b/app/src/main/java/app/fedilab/android/client/GNUAPI.java @@ -306,9 +306,9 @@ public class GNUAPI { else if (resobj.has("sender")) status.setAccount(parseAccountResponse(context, resobj.getJSONObject("sender"))); if (resobj.has("statusnet_html")) - status.setContent(resobj.get("statusnet_html").toString()); + status.setContent(context, resobj.get("statusnet_html").toString()); else if (resobj.has("text")) - status.setContent(resobj.get("text").toString()); + status.setContent(context, resobj.get("text").toString()); if (resobj.has("fave_num")) status.setFavourites_count(Integer.valueOf(resobj.get("fave_num").toString())); else @@ -379,7 +379,7 @@ public class GNUAPI { } catch (Exception e) { status.setVisibility("public"); } - status.setContent(resobj.get("text").toString()); + status.setContent(context, resobj.get("text").toString()); } catch (JSONException ignored) { } return status; diff --git a/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java b/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java index 7491ce65b..0a5de03cf 100644 --- a/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java +++ b/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java @@ -413,7 +413,7 @@ public class PeertubeAPI { status.setUrl(comment.get("url").toString()); status.setSensitive(false); status.setSpoiler_text(""); - status.setContent(comment.get("text").toString()); + status.setContent(context, comment.get("text").toString()); status.setIn_reply_to_id(comment.get("inReplyToCommentId").toString()); status.setAccount(parseAccountResponsePeertube(context, comment.getJSONObject("account"))); status.setCreated_at(Helper.mstStringToDate(context, comment.get("createdAt").toString())); diff --git a/app/src/main/java/app/fedilab/android/drawers/PixelfedListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/PixelfedListAdapter.java index 1c8d7e1fd..f697b3dca 100644 --- a/app/src/main/java/app/fedilab/android/drawers/PixelfedListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/PixelfedListAdapter.java @@ -917,7 +917,7 @@ public class PixelfedListAdapter extends RecyclerView.Adapter implements OnPostA toot.setMedia_attachments(status.getMedia_attachments()); if (status.getSpoiler_text() != null && status.getSpoiler_text().length() > 0) toot.setSpoiler_text(status.getSpoiler_text().trim()); - toot.setContent(status.getContent()); + toot.setContent(context, status.getContent()); toot.setVisibility(status.getVisibility()); if (status.getPoll() != null) { toot.setPoll(status.getPoll()); @@ -932,7 +932,7 @@ public class PixelfedListAdapter extends RecyclerView.Adapter implements OnPostA if (status.getSpoiler_text() != null && status.getSpoiler_text().length() > 0) toot.setSpoiler_text(status.getSpoiler_text().trim()); toot.setVisibility(status.getVisibility()); - toot.setContent(status.getContent()); + toot.setContent(context, status.getContent()); if (status.getPoll() != null) { toot.setPoll(status.getPoll()); } else if (status.getReblog() != null && status.getReblog().getPoll() != null) { @@ -1170,7 +1170,7 @@ public class PixelfedListAdapter extends RecyclerView.Adapter implements OnPostA Account account = new AccountDAO(context, db).getUniqAccount(userId, instance); toot.setVisibility(visibility); toot.setIn_reply_to_id(in_reply_to_status); - toot.setContent(tootContent); + toot.setContent(context, tootContent); new PostStatusAsyncTask(context, social, account, toot, PixelfedListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); status.setQuickReplyPrivacy(null); status.setQuickReplyContent(null); diff --git a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java index 584a87c57..0af874f65 100644 --- a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java @@ -544,7 +544,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct toot.setVisibility(apiResponse.getStatuses().get(0).getVisibility()); if (apiResponse.getStatuses() != null && apiResponse.getStatuses().size() > 0) toot.setIn_reply_to_id(apiResponse.getStatuses().get(0).getId()); - toot.setContent(tootContent); + toot.setContent(context, tootContent); final SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); Account account = new AccountDAO(context, db).getUniqAccount(userId, instance); new PostStatusAsyncTask(context, social, account, toot, StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); @@ -2681,7 +2681,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct toot.setMedia_attachments(status.getMedia_attachments()); if (status.getSpoiler_text() != null && status.getSpoiler_text().length() > 0) toot.setSpoiler_text(status.getSpoiler_text().trim()); - toot.setContent(status.getContent()); + toot.setContent(context, status.getContent()); toot.setVisibility(status.getVisibility()); new RetrieveFeedsAsyncTask(context, RetrieveFeedsAsyncTask.Type.ONESTATUS, status.getIn_reply_to_id(), null, false, false, StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else { @@ -2691,7 +2691,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct if (status.getSpoiler_text() != null && status.getSpoiler_text().length() > 0) toot.setSpoiler_text(status.getSpoiler_text().trim()); toot.setVisibility(status.getVisibility()); - toot.setContent(status.getContent()); + toot.setContent(context, status.getContent()); final SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); long id = new StatusStoredDAO(context, db).insertStatus(toot, null); Intent intentToot = new Intent(context, TootActivity.class); @@ -3082,7 +3082,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct toot.setMedia_attachments(status.getMedia_attachments()); if (status.getSpoiler_text() != null && status.getSpoiler_text().length() > 0) toot.setSpoiler_text(status.getSpoiler_text().trim()); - toot.setContent(status.getContent()); + toot.setContent(context, status.getContent()); toot.setVisibility(status.getVisibility()); if (status.getPoll() != null) { toot.setPoll(status.getPoll()); @@ -3097,7 +3097,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct if (status.getSpoiler_text() != null && status.getSpoiler_text().length() > 0) toot.setSpoiler_text(status.getSpoiler_text().trim()); toot.setVisibility(status.getVisibility()); - toot.setContent(status.getContent()); + toot.setContent(context, status.getContent()); if (status.getPoll() != null) { toot.setPoll(status.getPoll()); } else if (status.getReblog() != null && status.getReblog().getPoll() != null) { @@ -3917,7 +3917,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct toot.setSpoiler_text(toot_cw_content.getText().toString().trim()); toot.setVisibility(status.getQuickReplyPrivacy()); toot.setIn_reply_to_id(in_reply_to_status); - toot.setContent(status.getQuickReplyContent()); + toot.setContent(context, status.getQuickReplyContent()); new PostStatusAsyncTask(context, social, account, toot, StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); status.setQuickReplyPrivacy(null); status.setQuickReplyContent(null); @@ -4151,7 +4151,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct toot.setVisibility(statusForQuickReply.getQuickReplyPrivacy()); } if (statusForQuickReply.getQuickReplyContent() != null) { - toot.setContent(statusForQuickReply.getQuickReplyContent().trim()); + toot.setContent(context, statusForQuickReply.getQuickReplyContent().trim()); } toot.setIn_reply_to_id(tootReply.getId()); diff --git a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java index ac759d396..d630cb42d 100644 --- a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java @@ -120,6 +120,7 @@ import static app.fedilab.android.fragments.ContentSettingsFragment.type.INTERFA import static app.fedilab.android.fragments.ContentSettingsFragment.type.LANGUAGE; import static app.fedilab.android.fragments.ContentSettingsFragment.type.MENU; import static app.fedilab.android.fragments.ContentSettingsFragment.type.NOTIFICATIONS; +import static app.fedilab.android.fragments.ContentSettingsFragment.type.PRIVACY; import static app.fedilab.android.fragments.ContentSettingsFragment.type.TIMELINES; public class ContentSettingsFragment extends Fragment implements OnRetrieveRemoteAccountInterface, OnRetrieveRelationshipInterface { @@ -380,6 +381,7 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot LinearLayout settings_admin = rootView.findViewById(R.id.settings_admin); LinearLayout settings_interface = rootView.findViewById(R.id.settings_interface); LinearLayout settings_compose = rootView.findViewById(R.id.settings_compose); + LinearLayout settings_privacy = rootView.findViewById(R.id.settings_privacy); LinearLayout settings_hide_menu = rootView.findViewById(R.id.settings_hide_menu); LinearLayout settings_translation = rootView.findViewById(R.id.settings_translation); @@ -394,6 +396,8 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot settings_interface.setVisibility(View.VISIBLE); } else if (type == COMPOSE) { settings_compose.setVisibility(View.VISIBLE); + } else if (type == PRIVACY) { + settings_privacy.setVisibility(View.VISIBLE); } else if (type == MENU) { settings_hide_menu.setVisibility(View.VISIBLE); } else if (type == LANGUAGE) { @@ -945,6 +949,20 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot } }); + + final SwitchCompat set_utm_parameters = rootView.findViewById(R.id.set_utm_parameters); + boolean utm_parameters = sharedpreferences.getBoolean(Helper.SET_FILTER_UTM, true); + set_utm_parameters.setChecked(utm_parameters); + + set_utm_parameters.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putBoolean(Helper.SET_FILTER_UTM, set_utm_parameters.isChecked()); + editor.apply(); + } + }); + TextView set_nitter_host = rootView.findViewById(R.id.set_nitter_host); boolean nitter = sharedpreferences.getBoolean(Helper.SET_NITTER, false); final SwitchCompat set_nitter = rootView.findViewById(R.id.set_nitter); @@ -2667,6 +2685,7 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot NOTIFICATIONS, INTERFACE, COMPOSE, + PRIVACY, LANGUAGE, MENU, COLORS diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index 59eb72e23..79afa2e73 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -442,6 +442,7 @@ public class Helper { public static final String SET_INVIDIOUS_HOST = "set_invidious_host"; public static final String DEFAULT_INVIDIOUS_HOST = "invidio.us"; + public static final String SET_FILTER_UTM = "set_filter_utm"; public static final String SET_NITTER = "set_nitter"; public static final String SET_NITTER_HOST = "set_nitter_host"; public static final String DEFAULT_NITTER_HOST = "nitter.net"; @@ -4106,14 +4107,18 @@ public class Helper { } } - public static String remove_tracking_param(String original_content) { + public static String remove_tracking_param(Context context, String original_content) { if (original_content == null) return original_content; String cleaned_content = original_content; - for (String utm : UTM_PARAMS) { - cleaned_content = cleaned_content.replaceAll("&" + utm + "=[0-9a-zA-Z._-]*", ""); - cleaned_content = cleaned_content.replaceAll("&" + utm + "=[0-9a-zA-Z._-]*", ""); - cleaned_content = cleaned_content.replaceAll("\\?" + utm + "=[0-9a-zA-Z._-]*", "?"); + final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + boolean utm_parameters = sharedpreferences.getBoolean(Helper.SET_FILTER_UTM, true); + if( utm_parameters ) { + for (String utm : UTM_PARAMS) { + cleaned_content = cleaned_content.replaceAll("&" + utm + "=[0-9a-zA-Z._-]*", ""); + cleaned_content = cleaned_content.replaceAll("&" + utm + "=[0-9a-zA-Z._-]*", ""); + cleaned_content = cleaned_content.replaceAll("\\?" + utm + "=[0-9a-zA-Z._-]*", "?"); + } } return cleaned_content; } diff --git a/app/src/main/java/app/fedilab/android/sqlite/StatusCacheDAO.java b/app/src/main/java/app/fedilab/android/sqlite/StatusCacheDAO.java index 42b94d9f3..85bd71817 100644 --- a/app/src/main/java/app/fedilab/android/sqlite/StatusCacheDAO.java +++ b/app/src/main/java/app/fedilab/android/sqlite/StatusCacheDAO.java @@ -765,7 +765,7 @@ public class StatusCacheDAO { status.setIn_reply_to_id(c.getString(c.getColumnIndex(Sqlite.COL_IN_REPLY_TO_ID))); status.setIn_reply_to_account_id(c.getString(c.getColumnIndex(Sqlite.COL_IN_REPLY_TO_ACCOUNT_ID))); status.setReblog(Helper.restoreStatusFromString(c.getString(c.getColumnIndex(Sqlite.COL_REBLOG)))); - status.setContent(c.getString(c.getColumnIndex(Sqlite.COL_CONTENT))); + status.setContent(context, c.getString(c.getColumnIndex(Sqlite.COL_CONTENT))); status.setCreated_at(Helper.stringToDate(context, c.getString(c.getColumnIndex(Sqlite.COL_CREATED_AT)))); status.setEmojis(Helper.restoreEmojisFromString(c.getString(c.getColumnIndex(Sqlite.COL_EMOJIS)))); status.setReblogs_count(c.getInt(c.getColumnIndex(Sqlite.COL_REBLOGS_COUNT))); @@ -812,7 +812,7 @@ public class StatusCacheDAO { status.setIn_reply_to_id(c.getString(c.getColumnIndex(Sqlite.COL_IN_REPLY_TO_ID))); status.setIn_reply_to_account_id(c.getString(c.getColumnIndex(Sqlite.COL_IN_REPLY_TO_ACCOUNT_ID))); status.setReblog(Helper.restoreStatusFromString(c.getString(c.getColumnIndex(Sqlite.COL_REBLOG)))); - status.setContent(c.getString(c.getColumnIndex(Sqlite.COL_CONTENT))); + status.setContent(context, c.getString(c.getColumnIndex(Sqlite.COL_CONTENT))); status.setCreated_at(Helper.stringToDate(context, c.getString(c.getColumnIndex(Sqlite.COL_CREATED_AT)))); status.setEmojis(Helper.restoreEmojisFromString(c.getString(c.getColumnIndex(Sqlite.COL_EMOJIS)))); status.setReblogs_count(c.getInt(c.getColumnIndex(Sqlite.COL_REBLOGS_COUNT))); diff --git a/app/src/main/res/layout/fragment_settings_reveal.xml b/app/src/main/res/layout/fragment_settings_reveal.xml index 86814cc54..b29b44400 100644 --- a/app/src/main/res/layout/fragment_settings_reveal.xml +++ b/app/src/main/res/layout/fragment_settings_reveal.xml @@ -193,96 +193,6 @@ android:layout_gravity="center_vertical" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -