Commit 8dc9519f authored by Alexander Ivanov's avatar Alexander Ivanov

Move chat pages indicator to the chat viewer fragment.

parent 85852bcb
package com.xabber.android.ui;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.text.Editable;
import android.text.TextWatcher;
......@@ -10,6 +11,7 @@ import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.EditText;
import android.widget.ImageView;
......@@ -35,6 +37,11 @@ import com.xabber.androiddev.R;
public class ChatViewerFragment {
/**
* Delay before hide pages.
*/
private static final long PAGES_HIDDER_DELAY = 1000;
private AbstractAvatarInflaterHelper avatarInflaterHelper;
private Animation shake;
......@@ -43,6 +50,29 @@ public class ChatViewerFragment {
private ChatViewHolder chatViewHolder;
/**
* Whether pages are shown.
*/
private boolean pagesShown;
private Handler handler;
/**
* Animation used to hide pages.
*/
private Animation pagesHideAnimation;
/**
* Runnable called to hide pages.
*/
private final Runnable pagesHideRunnable = new Runnable() {
@Override
public void run() {
handler.removeCallbacks(this);
chatViewHolder.page.startAnimation(pagesHideAnimation);
}
};
private final FragmentActivity activity;
private final View view;
......@@ -69,11 +99,31 @@ public class ChatViewerFragment {
// super.onCreate(savedInstanceState);
avatarInflaterHelper = AbstractAvatarInflaterHelper
.createAbstractContactInflaterHelper();
handler = new Handler();
pagesShown = false;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
shake = AnimationUtils.loadAnimation(getActivity(), R.anim.shake);
pagesHideAnimation = AnimationUtils.loadAnimation(getActivity(),
R.anim.chat_page_out);
pagesHideAnimation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
chatViewHolder.page.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
View view = inflater.inflate(R.layout.chat_viewer_item, container,
false);
ChatMessageAdapter chatMessageAdapter = new ChatMessageAdapter(
......@@ -185,6 +235,28 @@ public class ChatViewerFragment {
chatViewHolder.chatMessageAdapter.onChange();
}
/**
* Show pages.
*/
public void showPages() {
if (pagesShown)
return;
pagesShown = true;
handler.removeCallbacks(pagesHideRunnable);
chatViewHolder.page.clearAnimation();
chatViewHolder.page.setVisibility(View.VISIBLE);
}
/**
* Requests pages to be hiden in future.
*/
public void hidePages() {
if (!pagesShown)
return;
pagesShown = false;
handler.postDelayed(pagesHideRunnable, PAGES_HIDDER_DELAY);
}
private static class ChatViewHolder {
final TextView page;
......
......@@ -103,6 +103,16 @@ public class ChatViewerAdapter extends BaseAdapter implements SaveStateAdapter,
((ChatViewerFragment) view.getTag()).saveState();
}
@Override
public void hidePages(View view) {
((ChatViewerFragment) view.getTag()).hidePages();
}
@Override
public void showPages(View view) {
((ChatViewerFragment) view.getTag()).showPages();
}
/**
* Must be called on changes in chat (message sent, received, etc.).
*/
......
......@@ -36,4 +36,18 @@ public interface SaveStateAdapter extends Adapter {
*/
void saveState(View view);
/**
* Requests to hide pages indicator.
*
* @param view
*/
void hidePages(View view);
/**
* Show pages indicator.
*
* @param view
*/
void showPages(View view);
}
......@@ -16,15 +16,11 @@ package com.xabber.android.ui.widget;
import android.content.Context;
import android.database.DataSetObserver;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.Adapter;
import android.widget.ListView;
import android.widget.Scroller;
......@@ -41,15 +37,10 @@ import com.xabber.androiddev.R;
* @author alexander.ivanov
*
*/
public class PageSwitcher extends ViewGroup implements AnimationListener {
public class PageSwitcher extends ViewGroup {
public static final boolean LOG = false;
/**
* Delay before hide pages.
*/
private static final long PAGES_HIDDER_DELAY = 1000;
/**
* Distance a touch can wander before we think the user is scrolling.
*/
......@@ -136,38 +127,6 @@ public class PageSwitcher extends ViewGroup implements AnimationListener {
*/
private Object previousVisibleObject;
/**
* Animation used to hide pages.
*/
private final Animation pagesHideAnimation;
/**
* Runnable called to hide pages.
*/
private final Runnable pagesHideRunnable = new Runnable() {
@Override
public void run() {
if (LOG)
LogManager.i(this, "hide pages");
handler.removeCallbacks(this);
if (selectedView != null)
selectedView.findViewById(R.id.chat_page).startAnimation(
pagesHideAnimation);
if (visibleView != null) {
visibleView.findViewById(R.id.chat_page).setVisibility(
View.GONE);
visibleView.findViewById(R.id.chat_page).clearAnimation();
}
}
};
/**
* Whether pages are shown.
*/
private boolean pagesShown;
private final Handler handler;
public PageSwitcher(Context context, AttributeSet attrs) {
super(context, attrs);
touchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
......@@ -188,12 +147,6 @@ public class PageSwitcher extends ViewGroup implements AnimationListener {
visiblePosition = 0;
visibleView = null;
previousVisibleObject = null;
handler = new Handler();
pagesHideAnimation = AnimationUtils.loadAnimation(context,
R.anim.chat_page_out);
pagesHideAnimation.setAnimationListener(this);
pagesShown = false;
}
/**
......@@ -529,11 +482,17 @@ public class PageSwitcher extends ViewGroup implements AnimationListener {
if (scrollX == 0) {
if (LOG)
LogManager.i(this, "Scroll X == 0");
hidePages();
if (visibleView != null)
adapter.hidePages(visibleView);
if (selectedView != null)
adapter.hidePages(selectedView);
} else {
if (LOG)
LogManager.i(this, "Scroll X != 0");
showPages();
if (visibleView != null)
adapter.showPages(visibleView);
if (selectedView != null)
adapter.showPages(selectedView);
}
super.scrollTo(scrollX, 0);
......@@ -541,36 +500,6 @@ public class PageSwitcher extends ViewGroup implements AnimationListener {
dataChanged = false;
}
/**
* Show pages.
*/
private void showPages() {
if (pagesShown)
return;
pagesShown = true;
handler.removeCallbacks(pagesHideRunnable);
if (selectedView != null) {
selectedView.findViewById(R.id.chat_page).clearAnimation();
selectedView.findViewById(R.id.chat_page).setVisibility(
View.VISIBLE);
}
if (visibleView != null) {
visibleView.findViewById(R.id.chat_page).clearAnimation();
visibleView.findViewById(R.id.chat_page)
.setVisibility(View.VISIBLE);
}
}
/**
* Requests pages to be hiden in future.
*/
private void hidePages() {
if (!pagesShown)
return;
pagesShown = false;
handler.postDelayed(pagesHideRunnable, PAGES_HIDDER_DELAY);
}
/**
* Save state of views. Must be called on activity pause.
*/
......@@ -739,20 +668,6 @@ public class PageSwitcher extends ViewGroup implements AnimationListener {
update(false);
}
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
if (selectedView != null)
selectedView.findViewById(R.id.chat_page).setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
public interface OnSelectListener {
/**
......
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