From fb50760e5a4f7de7a77a5c1286e04f0cf25f2006 Mon Sep 17 00:00:00 2001 From: Christian Schneppe <christian@pix-art.de> Date: Sun, 31 Mar 2019 11:06:09 +0200 Subject: [PATCH] add activity to define some important privacy settings on first start --- CHANGELOG.md | 3 + src/main/AndroidManifest.xml | 4 + .../services/XmppConnectionService.java | 14 +- .../messenger/ui/ConversationsActivity.java | 11 +- .../messenger/ui/EditAccountActivity.java | 4 +- .../messenger/ui/EnterNameActivity.java | 34 ++- .../messenger/ui/SetSettingsActivity.java | 171 +++++++++++++ .../pixart/messenger/ui/SettingsActivity.java | 10 +- .../de/pixart/messenger/ui/XmppActivity.java | 5 + .../messenger/ui/adapter/MessageAdapter.java | 65 ++--- .../messenger/utils/FirstStartManager.java | 30 +++ .../ic_help_circle_outline_black_24dp.png | Bin 0 -> 888 bytes .../ic_help_circle_outline_black_24dp.png | Bin 0 -> 670 bytes .../ic_help_circle_outline_black_24dp.png | Bin 0 -> 1435 bytes .../ic_help_circle_outline_black_24dp.png | Bin 0 -> 1979 bytes .../ic_help_circle_outline_black_24dp.png | Bin 0 -> 4762 bytes src/main/res/layout/activity_enter_name.xml | 1 + src/main/res/layout/activity_set_settings.xml | 239 ++++++++++++++++++ src/main/res/values/bools.xml | 5 - src/main/res/values/defaults.xml | 4 + src/main/res/values/strings.xml | 7 +- src/main/res/xml/preferences.xml | 20 +- 22 files changed, 568 insertions(+), 59 deletions(-) create mode 100644 src/main/java/de/pixart/messenger/ui/SetSettingsActivity.java create mode 100644 src/main/java/de/pixart/messenger/utils/FirstStartManager.java create mode 100644 src/main/res/drawable-hdpi/ic_help_circle_outline_black_24dp.png create mode 100644 src/main/res/drawable-mdpi/ic_help_circle_outline_black_24dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_help_circle_outline_black_24dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_help_circle_outline_black_24dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_help_circle_outline_black_24dp.png create mode 100644 src/main/res/layout/activity_set_settings.xml delete mode 100644 src/main/res/values/bools.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index ed2443f28..bee9d8f21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ### Changelog +#### Version 2.2.2 +* add activity to define some important privacy settings on first start + #### Version 2.2.1 * use extra activity for enter name during registration (PAM) * bug fixes diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index d458673da..71b2e5909 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -305,6 +305,10 @@ android:name=".ui.EnterNameActivity" android:label="@string/enter_your_name" android:launchMode="singleTask" /> + <activity + android:name=".ui.SetSettingsActivity" + android:label="@string/title_activity_settings" + android:launchMode="singleTask" /> <activity android:name=".ui.MucUsersActivity" android:label="@string/group_chat_members" /> diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java index b06ebc85d..caea57fc8 100644 --- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java +++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java @@ -164,6 +164,12 @@ import de.pixart.messenger.xmpp.stanzas.PresencePacket; import me.leolin.shortcutbadger.ShortcutBadger; import rocks.xmpp.addr.Jid; +import static de.pixart.messenger.ui.SettingsActivity.CHAT_STATES; +import static de.pixart.messenger.ui.SettingsActivity.CONFIRM_MESSAGES; +import static de.pixart.messenger.ui.SettingsActivity.ENABLE_MULTI_ACCOUNTS; +import static de.pixart.messenger.ui.SettingsActivity.INDICATE_RECEIVED; +import static de.pixart.messenger.ui.SettingsActivity.ENABLE_MULTI_ACCOUNTS; + public class XmppConnectionService extends Service { public static final String ACTION_REPLY_TO_CONVERSATION = "reply_to_conversations"; @@ -3912,7 +3918,7 @@ public class XmppConnectionService extends Service { } public boolean confirmMessages() { - return getBooleanPreference("confirm_messages", R.bool.confirm_messages); + return getBooleanPreference(CONFIRM_MESSAGES, R.bool.confirm_messages); } public boolean allowMessageCorrection() { @@ -3920,7 +3926,7 @@ public class XmppConnectionService extends Service { } public boolean sendChatStates() { - return getBooleanPreference("chat_states", R.bool.chat_states); + return getBooleanPreference(CHAT_STATES, R.bool.chat_states); } private boolean synchronizeWithBookmarks() { @@ -3928,7 +3934,7 @@ public class XmppConnectionService extends Service { } public boolean indicateReceived() { - return getBooleanPreference("indicate_received", R.bool.indicate_received); + return getBooleanPreference(INDICATE_RECEIVED, R.bool.indicate_received); } public boolean useTorToConnect() { @@ -3948,7 +3954,7 @@ public class XmppConnectionService extends Service { } public boolean multipleAccounts() { - return getBooleanPreference("enable_multi_accounts", R.bool.enable_multi_accounts); + return getBooleanPreference(ENABLE_MULTI_ACCOUNTS, R.bool.enable_multi_accounts); } public int unreadCount() { diff --git a/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java b/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java index e84e657b7..009ea217e 100644 --- a/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java +++ b/src/main/java/de/pixart/messenger/ui/ConversationsActivity.java @@ -95,6 +95,7 @@ import de.pixart.messenger.xmpp.chatstate.ChatState; import rocks.xmpp.addr.Jid; import static de.pixart.messenger.ui.ConversationFragment.REQUEST_DECRYPT_PGP; +import static de.pixart.messenger.ui.SettingsActivity.USE_INTERNAL_UPDATER; public class ConversationsActivity extends XmppActivity implements OnConversationSelected, OnConversationArchived, OnConversationsListItemUpdated, OnConversationRead, XmppConnectionService.OnAccountUpdate, XmppConnectionService.OnConversationUpdate, XmppConnectionService.OnRosterUpdate, OnUpdateBlocklist, XmppConnectionService.OnShowErrorToast, XmppConnectionService.OnAffiliationChanged, XmppConnectionService.OnRoomDestroy { @@ -195,10 +196,12 @@ public class ConversationsActivity extends XmppActivity implements OnConversatio System.exit(0); } - if (xmppConnectionService.getAccounts().size() != 0) { - if (xmppConnectionService.hasInternetConnection()) { - if (xmppConnectionService.isWIFI() || (xmppConnectionService.isMobile() && !xmppConnectionService.isMobileRoaming())) { - AppUpdate(xmppConnectionService.installedFrom()); + if (useInternalUpdater()) { + if (xmppConnectionService.getAccounts().size() != 0) { + if (xmppConnectionService.hasInternetConnection()) { + if (xmppConnectionService.isWIFI() || (xmppConnectionService.isMobile() && !xmppConnectionService.isMobileRoaming())) { + AppUpdate(xmppConnectionService.installedFrom()); + } } } } diff --git a/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java b/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java index f62d68bef..9f06bcf2a 100644 --- a/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java +++ b/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java @@ -299,7 +299,7 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat overridePendingTransition(R.animator.fade_in, R.animator.fade_out); finish(); } else if (mInitMode && mAccount != null && mAccount.getStatus() == Account.State.ONLINE) { - runOnUiThread(this::performPostVerificationRedirect); + runOnUiThread(this::next); } if (mAccount != null) { updateAccountInformation(false); @@ -307,7 +307,7 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat updateSaveButton(); } - private void performPostVerificationRedirect() { + private void next() { if (redirectInProgress.compareAndSet(false, true)) { Intent intent = new Intent(this, EnterNameActivity.class); startActivity(intent); diff --git a/src/main/java/de/pixart/messenger/ui/EnterNameActivity.java b/src/main/java/de/pixart/messenger/ui/EnterNameActivity.java index 1f59901a6..ccfd88dad 100644 --- a/src/main/java/de/pixart/messenger/ui/EnterNameActivity.java +++ b/src/main/java/de/pixart/messenger/ui/EnterNameActivity.java @@ -13,13 +13,12 @@ import de.pixart.messenger.databinding.ActivityEnterNameBinding; import de.pixart.messenger.entities.Account; import de.pixart.messenger.services.XmppConnectionService; import de.pixart.messenger.utils.AccountUtils; +import de.pixart.messenger.utils.FirstStartManager; public class EnterNameActivity extends XmppActivity implements XmppConnectionService.OnAccountUpdate { private ActivityEnterNameBinding binding; - private Account account; - private AtomicBoolean setNick = new AtomicBoolean(false); @Override @@ -28,19 +27,38 @@ public class EnterNameActivity extends XmppActivity implements XmppConnectionSer this.binding = DataBindingUtil.setContentView(this, R.layout.activity_enter_name); setSupportActionBar((Toolbar) this.binding.toolbar); this.binding.next.setOnClickListener(this::next); + updateNextButton(); this.setNick.set(savedInstanceState != null && savedInstanceState.getBoolean("set_nick", false)); } + private void updateNextButton() { + if (account != null && (account.getStatus() == Account.State.CONNECTING || account.getStatus() == Account.State.REGISTRATION_SUCCESSFUL)) { + this.binding.next.setEnabled(false); + this.binding.next.setText(R.string.account_status_connecting); + } else if (account != null && (account.getStatus() == Account.State.ONLINE)) { + this.binding.next.setEnabled(true); + this.binding.next.setText(R.string.next); + } + } + private void next(View view) { + FirstStartManager firstStartManager = new FirstStartManager(this); if (account != null) { String name = this.binding.name.getText().toString().trim(); account.setDisplayName(name); xmppConnectionService.publishDisplayName(account); - Intent intent = new Intent(this, PublishProfilePictureActivity.class); - intent.putExtra(PublishProfilePictureActivity.EXTRA_ACCOUNT, account.getJid().asBareJid().toEscapedString()); - intent.putExtra("setup", true); - startActivity(intent); - overridePendingTransition(R.animator.fade_in, R.animator.fade_out); + if (firstStartManager.isFirstTimeLaunch()) { + Intent intent = new Intent(this, SetSettingsActivity.class); + intent.putExtra("setup", true); + startActivity(intent); + overridePendingTransition(R.animator.fade_in, R.animator.fade_out); + } else { + Intent intent = new Intent(this, PublishProfilePictureActivity.class); + intent.putExtra(PublishProfilePictureActivity.EXTRA_ACCOUNT, account.getJid().asBareJid().toEscapedString()); + intent.putExtra("setup", true); + startActivity(intent); + overridePendingTransition(R.animator.fade_in, R.animator.fade_out); + } } finish(); } @@ -54,12 +72,14 @@ public class EnterNameActivity extends XmppActivity implements XmppConnectionSer @Override protected void refreshUiReal() { checkSuggestPreviousNick(); + updateNextButton(); } @Override void onBackendConnected() { this.account = AccountUtils.getFirst(xmppConnectionService); checkSuggestPreviousNick(); + updateNextButton(); } private void checkSuggestPreviousNick() { diff --git a/src/main/java/de/pixart/messenger/ui/SetSettingsActivity.java b/src/main/java/de/pixart/messenger/ui/SetSettingsActivity.java new file mode 100644 index 000000000..74786b6a9 --- /dev/null +++ b/src/main/java/de/pixart/messenger/ui/SetSettingsActivity.java @@ -0,0 +1,171 @@ +package de.pixart.messenger.ui; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.View; + +import de.pixart.messenger.Config; +import de.pixart.messenger.R; +import de.pixart.messenger.databinding.ActivitySetSettingsBinding; +import de.pixart.messenger.entities.Account; +import de.pixart.messenger.services.XmppConnectionService; +import de.pixart.messenger.utils.AccountUtils; +import de.pixart.messenger.utils.FirstStartManager; + +import static de.pixart.messenger.ui.SettingsActivity.BROADCAST_LAST_ACTIVITY; +import static de.pixart.messenger.ui.SettingsActivity.CHAT_STATES; +import static de.pixart.messenger.ui.SettingsActivity.CONFIRM_MESSAGES; +import static de.pixart.messenger.ui.SettingsActivity.FORBID_SCREENSHOTS; +import static de.pixart.messenger.ui.SettingsActivity.SHOW_LINKS_INSIDE; +import static de.pixart.messenger.ui.SettingsActivity.SHOW_MAPS_INSIDE; + +public class SetSettingsActivity extends XmppActivity implements XmppConnectionService.OnAccountUpdate { + ActivitySetSettingsBinding binding; + Account account; + static final int FORDBIDSCREENSHOTS = 1; + static final int SHOWWEBLINKS = 2; + static final int SHOWMAPPREVIEW = 3; + static final int CHATSTATES = 4; + static final int CONFIRMMESSAGES = 5; + static final int LASTSEEN = 6; + + @Override + protected void refreshUiReal() { + createInfoMenu(); + } + + @Override + void onBackendConnected() { + this.account = AccountUtils.getFirst(xmppConnectionService); + refreshUi(); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.binding = DataBindingUtil.setContentView(this, R.layout.activity_set_settings); + setSupportActionBar((Toolbar) this.binding.toolbar); + this.binding.next.setOnClickListener(this::next); + createInfoMenu(); + getDefaults(); + } + + private void createInfoMenu() { + this.binding.actionInfoForbidScreenshots.setOnClickListener(string -> showInfo(FORDBIDSCREENSHOTS)); + this.binding.actionInfoShowWeblinks.setOnClickListener(string -> showInfo(SHOWWEBLINKS)); + this.binding.actionInfoShowMapPreviews.setOnClickListener(string -> showInfo(SHOWMAPPREVIEW)); + this.binding.actionInfoChatStates.setOnClickListener(string -> showInfo(CHATSTATES)); + this.binding.actionInfoConfirmMessages.setOnClickListener(string -> showInfo(CONFIRMMESSAGES)); + this.binding.actionInfoLastSeen.setOnClickListener(string -> showInfo(LASTSEEN)); + } + + private void getDefaults() { + this.binding.forbidScreenshots.setChecked(getResources().getBoolean(R.bool.screen_security)); + this.binding.showLinks.setChecked(getResources().getBoolean(R.bool.show_links_inside)); + this.binding.showMappreview.setChecked(getResources().getBoolean(R.bool.show_maps_inside)); + this.binding.chatStates.setChecked(getResources().getBoolean(R.bool.chat_states)); + this.binding.confirmMessages.setChecked(getResources().getBoolean(R.bool.confirm_messages)); + this.binding.lastSeen.setChecked(getResources().getBoolean(R.bool.last_activity)); + } + + private void next(View view) { + setSettings(); + FirstStartManager firstStartManager = new FirstStartManager(this); + firstStartManager.setFirstTimeLaunch(false); + if (account != null) { + Intent intent = new Intent(this, PublishProfilePictureActivity.class); + intent.putExtra(PublishProfilePictureActivity.EXTRA_ACCOUNT, account.getJid().asBareJid().toEscapedString()); + intent.putExtra("setup", true); + startActivity(intent); + overridePendingTransition(R.animator.fade_in, R.animator.fade_out); + } + finish(); + } + + private void showInfo(int setting) { + Log.d(Config.LOGTAG, "STRING " + setting); + String title; + String message; + switch (setting) { + case FORDBIDSCREENSHOTS: + title = getString(R.string.pref_screen_security); + message = getString(R.string.pref_screen_security_summary); + break; + case SHOWWEBLINKS: + title = getString(R.string.pref_show_links_inside); + message = getString(R.string.pref_show_links_inside_summary); + break; + case SHOWMAPPREVIEW: + title = getString(R.string.pref_show_mappreview_inside); + message = getString(R.string.pref_show_mappreview_inside_summary); + break; + case CHATSTATES: + title = getString(R.string.pref_chat_states); + message = getString(R.string.pref_chat_states_summary); + break; + case CONFIRMMESSAGES: + title = getString(R.string.pref_confirm_messages); + message = getString(R.string.pref_confirm_messages_summary); + break; + case LASTSEEN: + title = getString(R.string.pref_broadcast_last_activity); + message = getString(R.string.pref_broadcast_last_activity_summary); + break; + default: + title = getString(R.string.error); + message = getString(R.string.error); + } + Log.d(Config.LOGTAG, "STRING value " + title); + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(title); + builder.setMessage(message); + builder.setNeutralButton(getString(R.string.ok), null); + builder.create().show(); + } + + + private void setSettings() { + final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); + if (this.binding.forbidScreenshots.isChecked()) { + preferences.edit().putBoolean(FORBID_SCREENSHOTS, true).apply(); + } else { + preferences.edit().putBoolean(FORBID_SCREENSHOTS, false).apply(); + } + if (this.binding.showLinks.isChecked()) { + preferences.edit().putBoolean(SHOW_LINKS_INSIDE, true).apply(); + } else { + preferences.edit().putBoolean(SHOW_LINKS_INSIDE, false).apply(); + } + if (this.binding.showMappreview.isChecked()) { + preferences.edit().putBoolean(SHOW_MAPS_INSIDE, true).apply(); + } else { + preferences.edit().putBoolean(SHOW_MAPS_INSIDE, false).apply(); + } + if (this.binding.chatStates.isChecked()) { + preferences.edit().putBoolean(CHAT_STATES, true).apply(); + } else { + preferences.edit().putBoolean(CHAT_STATES, false).apply(); + } + if (this.binding.confirmMessages.isChecked()) { + preferences.edit().putBoolean(CONFIRM_MESSAGES, true).apply(); + } else { + preferences.edit().putBoolean(CONFIRM_MESSAGES, false).apply(); + } + if (this.binding.lastSeen.isChecked()) { + preferences.edit().putBoolean(BROADCAST_LAST_ACTIVITY, true).apply(); + } else { + preferences.edit().putBoolean(BROADCAST_LAST_ACTIVITY, false).apply(); + } + } + + @Override + public void onAccountUpdate() { + refreshUi(); + } +} diff --git a/src/main/java/de/pixart/messenger/ui/SettingsActivity.java b/src/main/java/de/pixart/messenger/ui/SettingsActivity.java index 7d6f32dd8..9e321e079 100644 --- a/src/main/java/de/pixart/messenger/ui/SettingsActivity.java +++ b/src/main/java/de/pixart/messenger/ui/SettingsActivity.java @@ -56,12 +56,18 @@ public class SettingsActivity extends XmppActivity implements public static final String OMEMO_SETTING = "omemo"; public static final String SHOW_FOREGROUND_SERVICE = "show_foreground_service"; public static final String USE_BUNDLED_EMOJIS = "use_bundled_emoji"; - public static final String USE_MULTI_ACCOUNTS = "use_multi_accounts"; + public static final String ENABLE_MULTI_ACCOUNTS = "enable_multi_accounts"; public static final String QUICK_SHARE_ATTACHMENT_CHOICE = "quick_share_attachment_choice"; public static final String NUMBER_OF_ACCOUNTS = "number_of_accounts"; public static final String PLAY_GIF_INSIDE = "play_gif_inside"; + public static final String USE_INTERNAL_UPDATER = "use_internal_updater"; public static final String SHOW_LINKS_INSIDE = "show_links_inside"; + public static final String SHOW_MAPS_INSIDE = "show_maps_inside"; public static final String PREFER_XMPP_AVATAR = "prefer_xmpp_avatar"; + public static final String CHAT_STATES = "chat_states"; + public static final String FORBID_SCREENSHOTS = "screen_security"; + public static final String CONFIRM_MESSAGES = "confirm_messages"; + public static final String INDICATE_RECEIVED = "indicate_received"; public static final int REQUEST_CREATE_BACKUP = 0xbf8701; Preference multiAccountPreference; @@ -438,7 +444,7 @@ public class SettingsActivity extends XmppActivity implements @Override public void onSharedPreferenceChanged(SharedPreferences preferences, String name) { final List<String> resendPresence = Arrays.asList( - "confirm_messages", + CONFIRM_MESSAGES, DND_ON_SILENT_MODE, AWAY_WHEN_SCREEN_IS_OFF, "allow_message_correction", diff --git a/src/main/java/de/pixart/messenger/ui/XmppActivity.java b/src/main/java/de/pixart/messenger/ui/XmppActivity.java index afc319048..936c62390 100644 --- a/src/main/java/de/pixart/messenger/ui/XmppActivity.java +++ b/src/main/java/de/pixart/messenger/ui/XmppActivity.java @@ -97,6 +97,7 @@ import pl.droidsonroids.gif.GifDrawable; import rocks.xmpp.addr.Jid; import static de.pixart.messenger.ui.SettingsActivity.USE_BUNDLED_EMOJIS; +import static de.pixart.messenger.ui.SettingsActivity.USE_INTERNAL_UPDATER; public abstract class XmppActivity extends ActionBarActivity { @@ -455,6 +456,10 @@ public abstract class XmppActivity extends ActionBarActivity { return getBooleanPreference("display_enter_key", R.bool.display_enter_key); } + public boolean useInternalUpdater() { + return getBooleanPreference(USE_INTERNAL_UPDATER, R.bool.use_internal_updater); + } + public SharedPreferences getPreferences() { return PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); } diff --git a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java index df063bcdb..be483a5f6 100644 --- a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java +++ b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java @@ -84,6 +84,7 @@ import pl.droidsonroids.gif.GifImageView; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static de.pixart.messenger.ui.SettingsActivity.PLAY_GIF_INSIDE; import static de.pixart.messenger.ui.SettingsActivity.SHOW_LINKS_INSIDE; +import static de.pixart.messenger.ui.SettingsActivity.SHOW_MAPS_INSIDE; public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextView.CopyHandler { @@ -107,6 +108,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie private boolean mIndicateReceived = false; private boolean mPlayGifInside = false; private boolean mShowLinksInside = false; + private boolean mShowMapsInside = false; private OnQuoteListener onQuoteListener; public MessageAdapter(XmppActivity activity, List<Message> messages) { @@ -740,39 +742,43 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie viewHolder.audioPlayer.setVisibility(View.GONE); viewHolder.messageBody.setVisibility(View.GONE); String url = GeoHelper.MapPreviewUri(message); - viewHolder.image.setVisibility(View.VISIBLE); viewHolder.gifImage.setVisibility(View.GONE); viewHolder.richlinkview.setVisibility(View.GONE); - double target = metrics.density * 200; - int scaledW; - int scaledH; - if (Math.max(500, 500) * metrics.density <= target) { - scaledW = (int) (500 * metrics.density); - scaledH = (int) (500 * metrics.density); - } else if (Math.max(500, 500) <= target) { - scaledW = 500; - scaledH = 500; + if (mShowMapsInside) { + viewHolder.image.setVisibility(View.VISIBLE); + double target = metrics.density * 200; + int scaledW; + int scaledH; + if (Math.max(500, 500) * metrics.density <= target) { + scaledW = (int) (500 * metrics.density); + scaledH = (int) (500 * metrics.density); + } else if (Math.max(500, 500) <= target) { + scaledW = 500; + scaledH = 500; + } else { + scaledW = (int) target; + scaledH = (int) (500 / ((double) 500 / target)); + } + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(scaledW, scaledH); + layoutParams.setMargins(0, (int) (metrics.density * 4), 0, (int) (metrics.density * 4)); + viewHolder.image.setLayoutParams(layoutParams); + viewHolder.image.setOnClickListener(v -> showLocation(message)); + Picasso + .get() + .load(Uri.parse(url)) + .placeholder(R.drawable.ic_map_marker_grey600_48dp) + .error(R.drawable.ic_map_marker_grey600_48dp) + .into(viewHolder.image); + viewHolder.image.setMaxWidth(500); + viewHolder.image.setAdjustViewBounds(true); + viewHolder.download_button.setVisibility(View.GONE); } else { - scaledW = (int) target; - scaledH = (int) (500 / ((double) 500 / target)); + viewHolder.image.setVisibility(View.GONE); + viewHolder.download_button.setVisibility(View.VISIBLE); + viewHolder.download_button.setText(R.string.show_location); + viewHolder.download_button.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_map_marker_grey600_48dp, 0, 0, 0); + viewHolder.download_button.setOnClickListener(v -> showLocation(message)); } - LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(scaledW, scaledH); - layoutParams.setMargins(0, (int) (metrics.density * 4), 0, (int) (metrics.density * 4)); - viewHolder.image.setLayoutParams(layoutParams); - viewHolder.image.setOnClickListener(v -> showLocation(message)); - Picasso - .get() - .load(Uri.parse(url)) - .placeholder(R.drawable.ic_map_marker_grey600_48dp) - .error(R.drawable.ic_map_marker_grey600_48dp) - .into(viewHolder.image); - viewHolder.image.setMaxWidth(500); - viewHolder.image.setAdjustViewBounds(true); - viewHolder.download_button.setVisibility(View.GONE); - viewHolder.download_button.setText(R.string.show_location); - viewHolder.download_button.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_map_marker_grey600_48dp, 0, 0, 0); - viewHolder.download_button.setOnClickListener(v -> showLocation(message)); - } private void displayAudioMessage(ViewHolder viewHolder, Message message, boolean darkBackground) { @@ -1183,6 +1189,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie this.mIndicateReceived = p.getBoolean("indicate_received", activity.getResources().getBoolean(R.bool.indicate_received)); this.mPlayGifInside = p.getBoolean(PLAY_GIF_INSIDE, activity.getResources().getBoolean(R.bool.play_gif_inside)); this.mShowLinksInside = p.getBoolean(SHOW_LINKS_INSIDE, activity.getResources().getBoolean(R.bool.show_links_inside)); + this.mShowMapsInside = p.getBoolean(SHOW_MAPS_INSIDE, activity.getResources().getBoolean(R.bool.show_maps_inside)); } public void setHighlightedTerm(List<String> terms) { diff --git a/src/main/java/de/pixart/messenger/utils/FirstStartManager.java b/src/main/java/de/pixart/messenger/utils/FirstStartManager.java new file mode 100644 index 000000000..755b4a265 --- /dev/null +++ b/src/main/java/de/pixart/messenger/utils/FirstStartManager.java @@ -0,0 +1,30 @@ +package de.pixart.messenger.utils; + +import android.content.Context; +import android.content.SharedPreferences; + +import static android.content.Context.MODE_PRIVATE; + +public class FirstStartManager { + Context context; + private SharedPreferences pref; + private SharedPreferences.Editor editor; + private static final String PREF_NAME = "de.pixart.messenger"; + private static final String IS_FIRST_TIME_LAUNCH = "IsFirstTimeLaunch"; + + public FirstStartManager(Context context) { + this.context = context; + pref = this.context.getSharedPreferences(PREF_NAME, MODE_PRIVATE); + editor = pref.edit(); + } + + public void setFirstTimeLaunch(boolean isFirstTime) { + editor = pref.edit(); + editor.putBoolean(IS_FIRST_TIME_LAUNCH, isFirstTime); + editor.commit(); + } + + public boolean isFirstTimeLaunch() { + return pref.getBoolean(IS_FIRST_TIME_LAUNCH, true); + } +} diff --git a/src/main/res/drawable-hdpi/ic_help_circle_outline_black_24dp.png b/src/main/res/drawable-hdpi/ic_help_circle_outline_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..66c3262312c723b9085e6bc3f98d66755aa08e21 GIT binary patch literal 888 zcmV-;1Bd*HP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm0009&Nkl<Zc-rk* zL2FY%5PsG+VhvG=M#cIMgeC}We?jjNvF$}X)Z`!7Bq(?gTkzWEm5PU+ikO0j)|&?r zJX_O)Vxv%dd*Z<$M$pz-m|z%Z_wDZ6*H(A~AB1*xc4l{WzS(`Amq;RsxR9fOF+dHl z3fKe$fS-r}|JDFhQMd0fIDQE*3)lwi8Da<U5HNHQj%NWruI^q$2pfxlv-{=zB;bn! z$0>x(sW=@Uz?G6Y@C~p6C;>)rMN<gzdldgCblM6#KF;M-1_A4m2|oa)0VfRX3Ef+O zEs4!FoYUFLuQ8MS0L<VDN3neyZBhHrUF`&yHZ8!g!yV3}O)i}x$rNMs4dA?DOaUi; z-@^mqcO4y-iLklB%r|N4{28X&v=q)C2P^@06$f+|14$`@Xff3(YZHLa<ovM0`IiPI z^MxXaJaZ=MHVjKiYDS^IWKs9$74|Abw`0oKb4;lmP~<#Kn|FXBAcH94Iq22-1-LA+ znPO6D)}%4pA%mw4QcXC2iqSjG1ffce64Bk(Z2-p@hE<Uib*iY)y~+fuB0I|1BRT=p z$e@)FeR@_h3f&Bo+bVfN^eZ|6tdc<`hlF*K*!~`(Uncquok=!rwoOxR65Fps^hb$) zQ)d!NUatD|D}b-W_KlD+IiervOhj`!<-qxC%z=CcI1)1MnBkd;C4f5&Ppl(*dvOHd zGKKCj47_a6CR?SDt3xap`ZuxlNF!}job*;_P{UCfeN61U0`wc&pk?%_&Y-Fxk;#N! z7soAZSP>cBwzlDYw<{fDCv7-BZQDwSX6|#0Y^*ER%^cTGZ#m)vT@iDABtASaF)+mN zLB-GsT0Tvr#?=3dQLmI8ERAsoP++c<^S1Aw+@=0Pi~*cuQYWyz)C;-JII^J`glPb> zXO)Sl2g;W`Y~>vu+5)rk0t<0JE#Ae3D@wJgGMv$E`1)O~(4ZuU?rxL}$u5m!TKn<1 z+q)CK;+?0B)L+J%RL=YRyq-gbFQbm?d40j<%5yT|#q)t9@M8YJK}&31lDnqp;Hqc6 z0}#R3_W_?gyN`TxHVhkw^kJu1!TUth`}Z?z6Z`oJ>K=;EtcfJ@zsn!|dP?!ms?`<% O0000<MNUMnLSTZkqMUsI literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-mdpi/ic_help_circle_outline_black_24dp.png b/src/main/res/drawable-mdpi/ic_help_circle_outline_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e7f0d63b59ea377c4c505350ff31cebb631d8baa GIT binary patch literal 670 zcmV;P0%84$P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80007INkl<Zc-rlk zze`(D6vtyVY1Ktiux^FAq`Ek12Sc+dxF!MDynjIdffgD&bab$3?4(fW*rijEjvZtE zfn-ct$l#FF5Ka7E_&zus-;aAuL?}J*fycY&o_pTC=bU?9BJp3`WD2A~2CRcDS?9a- zeJ;KNs-O;9pa-r=kMGRbXX;K&mO%wvfsrLf_Y>!iwcSO~1VdrGMdKx~MLfQ13%w!d z7HP|Q@m+8sjMcbkDq>!WIyK?+1#LMwQ51{!!8`EGVg4d0bFS}1(dEpWV(~X1DaPkP z0i1y@G0%C9`C{h06;3p5W1_<C8}iGO%IH^NRB{QvfN7;)7WOJOspdy}O>Mg|{6Q?( z0l!E`ynnBpFgDIPHUKZ90`FKDDyi}3puw@<U;{iM=J^lD8q}5I3A@!W2huDgeyZtc zf5mM!<9h+~_c`{Lx;i`j6s?C<%nTPEF{iaGfY%@go(7EXaPBqBvzDs(xJ-}(8!V|o z+aD)$;FNRCQLF~&_{Y%W-Em8@^nS$ZW-AL^{7Rg0P_fz;WjZ@42bREhQ8P|d+B!Ml zdIYoJn~3g1Rfxilpc{4saY3kMRixez@F+$<HV9=Jwqq_GBb(yf^D(-QZPHK|B5#5{ zg;gO+uuS@2bslpAu7RIqEkaM1;*85>RE~)1ocO9-h|Y|<jE-!!>xHQKeO{@_J2;T! zRo)kOgmsIi8<H|}-d4=EAE<_;Fm6j$XE3E=qTS<}kJXaNrnI4&(l#U6Q%z|#q$w@j zW$~c4eBjWQ8{LoNw&g)7TCw;sIgaXjCLs^@YxZx-4I5_y8^KGei~s-t07*qoM6N<$ Ef>p>oMF0Q* literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-xhdpi/ic_help_circle_outline_black_24dp.png b/src/main/res/drawable-xhdpi/ic_help_circle_outline_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..82f8a1ab0380bfdbf3d1cd2882f04b8df72b0c49 GIT binary patch literal 1435 zcmV;M1!Ve(P)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF000GINkl<Zc-rk- zO>9*~6rL7KtHEMaEPcR(2*iYi)(|(+s);L0bf*&760nrG!!AtwY@)CsLEI=mCb$r( z=z_SADuz%AjWKBpLTggXf(4i;v`8$3pXxc`YalP@+&gn;?(HkNC;5`*_MUTQ=FXhI zInS7!a>^;EoHC&TVJ)G9u!qn?=mmQ4jQ`h4XnYVRynxV5*g-f=m?HdV34V77yv<mU zs@XE}g@oONvxG^9No%-H_#HAAR`SG)gl@vs0F&0hvOgd!tE7p~CA1U%AlylD^3z}) zV}v&7o>5v1<8|BeTwlT92MGOy6F@(njo}>|d%-$C#~5aWnqb`G2Kq1IAmMGob2uvV z3AKc3pcc=HcxN4WY;4F7crv3ogcib|F<)nx(B)~kn70I3QM>FCyhU{u3&4slMhxaM zVRJy&RRvia34g^b!pm7~d+p2LB>YHtIz|1<q2p%6A~dCG@J>e<xK2WS20O4G$6_kN zCImN(>~8ie3jcviilb`y@3#ntVDWDN{P$P*-!jXyyoGR08PmSdF0x%QLQ|N0O$>hx z0+{nLvBDj^Q?it~McE0rEkBACEk%$co%v2n{$mLOp6@KTa+hKgM&VYysayGKKUkc3 zPKbVWOoZ;=4W}%0)Wa}J{9Pdu8!5K`+rrvELO2p2^yO6f;TT;j;C{<_CkPEb3$R-` zUz;p=Uq>b<O^V})?Swag?GdpBN0P5v=xbB#)UKqHe~NHU5IAg6u$Y7GD;dqhI2w|^ zZ<XWHXW<#R;4&ico>TP2Qj78hyDTES7Zkg}+j(9D-#jdkbe>mRM2sbYcM{R7Gwo2e zqfKnzDezvgOj@4DyXE}vTktk23Dk#47C?&nzO>~1THqZ(#urEY&Y-}5$WnKYqT9KE zIVGImb(Z`)3CGLuiDiVx_Ty(^61|qX*DGUp%1YOIY++ww_xX#U{~L#dZCv1Qbs0p5 zAYd$1WEDfJ6qnfHP@5bR__w(XVz0*;_ARy?7PjyWhYasA#fE(5G7!m#okHm<En0vw zSh?O?NTh737Bxo61zXe6guzHsdIk$DMRIIFA9vhEeS(~$E(7Y#Z~-{rx}XF<ClW+) zK^7pZBk(55SW*sf1mUqO1vvs)7{OJ_m*?F6fJa3qh!M=f4IWSuA1;kO>LIs?s*;x* zY)v^3Dk{kmM}Tz!D%VmV^qPy1M$b?<j^0&@t1SU!Z&1eWTo@S=26-^h0(>FJ{*CZt z0NFv3AuS!AG-0|oz87SlBs}CPw-7QNZc&7lOl5X!R3T!NKH8d)C9x4xnLRvON$hOW zk{Hv+N>TKk0G9fdGWg!<wJV-wmyb{`B1{<h26(xL+~Z2jpOjWAWwdeQSr#`qSJKM< z<PjN$TmT-!F(sGi3~{zNXwk05N)@mG-A2C}TN28^XqOHgU~Dz<7nx}+Kn-k>b~(B^ zq=n_g<WnVUyM{%`dI8!HJxXKRo8Y6w(qbh#oZbn1VUk6I#C&Xf?ZTBa!9{5)Z;Hs@ zr(0xJq&WGNFuq!g3>Q<MP5TSPHA!7XvQseOnxqQY@|R6?lhjLDL|oNagi9v6O>P8U z!Y67hzzvU>=+2UhCc`$l`;WtriND|HSe&o5)`MrdQL@h5Ym}@r_ZlUekka-TyGF^u zEVg}=VRUJg9Y<wp5OupgpdZi9;~ke)*+piCX)ey^sL8HbdK7-X##9g$;R+{GocuU+ zEHM>K4amUGn7jQ1zLRD<FbtUuW){&Cgck`P;e5OPWM%-BoaWg!@u<|AE3@yJyEXdq pA5HPIZFuK_m~c)x<&;y!)BlCO7UKvF!rcG>002ovPDHLkV1gXkpZEX( literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-xxhdpi/ic_help_circle_outline_black_24dp.png b/src/main/res/drawable-xxhdpi/ic_help_circle_outline_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb7065fe21c8176cc99e334c86f09b432265dff GIT binary patch literal 1979 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 N002ovPDHLkV1hjn#329x literal 0 HcmV?d00001 diff --git a/src/main/res/drawable-xxxhdpi/ic_help_circle_outline_black_24dp.png b/src/main/res/drawable-xxxhdpi/ic_help_circle_outline_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5838e0bbd5ee5c65f67d08b3cc027f173a5c452e GIT binary patch literal 4762 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 literal 0 HcmV?d00001 diff --git a/src/main/res/layout/activity_enter_name.xml b/src/main/res/layout/activity_enter_name.xml index cb446479d..e98d55233 100644 --- a/src/main/res/layout/activity_enter_name.xml +++ b/src/main/res/layout/activity_enter_name.xml @@ -54,6 +54,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" android:layout_alignParentBottom="true" android:text="@string/next" android:textColor="?colorAccent" /> diff --git a/src/main/res/layout/activity_set_settings.xml b/src/main/res/layout/activity_set_settings.xml new file mode 100644 index 000000000..5560b6106 --- /dev/null +++ b/src/main/res/layout/activity_set_settings.xml @@ -0,0 +1,239 @@ +<?xml version="1.0" encoding="utf-8"?> +<layout xmlns:tools="http://schemas.android.com/tools" + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:card_view="http://schemas.android.com/apk/res-auto"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <include + android:id="@+id/toolbar" + layout="@layout/toolbar" /> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fillViewport="true"> + + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:padding="@dimen/card_padding_regular"> + + <TextView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingBottom="@dimen/card_padding_regular" + android:text="@string/set_settings_intro" + android:textAppearance="@style/TextAppearance.Conversations.Subhead" /> + + <TableLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:shrinkColumns="0" + android:stretchColumns="0"> + + <TableRow + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingBottom="@dimen/card_padding_regular"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:ellipsize="end" + android:gravity="center_vertical" + android:text="@string/pref_screen_security" + android:textAppearance="@style/TextAppearance.Conversations.Body1" /> + + <ImageButton + android:id="@+id/action_info_forbid_screenshots" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:alpha="?attr/icon_alpha" + android:background="?attr/selectableItemBackgroundBorderless" + android:gravity="center_vertical" + android:padding="@dimen/image_button_padding" + android:src="@drawable/ic_help_circle_outline_black_24dp" /> + + <android.support.v7.widget.AppCompatCheckBox + android:id="@+id/forbid_screenshots" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:gravity="center_vertical" + android:padding="@dimen/image_button_padding" /> + </TableRow> + + <TableRow + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:paddingBottom="@dimen/card_padding_regular"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:ellipsize="end" + android:gravity="center_vertical" + android:text="@string/pref_show_links_inside" + android:textAppearance="@style/TextAppearance.Conversations.Body1" /> + + <ImageButton + android:id="@+id/action_info_show_weblinks" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:alpha="?attr/icon_alpha" + android:background="?attr/selectableItemBackgroundBorderless" + android:gravity="center_vertical" + android:padding="@dimen/image_button_padding" + android:src="@drawable/ic_help_circle_outline_black_24dp" /> + + <android.support.v7.widget.AppCompatCheckBox + android:id="@+id/show_links" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:gravity="center_vertical" /> + </TableRow> + + <TableRow + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:paddingBottom="@dimen/card_padding_regular"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:ellipsize="end" + android:gravity="center_vertical" + android:text="@string/pref_show_mappreview_inside" + android:textAppearance="@style/TextAppearance.Conversations.Body1" /> + + <ImageButton + android:id="@+id/action_info_show_map_previews" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:alpha="?attr/icon_alpha" + android:background="?attr/selectableItemBackgroundBorderless" + android:gravity="center_vertical" + android:padding="@dimen/image_button_padding" + android:src="@drawable/ic_help_circle_outline_black_24dp" /> + + <android.support.v7.widget.AppCompatCheckBox + android:id="@+id/show_mappreview" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:gravity="center_vertical" /> + </TableRow> + + <TableRow + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:paddingBottom="@dimen/card_padding_regular"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:ellipsize="end" + android:gravity="center_vertical" + android:text="@string/pref_chat_states" + android:textAppearance="@style/TextAppearance.Conversations.Body1" /> + + <ImageButton + android:id="@+id/action_info_chat_states" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:alpha="?attr/icon_alpha" + android:background="?attr/selectableItemBackgroundBorderless" + android:gravity="center_vertical" + android:padding="@dimen/image_button_padding" + android:src="@drawable/ic_help_circle_outline_black_24dp" /> + + <android.support.v7.widget.AppCompatCheckBox + android:id="@+id/chat_states" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:gravity="center_vertical" /> + </TableRow> + + <TableRow + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:paddingBottom="@dimen/card_padding_regular"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:ellipsize="end" + android:gravity="center_vertical" + android:text="@string/pref_confirm_messages" + android:textAppearance="@style/TextAppearance.Conversations.Body1" /> + + <ImageButton + android:id="@+id/action_info_confirm_messages" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:alpha="?attr/icon_alpha" + android:background="?attr/selectableItemBackgroundBorderless" + android:gravity="center_vertical" + android:padding="@dimen/image_button_padding" + android:src="@drawable/ic_help_circle_outline_black_24dp" /> + + <android.support.v7.widget.AppCompatCheckBox + android:id="@+id/confirm_messages" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:gravity="center_vertical" /> + </TableRow> + + <TableRow + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:paddingBottom="@dimen/card_padding_regular"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:ellipsize="end" + android:gravity="center_vertical" + android:text="@string/pref_broadcast_last_activity" + android:textAppearance="@style/TextAppearance.Conversations.Body1" /> + + <ImageButton + android:id="@+id/action_info_last_seen" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:alpha="?attr/icon_alpha" + android:background="?attr/selectableItemBackgroundBorderless" + android:gravity="center_vertical" + android:padding="@dimen/image_button_padding" + android:src="@drawable/ic_help_circle_outline_black_24dp" /> + + <android.support.v7.widget.AppCompatCheckBox + android:id="@+id/last_seen" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:gravity="center_vertical" /> + </TableRow> + </TableLayout> + </LinearLayout> + + <Button + android:id="@+id/next" + style="@style/Widget.Conversations.Button.Borderless" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:layout_alignParentBottom="true" + android:text="@string/next" + android:textColor="?colorAccent" /> + </RelativeLayout> + </ScrollView> + </LinearLayout> +</layout> \ No newline at end of file diff --git a/src/main/res/values/bools.xml b/src/main/res/values/bools.xml deleted file mode 100644 index f5d0a43b6..000000000 --- a/src/main/res/values/bools.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<resources> - <bool name="prefer_xmpp_avatar">true</bool> - <bool name="show_links_inside">true</bool> -</resources> \ No newline at end of file diff --git a/src/main/res/values/defaults.xml b/src/main/res/values/defaults.xml index e8e0c9206..dc4f7ead3 100644 --- a/src/main/res/values/defaults.xml +++ b/src/main/res/values/defaults.xml @@ -113,6 +113,10 @@ <bool name="quick_share_attachment_choice">true</bool> <bool name="screen_security">false</bool> <bool name="play_gif_inside">false</bool> + <bool name="prefer_xmpp_avatar">true</bool> + <bool name="show_links_inside">true</bool> + <bool name="show_maps_inside">true</bool> + <bool name="use_internal_updater">true</bool> <string-array name="domains"> <item>pix-art.de</item> diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index d4dd1c5cf..00f199a0f 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -110,7 +110,7 @@ <string name="pref_sound">Ringtone</string> <string name="pref_sound_summary">Play sound when a new message arrives</string> <string name="pref_send_crash">Send crash reports</string> - <string name="pref_send_crash_summary">By sending in stack traces you are helping the ongoing development of Pix-Art Messenger</string> + <string name="pref_send_crash_summary">By sending stack traces you are helping the ongoing development of Pix-Art Messenger</string> <string name="pref_confirm_messages">Confirm Messages</string> <string name="pref_confirm_messages_summary">Let your contacts know when you have received and read their messages</string> <string name="pref_ui_options">UI</string> @@ -890,4 +890,9 @@ <string name="mgmt_account_password_forgotten">Password forgotten</string> <string name="password_forgotten_title">Password forgotten</string> <string name="password_forgotten_text">You have forgotten your account password? We will now try to open the support website of your provider.</string> + <string name="set_settings_intro">Here you can set some important privacy settings to your needs. All the settings can also be modified later.</string> + <string name="pref_show_mappreview_inside_summary">Show map previews directly inside the chat view</string> + <string name="pref_show_mappreview_inside">Show previews of locations in chat</string> + <string name="pref_use_internal_updater_summary">Let the messenger look for new app updates once a day</string> + <string name="pref_use_internal_updater">look for updates</string> </resources> diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml index 15fe0fc34..069adc3e8 100644 --- a/src/main/res/xml/preferences.xml +++ b/src/main/res/xml/preferences.xml @@ -76,11 +76,6 @@ android:key="play_gif_inside" android:summary="@string/pref_play_gif_inside_summary" android:title="@string/pref_play_gif_inside" /> - <CheckBoxPreference - android:defaultValue="@bool/show_links_inside" - android:key="show_links_inside" - android:summary="@string/pref_show_links_inside_summary" - android:title="@string/pref_show_links_inside" /> <CheckBoxPreference android:defaultValue="@bool/prefer_xmpp_avatar" android:key="prefer_xmpp_avatar" @@ -300,6 +295,21 @@ android:key="last_activity" android:summary="@string/pref_broadcast_last_activity_summary" android:title="@string/pref_broadcast_last_activity" /> + <CheckBoxPreference + android:defaultValue="@bool/use_internal_updater" + android:key="use_internal_updater" + android:summary="@string/pref_use_internal_updater_summary" + android:title="@string/pref_use_internal_updater" /> + <CheckBoxPreference + android:defaultValue="@bool/show_links_inside" + android:key="show_links_inside" + android:summary="@string/pref_show_links_inside_summary" + android:title="@string/pref_show_links_inside" /> + <CheckBoxPreference + android:defaultValue="@bool/show_maps_inside" + android:key="show_maps_inside" + android:summary="@string/pref_show_mappreview_inside_summary" + android:title="@string/pref_show_mappreview_inside" /> <CheckBoxPreference android:defaultValue="@bool/warn_unencrypted_chat" android:key="warn_unencrypted_chat"