/* * Copyright 2016 Selina Li * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package me.selinali.tribbble.ui; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import com.crashlytics.android.answers.Answers; import com.crashlytics.android.answers.CustomEvent; import java.util.HashMap; import java.util.Map; import butterknife.BindView; import butterknife.ButterKnife; import me.selinali.tribbble.R; import me.selinali.tribbble.model.Shot; import me.selinali.tribbble.ui.archive.ArchiveFragment; import me.selinali.tribbble.ui.common.BinaryBar; import me.selinali.tribbble.ui.common.BinaryBar.Item; import me.selinali.tribbble.ui.deck.DeckFragment; import me.selinali.tribbble.utils.ViewUtils; public class MainActivity extends AppCompatActivity { private static final String TAG_DECK_FRAGMENT = "TAG_DECK_FRAGMENT"; private static final String TAG_ARCHIVE_FRAGMENT = "TAG_ARCHIVE_FRAGMENT"; @BindView(R.id.container) View mContainer; @BindView(R.id.binary_bar) BinaryBar mBinaryBar; private final Map<String, Fragment> mFragments = new HashMap<>(2); private final Animation mAnimation = new AlphaAnimation(0, 1); private final Item mLeftItem = new Item(R.string.deck, R.drawable.ic_deck, v -> { Answers.getInstance().logCustom(new CustomEvent("Deck clicked")); swapFragment(TAG_DECK_FRAGMENT); }); private final Item mRightItem = new Item(R.string.archive, R.drawable.ic_archive, v -> { Answers.getInstance().logCustom(new CustomEvent("Archive clicked")); swapFragment(TAG_ARCHIVE_FRAGMENT); }); { mAnimation.setDuration(200); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); setupMargins(); mFragments.put(TAG_DECK_FRAGMENT, DeckFragment.newInstance()); mFragments.put(TAG_ARCHIVE_FRAGMENT, ArchiveFragment.newInstance()); swapFragment(TAG_DECK_FRAGMENT); mBinaryBar.addItems(mLeftItem, mRightItem); } private void swapFragment(String tag) { FragmentManager manager = getSupportFragmentManager(); Fragment targetFragment = manager.findFragmentByTag(tag); if (targetFragment != null && targetFragment.isVisible()) { return; } mContainer.setAnimation(mAnimation); mAnimation.start(); String otherTag = tag.equals(TAG_DECK_FRAGMENT) ? TAG_ARCHIVE_FRAGMENT : TAG_DECK_FRAGMENT; if (manager.findFragmentByTag(tag) != null) { manager.beginTransaction() .show(manager.findFragmentByTag(tag)) .commit(); } else { manager.beginTransaction() .add(R.id.container, mFragments.get(tag), tag) .commit(); } if (manager.findFragmentByTag(otherTag) != null) { manager.beginTransaction() .hide(manager.findFragmentByTag(otherTag)) .commit(); } if (tag.equals(TAG_DECK_FRAGMENT)) showBottomBar(true); } @Nullable private String getVisibleFragmentTag() { FragmentManager manager = getSupportFragmentManager(); Fragment fragment = manager.findFragmentByTag(TAG_DECK_FRAGMENT); if (fragment != null && fragment.isVisible()) { return TAG_DECK_FRAGMENT; } else if ((fragment = manager.findFragmentByTag(TAG_ARCHIVE_FRAGMENT)) != null && fragment.isVisible()) { return TAG_ARCHIVE_FRAGMENT; } else { return null; } } @Override public void onBackPressed() { String visibleFragmentTag = getVisibleFragmentTag(); if (visibleFragmentTag == null || visibleFragmentTag.equals(TAG_DECK_FRAGMENT)) { super.onBackPressed(); } else { mBinaryBar.click(BinaryBar.LEFT); } } private void setupMargins() { int navigationBarHeight = ViewUtils.getNavigationBarHeight(); ViewUtils.setBottomMargin(mBinaryBar, navigationBarHeight + ViewUtils.dpToPx(16)); } public void showBottomBar(boolean show) { ViewUtils.fadeView(mBinaryBar, show, 150); } public void notifyShotArchived(Shot shot) { if (getSupportFragmentManager().findFragmentByTag(TAG_ARCHIVE_FRAGMENT) != null) { ((ArchiveFragment) mFragments.get(TAG_ARCHIVE_FRAGMENT)).insertFirst(shot); } } }