Nagram/TMessagesProj/src/main/java/org/telegram/ui/IntroActivity.java

380 lines
14 KiB
Java
Raw Normal View History

2013-10-25 15:19:00 +00:00
/*
* This is the source code of Telegram for Android v. 1.2.3.
* It is licensed under GNU GPL v. 2 or later.
* You should have received a copy of the license in this archive (see LICENSE).
*
* Copyright Nikolai Kudashov, 2013.
*/
package org.telegram.ui;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.text.Html;
import android.view.Display;
import android.view.Surface;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import org.telegram.messenger.R;
import org.telegram.messenger.Utilities;
import java.util.Locale;
public class IntroActivity extends SherlockFragmentActivity {
private ViewPager viewPager;
private ImageView topImage1;
private ImageView topImage2;
private View slidingView;
private View parentSlidingView;
private TextView startMessagingButton;
private int lastPage = 0;
private float density = 1;
private boolean isRTL = false;
private boolean justCreated = false;
private boolean startPressed = false;
private int[][] colors2 = new int[][] {
new int[] {179, 179, 179},
new int[] {247, 91, 47},
new int[] {249, 145, 23},
new int[] {250, 200, 0},
new int[] {93, 195, 38},
new int[] {47, 146, 232}
};
private int[] icons;
private int[] titles;
private int[] messages;
int fixedFirstNum1;
int fixedFirstNum2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.intro_layout);
Locale locale = Locale.getDefault();
String lang = locale.getLanguage();
if (lang != null && lang.toLowerCase().equals("ar")) {
isRTL = true;
icons = new int[] {
R.drawable.icon5,
R.drawable.icon4,
R.drawable.icon3,
R.drawable.icon2,
R.drawable.icon1,
R.drawable.icon0
};
titles = new int[] {
R.string.Page6Title,
R.string.Page5Title,
R.string.Page4Title,
R.string.Page3Title,
R.string.Page2Title,
R.string.Page1Title
};
messages = new int[] {
R.string.Page6Message,
R.string.Page5Message,
R.string.Page4Message,
R.string.Page3Message,
R.string.Page2Message,
R.string.Page1Message
};
fixedFirstNum1 = 5;
fixedFirstNum2 = 4;
} else {
icons = new int[] {
R.drawable.icon0,
R.drawable.icon1,
R.drawable.icon2,
R.drawable.icon3,
R.drawable.icon4,
R.drawable.icon5
};
titles = new int[] {
R.string.Page1Title,
R.string.Page2Title,
R.string.Page3Title,
R.string.Page4Title,
R.string.Page5Title,
R.string.Page6Title
};
messages = new int[] {
R.string.Page1Message,
R.string.Page2Message,
R.string.Page3Message,
R.string.Page4Message,
R.string.Page5Message,
R.string.Page6Message
};
fixedFirstNum1 = 0;
fixedFirstNum2 = 1;
}
density = getResources().getDisplayMetrics().density;
viewPager = (ViewPager)findViewById(R.id.intro_view_pager);
slidingView = findViewById(R.id.sliding_view);
parentSlidingView = findViewById(R.id.parent_slinding_view);
startMessagingButton = (TextView)findViewById(R.id.start_messaging_button);
topImage1 = (ImageView)findViewById(R.id.icon_image1);
topImage2 = (ImageView)findViewById(R.id.icon_image2);
topImage2.setVisibility(View.GONE);
viewPager.setAdapter(new IntroAdapter());
viewPager.setPageMargin(0);
viewPager.setOffscreenPageLimit(1);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
updateColors(position, positionOffset);
}
@Override
public void onPageSelected(int i) {
}
@Override
public void onPageScrollStateChanged(int i) {
if (i == ViewPager.SCROLL_STATE_IDLE || i == ViewPager.SCROLL_STATE_SETTLING) {
if (lastPage != viewPager.getCurrentItem()) {
int prevPage = lastPage;
lastPage = viewPager.getCurrentItem();
final ImageView fadeoutImage;
final ImageView fadeinImage;
if (topImage1.getVisibility() == View.VISIBLE) {
fadeoutImage = topImage1;
fadeinImage = topImage2;
} else {
fadeoutImage = topImage2;
fadeinImage = topImage1;
}
fadeinImage.bringToFront();
fadeinImage.setImageResource(icons[lastPage]);
fadeinImage.clearAnimation();
fadeoutImage.clearAnimation();
Animation outAnimation = AnimationUtils.loadAnimation(IntroActivity.this, R.anim.icon_anim_fade_out);
outAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
fadeoutImage.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
Animation inAnimation = AnimationUtils.loadAnimation(IntroActivity.this, R.anim.icon_anim_fade_in);
inAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
fadeinImage.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
fadeoutImage.startAnimation(outAnimation);
fadeinImage.startAnimation(inAnimation);
}
}
}
});
startMessagingButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (startPressed) {
return;
}
startPressed = true;
Intent intent2 = new Intent(IntroActivity.this, LoginActivity.class);
startActivity(intent2);
finish();
}
});
justCreated = true;
getSupportActionBar().hide();
fixLayout();
}
@Override
protected void onResume() {
super.onResume();
if (justCreated) {
if (isRTL) {
viewPager.setCurrentItem(5);
lastPage = 5;
} else {
viewPager.setCurrentItem(0);
lastPage = 0;
}
justCreated = false;
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
fixLayout();
}
private void fixLayout() {
viewPager.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
WindowManager manager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
int rotation = display.getRotation();
density = Utilities.applicationContext.getResources().getDisplayMetrics().density;
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)parentSlidingView.getLayoutParams();
FrameLayout.LayoutParams buttonParams = (FrameLayout.LayoutParams)startMessagingButton.getLayoutParams();
if (rotation == Surface.ROTATION_270 || rotation == Surface.ROTATION_90) {
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, (int)(50 * density));
buttonParams.height = (int)(density * 52);
} else {
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, (int)(82 * density));
buttonParams.height = (int)(density * 84);
}
parentSlidingView.setLayoutParams(params);
startMessagingButton.setLayoutParams(buttonParams);
updateColors(viewPager.getCurrentItem(), 0);
viewPager.getViewTreeObserver().removeOnPreDrawListener(this);
return false;
}
});
}
private void updateColors(int position, float positionOffset) {
int colorPosition = position;
int nextColorPosition = colorPosition + 1;
float offset = positionOffset;
if (isRTL) {
colorPosition = 5 - position;
if (positionOffset != 0) {
colorPosition--;
offset = 1 - offset;
}
nextColorPosition = colorPosition + 1;
}
if (colorPosition >= 0) {
int r = colors2[colorPosition][0];
int g = colors2[colorPosition][1];
int b = colors2[colorPosition][2];
if (nextColorPosition < colors2.length && nextColorPosition > 0 && offset != 0) {
r += (colors2[nextColorPosition][0] - colors2[colorPosition][0]) * offset;
g += (colors2[nextColorPosition][1] - colors2[colorPosition][1]) * offset;
b += (colors2[nextColorPosition][2] - colors2[colorPosition][2]) * offset;
}
slidingView.setBackgroundColor(colorFromRGB(r, g, b));
}
int width = parentSlidingView.getWidth() / 6;
FrameLayout.LayoutParams parentParams = (FrameLayout.LayoutParams)parentSlidingView.getLayoutParams();
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)slidingView.getLayoutParams();
int posX = (int)(24 * density + position * width + positionOffset * width);
if (position >= colors2.length - 2) {
int missed = parentSlidingView.getWidth() - width * 6;
posX += missed * (position == colors2.length - 2 ? positionOffset : 1);
}
params.width = width;
params.setMargins(posX, params.topMargin, params.rightMargin, parentParams.bottomMargin);
slidingView.setLayoutParams(params);
}
private int colorFromRGB(int red, int green, int blue) {
return 0xff000000 | red << 16 | green << 8 | blue;
}
private class IntroAdapter extends PagerAdapter {
@Override
public int getCount() {
return 6;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = View.inflate(container.getContext(), R.layout.intro_view_layout, null);
TextView headerTextView = (TextView)view.findViewById(R.id.header_text);
Typeface typeface = Utilities.getTypeface("fonts/rlight.ttf");
headerTextView.setTypeface(typeface);
TextView messageTextView = (TextView)view.findViewById(R.id.message_text);
messageTextView.setTypeface(typeface);
container.addView(view, 0);
headerTextView.setText(getString(titles[position]));
messageTextView.setText(Html.fromHtml(getString(messages[position])));
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
super.setPrimaryItem(container, position, object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void finishUpdate(View arg0) {
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View arg0) {
}
}
}