mirror of
https://github.com/oxen-io/session-android.git
synced 2025-02-17 14:28:25 +00:00
parent
e130d0a3e6
commit
ce610e0262
@ -139,8 +139,10 @@
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
<FrameLayout android:id="@+id/emoji_drawer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<ViewStub android:id="@+id/emoji_drawer_stub"
|
||||
android:inflatedId="@+id/emoji_drawer"
|
||||
android:layout="@layout/emoji_drawer_stub"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</LinearLayout>
|
||||
|
6
res/layout/emoji_drawer_stub.xml
Normal file
6
res/layout/emoji_drawer_stub.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<org.thoughtcrime.securesms.components.emoji.EmojiDrawer
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1.1" />
|
@ -41,6 +41,7 @@ import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.View.OnFocusChangeListener;
|
||||
import android.view.View.OnKeyListener;
|
||||
import android.view.ViewStub;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.ImageButton;
|
||||
@ -150,7 +151,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
private AttachmentManager attachmentManager;
|
||||
private BroadcastReceiver securityUpdateReceiver;
|
||||
private BroadcastReceiver groupUpdateReceiver;
|
||||
private Optional<EmojiDrawer> emojiDrawer;
|
||||
private Optional<EmojiDrawer> emojiDrawer = Optional.absent();
|
||||
private EmojiToggle emojiToggle;
|
||||
|
||||
private Recipients recipients;
|
||||
@ -690,7 +691,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
attachButton = (ImageButton) findViewById(R.id.attach_button);
|
||||
composeText = (ComposeText) findViewById(R.id.embedded_text_editor);
|
||||
charactersLeft = (TextView) findViewById(R.id.space_left);
|
||||
emojiDrawer = Optional.absent();
|
||||
emojiToggle = (EmojiToggle) findViewById(R.id.emoji_toggle);
|
||||
|
||||
attachmentAdapter = new AttachmentTypeSelectorAdapter(this);
|
||||
@ -720,15 +720,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
private EmojiDrawer getEmojiDrawer() {
|
||||
if (emojiDrawer.isPresent()) return emojiDrawer.get();
|
||||
|
||||
EmojiDrawer emojiDrawerFragment = EmojiDrawer.newInstance();
|
||||
emojiDrawerFragment.setComposeEditText(composeText);
|
||||
getSupportFragmentManager().beginTransaction()
|
||||
.add(R.id.emoji_drawer, emojiDrawerFragment)
|
||||
.commit();
|
||||
getSupportFragmentManager().executePendingTransactions();
|
||||
emojiDrawer = Optional.of(emojiDrawerFragment);
|
||||
return emojiDrawerFragment;
|
||||
EmojiDrawer emojiDrawer = (EmojiDrawer)((ViewStub)findViewById(R.id.emoji_drawer_stub)).inflate();
|
||||
emojiDrawer.setComposeEditText(composeText);
|
||||
this.emojiDrawer = Optional.of(emojiDrawer);
|
||||
return emojiDrawer;
|
||||
}
|
||||
|
||||
private boolean isEmojiDrawerOpen() {
|
||||
|
@ -1,14 +1,12 @@
|
||||
package org.thoughtcrime.securesms.components.emoji;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.ArrayRes;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentStatePagerAdapter;
|
||||
import android.support.v4.view.PagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.LayoutInflater;
|
||||
@ -17,6 +15,7 @@ import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ImageView.ScaleType;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
|
||||
import com.astuetz.PagerSlidingTabStrip;
|
||||
@ -25,13 +24,13 @@ import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.KeyboardAwareLinearLayout;
|
||||
import org.thoughtcrime.securesms.components.RepeatableImageKey;
|
||||
import org.thoughtcrime.securesms.components.RepeatableImageKey.KeyEventListener;
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiPageFragment.EmojiSelectionListener;
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiPageView.EmojiSelectionListener;
|
||||
import org.thoughtcrime.securesms.util.ResUtil;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class EmojiDrawer extends Fragment {
|
||||
public class EmojiDrawer extends KeyboardAwareLinearLayout {
|
||||
private static final KeyEvent DELETE_KEY_EVENT = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL);
|
||||
|
||||
private EmojiEditText composeText;
|
||||
@ -41,30 +40,30 @@ public class EmojiDrawer extends Fragment {
|
||||
private PagerSlidingTabStrip strip;
|
||||
private RecentEmojiPageModel recentModel;
|
||||
|
||||
public static EmojiDrawer newInstance(@ArrayRes int categories, @ArrayRes int icons) {
|
||||
final EmojiDrawer fragment = new EmojiDrawer();
|
||||
final Bundle args = new Bundle();
|
||||
args.putInt("categories", categories);
|
||||
args.putInt("icons", icons);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
public EmojiDrawer(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public static EmojiDrawer newInstance() {
|
||||
return newInstance(R.array.emoji_categories, R.array.emoji_category_icons);
|
||||
public EmojiDrawer(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public EmojiDrawer(Context context, AttributeSet attrs, int defStyle) {
|
||||
super(context, attrs, defStyle);
|
||||
init();
|
||||
}
|
||||
|
||||
public void setComposeEditText(EmojiEditText composeText) {
|
||||
this.composeText = composeText;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
final View v = inflater.inflate(R.layout.emoji_drawer, container, false);
|
||||
private void init() {
|
||||
final View v = LayoutInflater.from(getContext()).inflate(R.layout.emoji_drawer, this, true);
|
||||
initializeResources(v);
|
||||
initializePageModels(getArguments().getInt("categories"), getArguments().getInt("icons"));
|
||||
initializePageModels(R.array.emoji_categories, R.array.emoji_category_icons);
|
||||
initializeEmojiGrid();
|
||||
return v;
|
||||
}
|
||||
|
||||
private void initializeResources(View v) {
|
||||
@ -90,7 +89,7 @@ public class EmojiDrawer extends Fragment {
|
||||
public void show() {
|
||||
int keyboardHeight = container.getKeyboardHeight();
|
||||
Log.w("EmojiDrawer", "setting emoji drawer to height " + keyboardHeight);
|
||||
container.setLayoutParams(new FrameLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, keyboardHeight));
|
||||
container.setLayoutParams(new LinearLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, keyboardHeight));
|
||||
container.requestLayout();
|
||||
container.setVisibility(View.VISIBLE);
|
||||
}
|
||||
@ -100,8 +99,7 @@ public class EmojiDrawer extends Fragment {
|
||||
}
|
||||
|
||||
private void initializeEmojiGrid() {
|
||||
pager.setAdapter(new EmojiPagerAdapter(getActivity(),
|
||||
getFragmentManager(),
|
||||
pager.setAdapter(new EmojiPagerAdapter(getContext(),
|
||||
models,
|
||||
new EmojiSelectionListener() {
|
||||
@Override public void onEmojiSelected(int emojiCode) {
|
||||
@ -117,17 +115,17 @@ public class EmojiDrawer extends Fragment {
|
||||
}
|
||||
|
||||
private void initializePageModels(@ArrayRes int pagesRes, @ArrayRes int iconsRes) {
|
||||
final int[] icons = ResUtil.getResourceIds(getActivity(), iconsRes);
|
||||
final int[] pages = ResUtil.getResourceIds(getActivity(), pagesRes);
|
||||
final int[] icons = ResUtil.getResourceIds(getContext(), iconsRes);
|
||||
final int[] pages = ResUtil.getResourceIds(getContext(), pagesRes);
|
||||
this.models = new LinkedList<>();
|
||||
this.recentModel = new RecentEmojiPageModel(getActivity());
|
||||
this.recentModel = new RecentEmojiPageModel(getContext());
|
||||
this.models.add(recentModel);
|
||||
for (int i = 0; i < icons.length; i++) {
|
||||
this.models.add(new StaticEmojiPageModel(icons[i], getResources().getIntArray(pages[i])));
|
||||
}
|
||||
}
|
||||
|
||||
public static class EmojiPagerAdapter extends FragmentStatePagerAdapter
|
||||
public static class EmojiPagerAdapter extends PagerAdapter
|
||||
implements PagerSlidingTabStrip.CustomTabProvider
|
||||
{
|
||||
private Context context;
|
||||
@ -135,11 +133,10 @@ public class EmojiDrawer extends Fragment {
|
||||
private EmojiSelectionListener listener;
|
||||
|
||||
public EmojiPagerAdapter(@NonNull Context context,
|
||||
@NonNull FragmentManager fm,
|
||||
@NonNull List<EmojiPageModel> pages,
|
||||
@Nullable EmojiSelectionListener listener)
|
||||
{
|
||||
super(fm);
|
||||
super();
|
||||
this.context = context;
|
||||
this.pages = pages;
|
||||
this.listener = listener;
|
||||
@ -150,16 +147,28 @@ public class EmojiDrawer extends Fragment {
|
||||
return pages.size();
|
||||
}
|
||||
|
||||
@Override public Fragment getItem(int i) {
|
||||
return EmojiPageFragment.newInstance(pages.get(i), listener);
|
||||
@Override public Object instantiateItem(ViewGroup container, int position) {
|
||||
EmojiPageView page = new EmojiPageView(context);
|
||||
page.setModel(pages.get(position));
|
||||
page.setEmojiSelectedListener(listener);
|
||||
container.addView(page);
|
||||
return page;
|
||||
}
|
||||
|
||||
@Override public void destroyItem(ViewGroup container, int position, Object object) {
|
||||
container.removeView((View)object);
|
||||
}
|
||||
|
||||
@Override public void setPrimaryItem(ViewGroup container, int position, Object object) {
|
||||
EmojiPageFragment current = (EmojiPageFragment) object;
|
||||
EmojiPageView current = (EmojiPageView) object;
|
||||
current.onSelected();
|
||||
super.setPrimaryItem(container, position, object);
|
||||
}
|
||||
|
||||
@Override public boolean isViewFromObject(View view, Object object) {
|
||||
return view == object;
|
||||
}
|
||||
|
||||
@Override public View getCustomTabView(ViewGroup viewGroup, int i) {
|
||||
ImageView image = new ImageView(context);
|
||||
image.setScaleType(ScaleType.CENTER_INSIDE);
|
||||
|
@ -17,9 +17,7 @@ public class EmojiEditText extends AppCompatEditText {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public EmojiEditText(Context context, AttributeSet attrs,
|
||||
int defStyleAttr)
|
||||
{
|
||||
public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,10 @@
|
||||
package org.thoughtcrime.securesms.components.emoji;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.os.Build.VERSION_CODES;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@ -13,25 +12,38 @@ import android.widget.AbsListView;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.GridView;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
|
||||
public class EmojiPageFragment extends Fragment {
|
||||
private static final String TAG = EmojiPageFragment.class.getSimpleName();
|
||||
public class EmojiPageView extends FrameLayout {
|
||||
private static final String TAG = EmojiPageView.class.getSimpleName();
|
||||
|
||||
private EmojiPageModel model;
|
||||
private EmojiSelectionListener listener;
|
||||
private GridView grid;
|
||||
|
||||
public static EmojiPageFragment newInstance(@NonNull EmojiPageModel model,
|
||||
@Nullable EmojiSelectionListener listener)
|
||||
{
|
||||
EmojiPageFragment fragment = new EmojiPageFragment();
|
||||
fragment.setModel(model);
|
||||
fragment.setEmojiSelectedListener(listener);
|
||||
return fragment;
|
||||
public EmojiPageView(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public EmojiPageView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public EmojiPageView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
@TargetApi(VERSION_CODES.LOLLIPOP)
|
||||
public EmojiPageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
init();
|
||||
}
|
||||
|
||||
public void onSelected() {
|
||||
@ -40,10 +52,8 @@ public class EmojiPageFragment extends Fragment {
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState)
|
||||
{
|
||||
final View view = inflater.inflate(R.layout.emoji_grid_layout, container, false);
|
||||
private void init() {
|
||||
final View view = LayoutInflater.from(getContext()).inflate(R.layout.emoji_grid_layout, this, true);
|
||||
grid = (GridView) view.findViewById(R.id.emoji);
|
||||
grid.setColumnWidth(getResources().getDimensionPixelSize(R.dimen.emoji_drawer_size) + 2 * getResources().getDimensionPixelSize(R.dimen.emoji_drawer_item_padding));
|
||||
grid.setOnItemClickListener(new OnItemClickListener() {
|
||||
@ -51,12 +61,11 @@ public class EmojiPageFragment extends Fragment {
|
||||
if (listener != null) listener.onEmojiSelected((Integer)view.getTag());
|
||||
}
|
||||
});
|
||||
grid.setAdapter(new EmojiGridAdapter(getActivity(), model));
|
||||
return view;
|
||||
}
|
||||
|
||||
public void setModel(EmojiPageModel model) {
|
||||
this.model = model;
|
||||
grid.setAdapter(new EmojiGridAdapter(getContext(), model));
|
||||
}
|
||||
|
||||
public void setEmojiSelectedListener(EmojiSelectionListener listener) {
|
Loading…
x
Reference in New Issue
Block a user