package jp.gr.procon.proconapp.ui.activity; import android.app.NotificationManager; import android.app.Service; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; import android.text.TextUtils; import com.google.android.gms.analytics.HitBuilders; import com.google.android.gms.analytics.Tracker; import jp.gr.procon.proconapp.GoogleAnalyticsConfig; import jp.gr.procon.proconapp.ProconApplication; import jp.gr.procon.proconapp.R; import jp.gr.procon.proconapp.model.FeedTwitterStatus; import jp.gr.procon.proconapp.model.GamePhoto; import jp.gr.procon.proconapp.model.Notice; import jp.gr.procon.proconapp.model.twitter.User; import jp.gr.procon.proconapp.notification.NotificationConfig; import jp.gr.procon.proconapp.ui.adapter.HomeViewPagerAdapter; import jp.gr.procon.proconapp.ui.callback.OnClickPhotoListener; import jp.gr.procon.proconapp.ui.callback.OnNoticeClickListener; import jp.gr.procon.proconapp.ui.fragment.GameResultOutlineFragment; import jp.gr.procon.proconapp.ui.fragment.NoticeOutlineFragment; import jp.gr.procon.proconapp.ui.fragment.PhotoOutlineFragment; import jp.gr.procon.proconapp.ui.fragment.RegisterTokenFragment; import jp.gr.procon.proconapp.ui.fragment.TwitterFeedFragment; import jp.gr.procon.proconapp.util.AppSharedPreference; import timber.log.Timber; public class MainActivity extends BaseActivity implements NoticeOutlineFragment.OnShowAllNoticeClickListener , GameResultOutlineFragment.OnShowAllGameResultClickListener , PhotoOutlineFragment.OnShowAllGamePhotoClickListener , OnNoticeClickListener , TwitterFeedFragment.OnClickTweetListener , ViewPager.OnPageChangeListener , OnClickPhotoListener { private static final String ARG_FROM_NOTIFICATION = "arg_from_notification"; private ViewPager mViewPager; private TabLayout mTabLayout; public static Intent createIntent(Context context) { return createIntent(context, false); } public static Intent createIntent(Context context, boolean fromNotification) { Intent intent = new Intent(context, MainActivity.class); Bundle args = new Bundle(); args.putBoolean(ARG_FROM_NOTIFICATION, fromNotification); intent.putExtras(args); return intent; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 通知からきていた場合 通知を削除 Bundle args = getIntent().getExtras(); boolean isFromNotification = false; if (args != null) { isFromNotification = args.getBoolean(ARG_FROM_NOTIFICATION, false); } if (isFromNotification) { NotificationManager notificationManager = (NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE); notificationManager.cancel(NotificationConfig.NOTIFICATION_ID_MAIN); } mViewPager = (ViewPager) findViewById(R.id.view_pager); mViewPager.addOnPageChangeListener(this); mTabLayout = (TabLayout) findViewById(R.id.tab_layout); if (mViewPager.getAdapter() == null) { setupView(); } } @Override protected void onResume() { super.onResume(); } @Override protected void onResumeFragments() { super.onResumeFragments(); replaceRegisterFragment(); } @Override protected void onPause() { super.onPause(); } private void setupView() { mViewPager.setAdapter(new HomeViewPagerAdapter(getSupportFragmentManager())); mTabLayout.setupWithViewPager(mViewPager); // 最初にアイテムが選択される際にonPageSelectedが呼び出されないので呼んでおく onPageSelected(0); } private void replaceRegisterFragment() { if (TextUtils.isEmpty(AppSharedPreference.getString(this, AppSharedPreference.PREFERENCE_USER_TOKEN))) { return; } getSupportFragmentManager() .beginTransaction() .replace(R.id.container, RegisterTokenFragment.newInstance()) .commit(); } @Override public void onShowAllGameResultClick() { Intent intent = GameResultListActivity.createIntent(this); startActivity(intent); } @Override public void onShowAllNoticeClick() { Intent intent = NoticeListActivity.createIntent(this); startActivity(intent); } public void onShowAllGamePhotoClick() { Intent intent = GamePhotoListActivity.createIntent(this); startActivity(intent); } @Override public void onNoticeClick(Notice notice) { Timber.d("onNoticeClick: "); Intent intent = NoticeDetailActivity.createIntent(this, notice.getId()); startActivity(intent); } @Override public void onClickTweet(FeedTwitterStatus tweet) { if (tweet == null || tweet.getUser() == null) { return; } // ツイート詳細を表示 Intent twitterIntent = new Intent(Intent.ACTION_VIEW); User user = tweet.getUser(); String formatTweetUrl = "https://twitter.com/%1$s/status/%2$s"; Uri httpUri = Uri.parse(String.format(formatTweetUrl, user.getScreenName(), tweet.getIdStr())); twitterIntent.setData(httpUri); startActivity(twitterIntent); } @Override public void onClickPostTweet() { String hashTag = "#" + getString(R.string.twitter_hash_tag); Uri uri = Uri.parse("twitter://post?message=" + Uri.encode(hashTag)); Intent intent = new Intent(Intent.ACTION_SEND); intent.setData(uri); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { Intent httpTweetIntent = new Intent(Intent.ACTION_VIEW); String formatHttpUrl = "http://twitter.com/share?text=%1$s"; Uri httpUri = Uri.parse(String.format(formatHttpUrl, Uri.encode(hashTag))); httpTweetIntent.setData(httpUri); startActivity(httpTweetIntent); } } @Override public void onClickMoreButton() { Intent intent = new Intent(Intent.ACTION_VIEW); Uri uri = Uri.parse("https://twitter.com/hashtag/" + getString(R.string.twitter_hash_tag)); intent.setData(uri); startActivity(intent); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { sendAnalyticsWithScreenName(position); } @Override public void onPageScrollStateChanged(int state) { } private void sendAnalyticsWithScreenName(int position) { Tracker tracker = ((ProconApplication) getApplication()).getTracker(); String screenName = position == 0 ? GoogleAnalyticsConfig.SCREEN_NAME_HOME : GoogleAnalyticsConfig.SCREEN_NAME_SOCIAL; tracker.setScreenName(screenName); tracker.send(new HitBuilders.ScreenViewBuilder().build()); } @Override public void onClickPhoto(GamePhoto photo) { Intent intent = PhotoDetailActivity.createIntent(this, photo); startActivity(intent); } }