Commit 11486852 authored by Grigory Fedorov's avatar Grigory Fedorov

Custom emoticons removed.

parent c1b15137
......@@ -14,11 +14,6 @@
*/
package com.xabber.android.data;
import java.util.Collections;
import java.util.Comparator;
import java.util.Map;
import java.util.regex.Pattern;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
......@@ -39,9 +34,10 @@ import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.service.XabberService;
import com.xabber.android.ui.adapter.ComparatorByName;
import com.xabber.android.ui.adapter.ComparatorByStatus;
import com.xabber.android.utils.Emoticons;
import com.xabber.androiddev.R;
import java.util.Comparator;
/**
* Manage operations with common settings.
*
......@@ -611,20 +607,6 @@ public class SettingsManager implements OnInitializedListener,
throw new IllegalStateException();
}
public static Map<Pattern, Integer> interfaceSmiles() {
String value = getString(R.string.interface_smiles_key,
R.string.interface_smiles_default);
if (Application.getInstance()
.getString(R.string.interface_smiles_none_value).equals(value))
return Collections.unmodifiableMap(Emoticons.NONE_EMOTICONS);
else if (Application.getInstance()
.getString(R.string.interface_smiles_android_value)
.equals(value))
return Collections.unmodifiableMap(Emoticons.ANDROID_EMOTICONS);
else
throw new IllegalStateException();
}
public static boolean securityCheckCertificate() {
return getBoolean(R.string.security_check_certificate_key,
R.bool.security_check_certificate_default);
......
......@@ -18,9 +18,9 @@ import java.util.Date;
import android.text.Spannable;
import android.text.Html;
import android.text.SpannableString;
import android.text.util.Linkify;
import com.xabber.android.utils.Emoticons;
import com.xabber.xmpp.uri.XMPPUri;
/**
......@@ -151,7 +151,7 @@ public class MessageItem implements Comparable<MessageItem> {
public Spannable getSpannable() {
if (spannable == null) {
spannable = Emoticons.newSpannable(Html.fromHtml(text));
spannable = new SpannableString(Html.fromHtml(text));
Linkify.addLinks(this.spannable, Linkify.ALL);
XMPPUri.addLinks(this.spannable);
}
......
......@@ -37,7 +37,6 @@ import com.xabber.android.data.message.MessageItem;
import com.xabber.android.data.message.MessageManager;
import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.data.roster.RosterManager;
import com.xabber.android.utils.Emoticons;
import com.xabber.android.utils.StringUtils;
import com.xabber.androiddev.R;
......@@ -171,14 +170,10 @@ public class ChatMessageAdapter extends BaseAdapter implements UpdatableAdapter
ChatAction action = messageItem.getAction();
Spannable text = Emoticons.newSpannable(
action.getText(activity, messageItem.getResource(), messageItem.getSpannable().toString()));
Emoticons.getSmiledText(activity.getApplication(), text);
String time = StringUtils.getSmartTimeText(activity, messageItem.getTimestamp());
((TextView)view.findViewById(R.id.action_message_text)).setText(time + ": " + text);
((TextView)view.findViewById(R.id.action_message_text)).setText(time + ": "
+ action.getText(activity, messageItem.getResource(), messageItem.getSpannable().toString()));
return view;
}
......@@ -229,7 +224,6 @@ public class ChatMessageAdapter extends BaseAdapter implements UpdatableAdapter
}
Spannable text = messageItem.getSpannable();
Emoticons.getSmiledText(activity.getApplication(), text);
if (messageItem.getTag() == null) {
builder.append(text);
} else {
......
......@@ -23,7 +23,6 @@ import android.widget.TextView;
import com.xabber.android.data.account.AccountManager;
import com.xabber.android.data.extension.cs.ChatStateManager;
import com.xabber.android.data.roster.AbstractContact;
import com.xabber.android.utils.Emoticons;
import com.xabber.androiddev.R;
import org.jivesoftware.smackx.ChatState;
......@@ -84,7 +83,7 @@ public class ContactTitleInflater {
} else if (chatState == ChatState.paused) {
statusText = activity.getString(R.string.chat_state_paused);
} else {
statusText = Emoticons.getSmiledText(activity, abstractContact.getStatusText()).toString().trim();
statusText = abstractContact.getStatusText().trim();
if (statusText.toString().isEmpty()) {
statusText = activity.getString(abstractContact.getStatusMode().getStringID());
}
......
package com.xabber.android.ui.preferences;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import com.xabber.android.data.ActivityManager;
import com.xabber.android.ui.ContactList;
import com.xabber.android.ui.helper.ManagedActivity;
import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class ThemeSettings extends ManagedActivity
implements ThemeSettingsFragment.OnThemeSettingsFragmentInteractionListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (isFinishing())
return;
setContentView(R.layout.activity_preferences);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar_default));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setTitle(PreferenceSummaryHelper.getPreferenceTitle(getString(R.string.preference_interface)));
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.preferences_activity_container, new ThemeSettingsFragment()).commit();
}
}
@Override
public void onThemeChanged() {
ActivityManager.getInstance().clearStack(true);
startActivity(ContactList.createIntent(this));
}
}
package com.xabber.android.ui.preferences;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import com.xabber.android.ui.helper.PreferenceSummaryHelper;
import com.xabber.androiddev.R;
public class ThemeSettingsFragment extends android.preference.PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener {
private OnThemeSettingsFragmentInteractionListener mListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_theme);
PreferenceSummaryHelper.updateSummary(getPreferenceScreen());
}
@Override
public void onResume() {
super.onResume();
PreferenceManager.getDefaultSharedPreferences(getActivity())
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
PreferenceManager.getDefaultSharedPreferences(getActivity())
.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(getString(R.string.interface_theme_key))) {
mListener.onThemeChanged();
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnThemeSettingsFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnThemeSettingsFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnThemeSettingsFragmentInteractionListener {
public void onThemeChanged();
}
}
/**
* Copyright (c) 2013, Redsolution LTD. All rights reserved.
*
* This file is part of Xabber project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License, Version 3.
*
* Xabber is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License,
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package com.xabber.android.utils;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.content.Context;
import android.text.Spannable;
import android.text.Spannable.Factory;
import android.text.style.ImageSpan;
import com.xabber.android.data.SettingsManager;
import com.xabber.androiddev.R;
/**
* Emoticons.
*
* @author alexander.ivanov
*/
public class Emoticons {
public static final Map<Pattern, Integer> ANDROID_EMOTICONS = new HashMap<Pattern, Integer>();
public static final Map<Pattern, Integer> NONE_EMOTICONS = new HashMap<Pattern, Integer>();
private static final Factory spannableFactory = Spannable.Factory
.getInstance();
static {
addPattern(ANDROID_EMOTICONS, ":)", R.drawable.emo_im_happy);
addPattern(ANDROID_EMOTICONS, ":-)", R.drawable.emo_im_happy);
addPattern(ANDROID_EMOTICONS, ":(", R.drawable.emo_im_sad);
addPattern(ANDROID_EMOTICONS, ":-(", R.drawable.emo_im_sad);
addPattern(ANDROID_EMOTICONS, ";)", R.drawable.emo_im_winking);
addPattern(ANDROID_EMOTICONS, ";-)", R.drawable.emo_im_winking);
addPattern(ANDROID_EMOTICONS, ":P",
R.drawable.emo_im_tongue_sticking_out);
addPattern(ANDROID_EMOTICONS, ":-P",
R.drawable.emo_im_tongue_sticking_out);
addPattern(ANDROID_EMOTICONS, "=-O", R.drawable.emo_im_surprised);
addPattern(ANDROID_EMOTICONS, ":*", R.drawable.emo_im_kissing);
addPattern(ANDROID_EMOTICONS, ":-*", R.drawable.emo_im_kissing);
addPattern(ANDROID_EMOTICONS, ":O", R.drawable.emo_im_wtf);
addPattern(ANDROID_EMOTICONS, ":-O", R.drawable.emo_im_wtf);
addPattern(ANDROID_EMOTICONS, "B)", R.drawable.emo_im_cool);
addPattern(ANDROID_EMOTICONS, "B-)", R.drawable.emo_im_cool);
addPattern(ANDROID_EMOTICONS, "8)", R.drawable.emo_im_cool);
addPattern(ANDROID_EMOTICONS, "8-)", R.drawable.emo_im_cool);
addPattern(ANDROID_EMOTICONS, ":$", R.drawable.emo_im_money_mouth);
addPattern(ANDROID_EMOTICONS, ":-$", R.drawable.emo_im_money_mouth);
addPattern(ANDROID_EMOTICONS, ":-!", R.drawable.emo_im_foot_in_mouth);
addPattern(ANDROID_EMOTICONS, ":-[", R.drawable.emo_im_embarrassed);
addPattern(ANDROID_EMOTICONS, "O:)", R.drawable.emo_im_angel);
addPattern(ANDROID_EMOTICONS, "O:-)", R.drawable.emo_im_angel);
addPattern(ANDROID_EMOTICONS, ":\\", R.drawable.emo_im_undecided);
addPattern(ANDROID_EMOTICONS, ":-\\", R.drawable.emo_im_undecided);
addPattern(ANDROID_EMOTICONS, ":'(", R.drawable.emo_im_crying);
addPattern(ANDROID_EMOTICONS, ":D", R.drawable.emo_im_laughing);
addPattern(ANDROID_EMOTICONS, ":-D", R.drawable.emo_im_laughing);
addPattern(ANDROID_EMOTICONS, "O_o", R.drawable.emo_im_wtf);
addPattern(ANDROID_EMOTICONS, "o_O", R.drawable.emo_im_wtf);
addPattern(ANDROID_EMOTICONS, ">:O", R.drawable.emo_im_yelling);
addPattern(ANDROID_EMOTICONS, ">:0", R.drawable.emo_im_yelling);
addPattern(ANDROID_EMOTICONS, ":S", R.drawable.emo_im_lips_are_sealed);
addPattern(ANDROID_EMOTICONS, ":-S", R.drawable.emo_im_lips_are_sealed);
}
private static void addPattern(Map<Pattern, Integer> map, String smile,
int resource) {
map.put(Pattern.compile(Pattern.quote(smile)), resource);
}
private Emoticons() {
}
/**
* @param text
* @return new spannable.
*/
public static Spannable newSpannable(CharSequence text) {
return spannableFactory.newSpannable(text);
}
/**
* @param context
* @param spannable
* @return Whether smiles have been added into <code>spannable</code>.
*/
public static boolean getSmiledText(Context context, Spannable spannable) {
boolean hasChanges = false;
Map<Pattern, Integer> emoticons = SettingsManager.interfaceSmiles();
for (Entry<Pattern, Integer> entry : emoticons.entrySet()) {
Matcher matcher = entry.getKey().matcher(spannable);
while (matcher.find()) {
boolean set = true;
for (ImageSpan span : spannable.getSpans(matcher.start(),
matcher.end(), ImageSpan.class))
if (spannable.getSpanStart(span) >= matcher.start()
&& spannable.getSpanEnd(span) <= matcher.end())
spannable.removeSpan(span);
else {
set = false;
break;
}
if (set) {
spannable.setSpan(new ImageSpan(context, entry.getValue()),
matcher.start(), matcher.end(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
hasChanges = true;
}
}
}
return hasChanges;
}
/**
* @param context
* @param text
* @return New spannable with added smiles if needed.
*/
public static Spannable getSmiledText(Context context, CharSequence text) {
Spannable spannable = spannableFactory.newSpannable(text);
getSmiledText(context, spannable);
return spannable;
}
}
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:title="@string/interface_smiles"
android:key="@string/interface_smiles_key"
android:entries="@array/interface_smiles_entries"
android:entryValues="@array/interface_smiles_entryvalues"
android:defaultValue="@string/interface_smiles_default"
/>
</PreferenceScreen>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment