package io.github.mthli.Tweetin.Activity; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPager; import android.view.*; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.*; import com.sothree.slidinguppanel.SlidingUpPanelLayout; import io.github.mthli.Tweetin.Fragment.Base.ListFragment; import io.github.mthli.Tweetin.Fragment.TweetList.FavoriteFragment; import io.github.mthli.Tweetin.Fragment.TweetList.MentionFragment; import io.github.mthli.Tweetin.Fragment.TweetList.TimelineFragment; import io.github.mthli.Tweetin.View.ViewUnit; import io.github.mthli.Tweetin.Flag.FlagUnit; import io.github.mthli.Tweetin.R; import io.github.mthli.Tweetin.Task.OAuth.GetAccessTokenTask; import java.util.ArrayList; import java.util.List; public class MainActivity extends FragmentActivity { private RelativeLayout searchView; private EditText searchViewEditText; private View mentionTab; private ViewPager viewPager; private MainPagerAdapter mainPagerAdapter; private int customThemeColorValue = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewUnit.setCustomTheme(this); setContentView(R.layout.main); customThemeColorValue = ViewUnit.getCustomThemeColorValue(this); Uri uri = getIntent().getData(); if (uri != null && uri.toString().startsWith(getString(R.string.app_callback_url))) { String oAuthVerifier = uri.getQueryParameter(getString(R.string.app_oauth_verifier)); GetAccessTokenTask getAccessTokenTask = new GetAccessTokenTask(this, oAuthVerifier); getAccessTokenTask.execute(); } else { initUI(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem menuItem) { switch (menuItem.getItemId()) { case R.id.main_menu_search: showSearchView(true); break; case R.id.main_menu_setting: Intent intent = new Intent(this, SettingActivity.class); startActivityForResult(intent, FlagUnit.REQUEST_SETTING); break; default: break; } return super.onOptionsItemSelected(menuItem); } @Override public boolean dispatchTouchEvent(MotionEvent motionEvent) { if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { View view = getCurrentFocus(); if (shouldHideSearchView(view, motionEvent)) { showSearchView(false); return false; } } return super.dispatchTouchEvent(motionEvent); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { if (customThemeColorValue != ViewUnit.getCustomThemeColorValue(this)) { startActivity(getIntent()); finish(); } } } @Override public boolean onKeyDown(int keyCode, KeyEvent keyEvent) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (searchView != null && searchView.isShown()) { showSearchView(false); } else { SlidingUpPanelLayout slidingUpPanelLayout = getCurrentListFragment().getSlidingUpPanelLayout(); if (slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) { slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); } else { cancelAllTasks(); finish(); } } } return true; } @Override public void onDestroy() { cancelAllTasks(); super.onDestroy(); } public void initUI() { View header = findViewById(R.id.main_header); header.setVisibility(View.VISIBLE); ViewCompat.setElevation(header, ViewUnit.getElevation(this, 2)); Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar); setActionBar(toolbar); getActionBar().setTitle(null); getActionBar().setDisplayShowHomeEnabled(false); searchView = (RelativeLayout) findViewById(R.id.search_view); searchViewEditText = (EditText) findViewById(R.id.search_view_edittext); ImageButton searchViewClear = (ImageButton) findViewById(R.id.search_view_clear); ViewCompat.setElevation(searchView, ViewUnit.getElevation(this, 4)); searchViewEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { String keyWord = searchViewEditText.getText().toString(); if (keyWord.length() > 0) { Intent intent = new Intent(MainActivity.this, SearchActivity.class); intent.putExtra(getString(R.string.search_intent_key_word), keyWord); startActivity(intent); showSearchView(false); } else { Toast.makeText(MainActivity.this, R.string.search_toast_empty, Toast.LENGTH_SHORT).show(); } } return true; } }); searchViewClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { searchViewEditText.setText(null); } }); searchViewClear.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { Toast.makeText(MainActivity.this, getString(R.string.search_view_toast_clear), Toast.LENGTH_SHORT).show(); return true; } }); viewPager = (ViewPager) findViewById(R.id.main_viewpager); viewPager.setOffscreenPageLimit(5); mainPagerAdapter = new MainPagerAdapter(this); viewPager.setAdapter(mainPagerAdapter); final TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); tabHost.setup(); LayoutInflater layoutInflater = getLayoutInflater(); final List<ImageView> tabIconList = new ArrayList<ImageView>(); View timelineTab = layoutInflater.inflate(R.layout.badge_view, null); ImageView timelineTabIcon = (ImageView) timelineTab.findViewById(R.id.badge_view_icon); timelineTabIcon.setImageResource(R.drawable.ic_tab_timeline); timelineTabIcon.setImageAlpha(255); timelineTab.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { Toast.makeText(MainActivity.this, mainPagerAdapter.getPageTitle(0), Toast.LENGTH_SHORT).show(); return true; } }); tabIconList.add(timelineTabIcon); mentionTab = layoutInflater.inflate(R.layout.badge_view, null); ImageView mentionTabIcon = (ImageView) mentionTab.findViewById(R.id.badge_view_icon); mentionTabIcon.setImageResource(R.drawable.ic_tab_mention); mentionTabIcon.setImageAlpha(153); mentionTab.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { Toast.makeText(MainActivity.this, mainPagerAdapter.getPageTitle(1), Toast.LENGTH_SHORT).show(); return true; } }); tabIconList.add(mentionTabIcon); View favoriteTab = layoutInflater.inflate(R.layout.badge_view, null); ImageView favoriteTabIcon = (ImageView) favoriteTab.findViewById(R.id.badge_view_icon); favoriteTabIcon.setImageResource(R.drawable.ic_tab_favorite); favoriteTabIcon.setImageAlpha(153); favoriteTab.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { Toast.makeText(MainActivity.this, mainPagerAdapter.getPageTitle(2), Toast.LENGTH_SHORT).show(); return true; } }); tabIconList.add(favoriteTabIcon); tabHost.addTab(tabHost.newTabSpec("0").setIndicator(timelineTab).setContent(android.R.id.tabcontent)); tabHost.addTab(tabHost.newTabSpec("1").setIndicator(mentionTab).setContent(android.R.id.tabcontent)); tabHost.addTab(tabHost.newTabSpec("2").setIndicator(favoriteTab).setContent(android.R.id.tabcontent)); tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { @Override public void onTabChanged(String tabId) { for (ImageView icon : tabIconList) { icon.setImageAlpha(153); } tabIconList.get(Integer.valueOf(tabId)).setImageAlpha(255); if (isBadgeShown() && Integer.valueOf(tabId) == FlagUnit.IN_MENTION_FRAGMENT) { MentionFragment mentionFragment = (MentionFragment) mainPagerAdapter.getListFragmentFromPosition(FlagUnit.IN_MENTION_FRAGMENT); mentionFragment.getLatestMentions(); showBadge(false); } viewPager.setCurrentItem(Integer.valueOf(tabId)); } }); final TabWidget tabWidget = (TabWidget) findViewById(android.R.id.tabs); final View tabIndicator = findViewById(R.id.tab_indicator); viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { private int scrollState = ViewPager.SCROLL_STATE_IDLE; private void updateIndicatorPosition(int position, float positionOffset) { View tabView = tabWidget.getChildTabViewAt(position); int tabIndicatorWidth = tabView.getWidth(); int tabIndicatorLeft = (int) ((position + positionOffset) * tabIndicatorWidth); final FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) tabIndicator.getLayoutParams(); layoutParams.width = tabIndicatorWidth; layoutParams.setMargins(tabIndicatorLeft, 0, 0, 0); tabIndicator.setLayoutParams(layoutParams); } @Override public void onPageScrollStateChanged(int state) { scrollState = state; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { updateIndicatorPosition(position, positionOffset); } @Override public void onPageSelected(int position) { if (scrollState == ViewPager.SCROLL_STATE_IDLE) { updateIndicatorPosition(position, 0); } for (ImageView icon : tabIconList) { icon.setImageAlpha(153); } tabIconList.get(position).setImageAlpha(255); if (isBadgeShown() && position == FlagUnit.IN_MENTION_FRAGMENT) { MentionFragment mentionFragment = (MentionFragment) mainPagerAdapter.getListFragmentFromPosition(FlagUnit.IN_MENTION_FRAGMENT); mentionFragment.getLatestMentions(); showBadge(false); } tabWidget.setCurrentTab(position); } }); } public void showBadge(boolean show) { View bubble = mentionTab.findViewById(R.id.badge_view_bubble); if (show) { bubble.setVisibility(View.VISIBLE); } else { bubble.setVisibility(View.GONE); } } public boolean isBadgeShown() { return mentionTab.findViewById(R.id.badge_view_bubble).getVisibility() == View.VISIBLE; } private void showSearchView(boolean show) { View view = findViewById(R.id.main_menu_search); InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); int[] location = new int[2]; view.getLocationOnScreen(location); int cx = (int) (location[0] + view.getPivotX() / 1.5); int cy = (int) (location[1] - view.getPivotY() / 4); if (show) { Animator anim = ViewAnimationUtils.createCircularReveal( searchView, cx, cy, 0, searchView.getWidth() ); searchView.setVisibility(View.VISIBLE); anim.start(); if (searchView.requestFocus()) { inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } } else { Animator anim = ViewAnimationUtils.createCircularReveal( searchView, cx, cy, searchView.getWidth(), 0 ); anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); searchViewEditText.setText(null); searchView.setVisibility(View.INVISIBLE); } }); anim.start(); inputMethodManager.hideSoftInputFromWindow( getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS ); } } private boolean shouldHideSearchView(View view, MotionEvent motionEvent) { if (view != null && (view instanceof EditText)) { int[] location = new int[2]; searchView.getLocationOnScreen(location); int left = location[0]; int right = left + searchView.getWidth(); int top = location[1]; int bottom = top + searchView.getHeight(); return !(left <= motionEvent.getRawX() && motionEvent.getRawX() <= right && top <= motionEvent.getRawY() && motionEvent.getRawY() <= bottom); } return false; } public ListFragment getCurrentListFragment() { return mainPagerAdapter.getListFragmentFromPosition(viewPager.getCurrentItem()); } private void cancelAllTasks() { ((TimelineFragment) mainPagerAdapter.getListFragmentFromPosition(FlagUnit.IN_TIMELINE_FRAGMENT)).cancelAllTasks(); ((MentionFragment) mainPagerAdapter.getListFragmentFromPosition(FlagUnit.IN_MENTION_FRAGMENT)).cancelAllTasks(); ((FavoriteFragment) mainPagerAdapter.getListFragmentFromPosition(FlagUnit.IN_FAVORITE_FRAGMENT)).cancelAllTasks(); } }