Detailed changes
@@ -95,6 +95,7 @@ import eu.siacs.conversations.ui.util.SendButtonAction;
import eu.siacs.conversations.ui.util.SendButtonTool;
import eu.siacs.conversations.ui.util.ShareUtil;
import eu.siacs.conversations.ui.widget.EditMessage;
+import eu.siacs.conversations.utils.GeoHelper;
import eu.siacs.conversations.utils.MessageUtils;
import eu.siacs.conversations.utils.NickValidityChecker;
import eu.siacs.conversations.utils.QuickLoader;
@@ -1498,7 +1499,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
intent = new Intent(getActivity(), RecordingActivity.class);
break;
case ATTACHMENT_CHOICE_LOCATION:
- intent = new Intent(getActivity(), ShareLocationActivity.class);
+ intent = GeoHelper.getFetchIntent(activity);
break;
}
if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
@@ -1,5 +1,6 @@
package eu.siacs.conversations.ui;
+import android.preference.CheckBoxPreference;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.app.FragmentManager;
@@ -37,6 +38,7 @@ import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.services.ExportLogsService;
import eu.siacs.conversations.services.MemorizingTrustManager;
import eu.siacs.conversations.ui.util.Color;
+import eu.siacs.conversations.utils.GeoHelper;
import eu.siacs.conversations.utils.TimeframeUtils;
import rocks.xmpp.addr.Jid;
@@ -98,6 +100,14 @@ public class SettingsActivity extends XmppActivity implements
PreferenceScreen mainPreferenceScreen = (PreferenceScreen) mSettingsFragment.findPreference("main_screen");
+ PreferenceCategory attachmentsCategory = (PreferenceCategory) mSettingsFragment.findPreference("attachments");
+ CheckBoxPreference locationPlugin = (CheckBoxPreference) mSettingsFragment.findPreference("use_share_location_plugin");
+ if (attachmentsCategory != null && locationPlugin != null) {
+ if (!GeoHelper.isLocationPluginInstalled(this)) {
+ attachmentsCategory.removePreference(locationPlugin);
+ }
+ }
+
//this feature is only available on Huawei Android 6.
PreferenceScreen huaweiPreferenceScreen = (PreferenceScreen) mSettingsFragment.findPreference("huawei");
if (huaweiPreferenceScreen != null) {
@@ -1,7 +1,10 @@
package eu.siacs.conversations.utils;
+import android.app.Activity;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.net.Uri;
+import android.preference.PreferenceManager;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
@@ -9,15 +12,36 @@ import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Contact;
import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.Conversational;
import eu.siacs.conversations.entities.Message;
+import eu.siacs.conversations.ui.ShareLocationActivity;
public class GeoHelper {
+
+ private static final String SHARE_LOCATION_PACKAGE_NAME = "eu.siacs.conversations.location.request";
+
public static Pattern GEO_URI = Pattern.compile("geo:([\\-0-9.]+),([\\-0-9.]+)(?:,([\\-0-9.]+))?(?:\\?(.*))?", Pattern.CASE_INSENSITIVE);
+ public static boolean isLocationPluginInstalled(Activity activity) {
+ return new Intent(SHARE_LOCATION_PACKAGE_NAME).resolveActivity(activity.getPackageManager()) != null;
+ }
+
+ public static boolean isLocationPluginInstalledAndDesired(Activity activity) {
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
+ final boolean configured = preferences.getBoolean("use_share_location_plugin", activity.getResources().getBoolean(R.bool.use_share_location_plugin));
+ return configured && isLocationPluginInstalled(activity);
+ }
+ public static Intent getFetchIntent(Activity activity) {
+ if (isLocationPluginInstalledAndDesired(activity)) {
+ return new Intent(SHARE_LOCATION_PACKAGE_NAME);
+ } else {
+ return new Intent(activity, ShareLocationActivity.class);
+ }
+ }
public static ArrayList<Intent> createGeoIntentsFromMessage(Message message) {
final ArrayList<Intent> intents = new ArrayList<>();
@@ -43,4 +43,5 @@
<bool name="scroll_to_bottom">true</bool>
<string name="omemo_setting_default">default_on</string>
<string name="default_font_size">small</string>
+ <bool name="use_share_location_plugin">false</bool>
</resources>
@@ -706,4 +706,6 @@
<string name="search_messages">Search messages</string>
<string name="gif">GIF</string>
<string name="view_conversation">View conversation</string>
+ <string name="pref_use_share_location_plugin">Share Location Plugin</string>
+ <string name="pref_use_share_location_plugin_summary">Use the Share Location Plugin instead of the build in map</string>
</resources>
@@ -1,29 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
- android:key="main_screen"
xmlns:android="http://schemas.android.com/apk/res/android"
- android:background="?attr/color_background_secondary">
+ android:background="?attr/color_background_secondary"
+ android:key="main_screen">
- <PreferenceCategory android:title="@string/pref_general"
- android:key="general">
+ <PreferenceCategory
+ android:key="general"
+ android:title="@string/pref_general">
<PreferenceScreen
android:key="huawei"
- android:title="@string/huawei_protected_apps"
android:summary="@string/huawei_protected_apps_summary"
+ android:title="@string/huawei_protected_apps"
>
<intent
- android:targetPackage="com.huawei.systemmanager"
- android:targetClass="com.huawei.systemmanager.optimize.process.ProtectActivity"/>
+ android:targetClass="com.huawei.systemmanager.optimize.process.ProtectActivity"
+ android:targetPackage="com.huawei.systemmanager"/>
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory android:title="@string/pref_privacy">
<ListPreference
- android:key="omemo"
- android:title="@string/pref_omemo_setting"
- android:summary="@string/pref_omemo_setting_summary_default_on"
android:defaultValue="@string/omemo_setting_default"
- android:entryValues="@array/omemo_setting_entry_values"
android:entries="@array/omemo_setting_entries"
+ android:entryValues="@array/omemo_setting_entry_values"
+ android:key="omemo"
+ android:summary="@string/pref_omemo_setting_summary_default_on"
+ android:title="@string/pref_omemo_setting"
/>
<CheckBoxPreference
android:defaultValue="@bool/confirm_messages"
@@ -39,9 +40,9 @@
<CheckBoxPreference
android:defaultValue="@bool/last_activity"
android:key="last_activity"
- android:title="@string/pref_broadcast_last_activity"
- android:summary="@string/pref_broadcast_last_activity_summary"/>
- </PreferenceCategory>
+ android:summary="@string/pref_broadcast_last_activity_summary"
+ android:title="@string/pref_broadcast_last_activity"/>
+ </PreferenceCategory>
<PreferenceCategory android:title="@string/pref_notification_settings">
<CheckBoxPreference
android:defaultValue="@bool/show_notification"
@@ -50,16 +51,16 @@
android:title="@string/pref_notifications"/>
<CheckBoxPreference
android:defaultValue="@bool/notifications_from_strangers"
- android:key="notifications_from_strangers"
android:dependency="show_notification"
- android:title="@string/pref_notifications_from_strangers"
- android:summary="@string/pref_notifications_from_strangers_summary"/>
+ android:key="notifications_from_strangers"
+ android:summary="@string/pref_notifications_from_strangers_summary"
+ android:title="@string/pref_notifications_from_strangers"/>
<CheckBoxPreference
android:defaultValue="@bool/headsup_notifications"
android:dependency="show_notification"
android:key="notification_headsup"
- android:title="@string/pref_headsup_notifications"
- android:summary="@string/pref_headsup_notifications_summary"/>
+ android:summary="@string/pref_headsup_notifications_summary"
+ android:title="@string/pref_headsup_notifications"/>
<CheckBoxPreference
android:defaultValue="@bool/vibrate_on_notification"
android:dependency="show_notification"
@@ -70,8 +71,8 @@
android:defaultValue="@bool/led"
android:dependency="show_notification"
android:key="led"
- android:title="@string/pref_led"
- android:summary="@string/pref_led_summary"/>
+ android:summary="@string/pref_led_summary"
+ android:title="@string/pref_led"/>
<RingtonePreference
android:defaultValue="@string/notification_ringtone"
android:dependency="show_notification"
@@ -86,9 +87,11 @@
android:title="@string/title_pref_quiet_hours">
<intent
android:action="android.intent.action.VIEW"
- android:targetPackage="@string/applicationId"
- android:targetClass="eu.siacs.conversations.ui.SettingsActivity" >
- <extra android:name="page" android:value="quiet_hours" />
+ android:targetClass="eu.siacs.conversations.ui.SettingsActivity"
+ android:targetPackage="@string/applicationId">
+ <extra
+ android:name="page"
+ android:value="quiet_hours"/>
</intent>
<CheckBoxPreference
android:defaultValue="@bool/enable_quiet_hours"
@@ -109,16 +112,18 @@
android:title="@string/title_pref_quiet_hours_end_time"/>
</PreferenceScreen>
<ListPreference
- android:dependency="show_notification"
- android:key="grace_period_length"
- android:title="@string/pref_notification_grace_period"
- android:summary="@string/pref_notification_grace_period_summary"
android:defaultValue="@integer/grace_period"
+ android:dependency="show_notification"
android:entries="@array/grace_periods"
android:entryValues="@array/grace_periods_values"
+ android:key="grace_period_length"
+ android:summary="@string/pref_notification_grace_period_summary"
+ android:title="@string/pref_notification_grace_period"
/>
</PreferenceCategory>
- <PreferenceCategory android:title="@string/pref_attachments">
+ <PreferenceCategory
+ android:key="attachments"
+ android:title="@string/pref_attachments">
<ListPreference
android:defaultValue="@integer/auto_accept_filesize"
android:entries="@array/filesizes"
@@ -136,8 +141,13 @@
<CheckBoxPreference
android:defaultValue="@bool/return_to_previous"
android:key="return_to_previous"
- android:title="@string/pref_return_to_previous"
- android:summary="@string/pref_return_to_previous_summary"/>
+ android:summary="@string/pref_return_to_previous_summary"
+ android:title="@string/pref_return_to_previous"/>
+ <CheckBoxPreference
+ android:defaultValue="@bool/use_share_location_plugin"
+ android:key="use_share_location_plugin"
+ android:summary="@string/pref_use_share_location_plugin_summary"
+ android:title="@string/pref_use_share_location_plugin"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/pref_ui_options">
<ListPreference
@@ -154,11 +164,11 @@
android:title="@string/pref_use_green_background"/>
<ListPreference
android:defaultValue="@string/default_font_size"
+ android:entries="@array/font_size_entries"
+ android:entryValues="@array/font_size_entry_values"
android:key="font_size"
- android:title="@string/pref_font_size"
android:summary="@string/pref_font_size_summary"
- android:entryValues="@array/font_size_entry_values"
- android:entries="@array/font_size_entries"/>
+ android:title="@string/pref_font_size"/>
<CheckBoxPreference
android:defaultValue="@bool/use_subject"
android:key="use_subject"
@@ -192,22 +202,25 @@
android:title="@string/pref_expert_options">
<intent
android:action="android.intent.action.VIEW"
- android:targetPackage="@string/applicationId"
- android:targetClass="eu.siacs.conversations.ui.SettingsActivity" >
- <extra android:name="page" android:value="expert" />
+ android:targetClass="eu.siacs.conversations.ui.SettingsActivity"
+ android:targetPackage="@string/applicationId">
+ <extra
+ android:name="page"
+ android:value="expert"/>
</intent>
- <PreferenceCategory android:title="@string/pref_security_settings"
- android:key="security_options">
+ <PreferenceCategory
+ android:key="security_options"
+ android:title="@string/pref_security_settings">
<CheckBoxPreference
android:defaultValue="@bool/btbv"
android:key="btbv"
- android:title="@string/pref_blind_trust_before_verification"
- android:summary="@string/pref_blind_trust_before_verification_summary"/>
+ android:summary="@string/pref_blind_trust_before_verification_summary"
+ android:title="@string/pref_blind_trust_before_verification"/>
<ListPreference
+ android:defaultValue="@integer/automatic_message_deletion"
android:key="automatic_message_deletion"
- android:title="@string/pref_automatically_delete_messages"
android:summary="@string/pref_automatically_delete_messages_description"
- android:defaultValue="@integer/automatic_message_deletion"/>
+ android:title="@string/pref_automatically_delete_messages"/>
<CheckBoxPreference
android:defaultValue="@bool/dont_trust_system_cas"
android:key="dont_trust_system_cas"
@@ -225,8 +238,8 @@
<CheckBoxPreference
android:defaultValue="@bool/allow_message_correction"
android:key="allow_message_correction"
- android:title="@string/pref_allow_message_correction"
- android:summary="@string/pref_allow_message_correction_summary"/>
+ android:summary="@string/pref_allow_message_correction_summary"
+ android:title="@string/pref_allow_message_correction"/>
<Preference
android:key="clean_cache"
android:summary="@string/pref_clean_cache_summary"
@@ -237,8 +250,8 @@
android:title="@string/pref_clean_private_storage"/>
<Preference
android:key="delete_omemo_identities"
- android:title="@string/pref_delete_omemo_identities"
- android:summary="@string/pref_delete_omemo_identities_summary"/>
+ android:summary="@string/pref_delete_omemo_identities_summary"
+ android:title="@string/pref_delete_omemo_identities"/>
</PreferenceCategory>
<PreferenceCategory
android:key="connection_options"
@@ -268,41 +281,41 @@
<CheckBoxPreference
android:defaultValue="@bool/scroll_to_bottom"
android:key="scroll_to_bottom"
- android:title="@string/pref_scroll_to_bottom"
- android:summary="@string/pref_scroll_to_bottom_summary"/>
+ android:summary="@string/pref_scroll_to_bottom_summary"
+ android:title="@string/pref_scroll_to_bottom"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/pref_presence_settings">
<CheckBoxPreference
android:defaultValue="@bool/manually_change_presence"
+ android:disableDependentsState="true"
android:key="manually_change_presence"
- android:title="@string/pref_manually_change_presence"
android:summary="@string/pref_manually_change_presence_summary"
- android:disableDependentsState="true"/>
+ android:title="@string/pref_manually_change_presence"/>
<CheckBoxPreference
android:defaultValue="@bool/away_when_screen_off"
+ android:dependency="manually_change_presence"
android:key="away_when_screen_off"
android:summary="@string/pref_away_when_screen_off_summary"
- android:title="@string/pref_away_when_screen_off"
- android:dependency="manually_change_presence"/>
+ android:title="@string/pref_away_when_screen_off"/>
<CheckBoxPreference
android:defaultValue="@bool/dnd_on_silent_mode"
+ android:dependency="manually_change_presence"
android:key="dnd_on_silent_mode"
android:summary="@string/pref_dnd_on_silent_mode_summary"
- android:title="@string/pref_dnd_on_silent_mode"
- android:dependency="manually_change_presence"/>
+ android:title="@string/pref_dnd_on_silent_mode"/>
<CheckBoxPreference
- android:dependency="dnd_on_silent_mode"
android:defaultValue="@bool/treat_vibrate_as_silent"
+ android:dependency="dnd_on_silent_mode"
android:key="treat_vibrate_as_silent"
- android:title="@string/pref_treat_vibrate_as_silent"
- android:summary="@string/pref_treat_vibrate_as_dnd_summary"/>
+ android:summary="@string/pref_treat_vibrate_as_dnd_summary"
+ android:title="@string/pref_treat_vibrate_as_silent"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/pref_expert_options_other">
<CheckBoxPreference
- android:key="autojoin"
android:defaultValue="@bool/autojoin"
- android:title="@string/pref_autojoin"
+ android:key="autojoin"
android:summary="@string/pref_autojoin_summary"
+ android:title="@string/pref_autojoin"
/>
<CheckBoxPreference
android:defaultValue="@bool/indicate_received"