From 4b7cfa07f2c4fee7a4d72f832a7d50efb0956622 Mon Sep 17 00:00:00 2001 From: tom79 Date: Mon, 7 Aug 2017 10:20:44 +0200 Subject: [PATCH] Allows to manage the default visibility of the toots for non locked accounts. Cf: https://bitbucket.org/tom79/mastodon_etalab/issues/5/set-default-level-of-publishing --- .../mastodon/activities/TootActivity.java | 17 ++- .../mastodon/fragments/SettingsFragment.java | 114 +++++++++++++++++- .../gouv/etalab/mastodon/helper/Helper.java | 1 + app/src/main/res/layout/fragment_settings.xml | 23 ++++ app/src/main/res/values-fr/strings.xml | 2 + app/src/main/res/values/strings.xml | 3 +- 6 files changed, 156 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java index bc6c8cbd3..17bc2d870 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java @@ -337,8 +337,21 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc toot_visibility.setImageResource(R.drawable.ic_action_lock_closed); }else { if( tootReply == null){ - visibility = "public"; - toot_visibility.setImageResource(R.drawable.ic_action_globe); + visibility = sharedpreferences.getString(Helper.SET_TOOT_VISIBILITY + "@" + account.getAcct() + "@" + account.getInstance(), "public"); + switch (visibility) { + case "public": + toot_visibility.setImageResource(R.drawable.ic_action_globe); + break; + case "unlisted": + toot_visibility.setImageResource(R.drawable.ic_action_lock_open); + break; + case "private": + toot_visibility.setImageResource(R.drawable.ic_action_lock_closed); + break; + case "direct": + toot_visibility.setImageResource(R.drawable.ic_local_post_office); + break; + } } } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java index 26da5ad9a..0804bdc89 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/SettingsFragment.java @@ -16,11 +16,14 @@ package fr.gouv.etalab.mastodon.fragments; import android.annotation.SuppressLint; import android.annotation.TargetApi; +import android.app.AlertDialog; import android.content.ContentUris; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -32,19 +35,29 @@ import android.support.v7.widget.SwitchCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; +import android.widget.Toast; import fr.gouv.etalab.mastodon.activities.MainActivity; +import fr.gouv.etalab.mastodon.activities.TootActivity; +import fr.gouv.etalab.mastodon.client.Entities.Account; import fr.gouv.etalab.mastodon.helper.Helper; +import fr.gouv.etalab.mastodon.sqlite.AccountDAO; +import fr.gouv.etalab.mastodon.sqlite.Sqlite; import mastodon.etalab.gouv.fr.mastodon.R; import static android.app.Activity.RESULT_OK; import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_THEME_INTENT; import static fr.gouv.etalab.mastodon.helper.Helper.INTENT_ACTION; +import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor; +import static fr.gouv.etalab.mastodon.helper.Helper.loadPPInActionBar; +import static fr.gouv.etalab.mastodon.helper.Helper.updateHeaderAccountInfo; /** @@ -61,7 +74,7 @@ public class SettingsFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.fragment_settings, container, false); + final View rootView = inflater.inflate(R.layout.fragment_settings, container, false); context = getContext(); final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); @@ -240,9 +253,108 @@ public class SettingsFragment extends Fragment { } }); + + + LinearLayout toot_visibility_container = (LinearLayout) rootView.findViewById(R.id.toot_visibility_container); + String prefKeyOauthTokenT = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null); + SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + final Account account = new AccountDAO(context, db).getAccountByToken(prefKeyOauthTokenT); + final ImageView set_toot_visibility = (ImageView) rootView.findViewById(R.id.set_toot_visibility); + //Only displayed for non locked accounts + if (account != null && !account.isLocked()) { + String tootVisibility = sharedpreferences.getString(Helper.SET_TOOT_VISIBILITY + "@" + account.getAcct() + "@" + account.getInstance(), "public"); + switch (tootVisibility) { + case "public": + set_toot_visibility.setImageResource(R.drawable.ic_action_globe); + break; + case "unlisted": + set_toot_visibility.setImageResource(R.drawable.ic_action_lock_open); + break; + case "private": + set_toot_visibility.setImageResource(R.drawable.ic_action_lock_closed); + break; + case "direct": + set_toot_visibility.setImageResource(R.drawable.ic_local_post_office); + break; + } + changeColor(); + }else { + toot_visibility_container.setVisibility(View.GONE); + } + + set_toot_visibility.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AlertDialog.Builder dialog = new AlertDialog.Builder(context); + dialog.setTitle(R.string.toot_visibility_tilte); + final String[] stringArray = getResources().getStringArray(R.array.toot_visibility); + final ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, stringArray); + dialog.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int position) { + dialog.dismiss(); + } + }); + + dialog.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int position) { + String visibility = "public"; + + switch (position){ + case 0: + visibility = "public"; + set_toot_visibility.setImageResource(R.drawable.ic_action_globe); + break; + case 1: + visibility = "unlisted"; + set_toot_visibility.setImageResource(R.drawable.ic_action_lock_open); + break; + case 2: + visibility = "private"; + set_toot_visibility.setImageResource(R.drawable.ic_action_lock_closed); + break; + case 3: + visibility = "direct"; + set_toot_visibility.setImageResource(R.drawable.ic_local_post_office); + break; + } + if( account != null) { + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putString(Helper.SET_TOOT_VISIBILITY + "@" + account.getAcct() + "@" + account.getInstance(), visibility); + editor.apply(); + Toast.makeText(context, context.getString(R.string.toast_visibility_changed, "@" + account.getAcct() + "@" + account.getInstance()), Toast.LENGTH_SHORT).show(); + }else { + Toast.makeText(context, R.string.toast_error,Toast.LENGTH_SHORT).show(); + } + changeColor(); + dialog.dismiss(); + } + }); + dialog.show(); + } + }); + return rootView; } + + private void changeColor(){ + SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE); + int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK); + if( theme == Helper.THEME_DARK){ + changeDrawableColor(context, R.drawable.ic_action_globe,R.color.dark_text); + changeDrawableColor(context, R.drawable.ic_action_lock_open,R.color.dark_text); + changeDrawableColor(context, R.drawable.ic_action_lock_closed,R.color.dark_text); + changeDrawableColor(context, R.drawable.ic_local_post_office,R.color.dark_text); + }else { + changeDrawableColor(context, R.drawable.ic_action_globe,R.color.black); + changeDrawableColor(context, R.drawable.ic_action_lock_open,R.color.black); + changeDrawableColor(context, R.drawable.ic_action_lock_closed,R.color.black); + changeDrawableColor(context, R.drawable.ic_local_post_office,R.color.black); + } + + } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { 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 dd52bd547..a7b8f3f91 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 @@ -205,6 +205,7 @@ public class Helper { public static final String SET_JAVASCRIPT = "set_javascript"; public static final String SET_COOKIES = "set_cookies"; public static final String SET_FOLDER_RECORD = "set_folder_record"; + public static final String SET_TOOT_VISIBILITY = "set_toot_visibility"; //End points public static final String EP_AUTHORIZE = "/oauth/authorize"; diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 20d88aab1..9f1ab0c16 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -166,6 +166,29 @@ android:layout_height="wrap_content" /> + + + + + + Supprimer le média ? Votre pouet est vide ! Visibilité du pouet + Visibilité des pouets par défaut : Le pouet a été envoyé ! Vous répondez à ce pouet : Contenu sensible ? @@ -252,6 +253,7 @@ Le média a été enregistré ! Une erreur est survenue lors de la traduction ! Brouillon enregistré ! + La visibilité des pouets a été changée pour le compte %1$s Optimisation du chargement Nombre de pouets par chargement diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 027cadf9f..345349bf2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -160,6 +160,7 @@ Delete this media? Your toot is empty! Visibility of the toot + Visibility of the toots by default: The toot has been sent! You are replying to this toot: Sensitive content? @@ -258,7 +259,7 @@ The media has been saved! An error occurred while translating! Draft saved! - + Visibility of the toots has been changed for the account %1$s Optimisation of loading Number of toots per load