/*
* Copyright 2014 Google Inc. All rights reserved.
*
* 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 com.google.samples.apps.iosched.ui.phone;
import android.app.ActionBar;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.MenuItem;
import com.google.samples.apps.iosched.R;
import com.google.samples.apps.iosched.ui.MapFragment;
import com.google.samples.apps.iosched.ui.NearbyActivity;
import com.google.samples.apps.iosched.ui.NearbyFragment;
import com.google.samples.apps.iosched.ui.PartnersFragment;
import com.google.samples.apps.iosched.util.AnalyticsManager;
import static com.google.samples.apps.iosched.util.LogUtils.LOGD;
import static com.google.samples.apps.iosched.util.LogUtils.makeLogTag;
public class MapActivity extends NearbyActivity implements MapFragment.Callbacks {
private static final String TAG = makeLogTag(MapActivity.class);
public static final String EXTRA_DETACHED_MODE
= "com.google.samples.apps.iosched.EXTRA_DETACHED_MODE";
private static final String SCREEN_LABEL = "Map";
private static final String PARTNERS_FRAGMENT_TAG = "partners";
private int mActionBarOnColor;
private int mActionBarOffColor;
private ColorDrawable mActionBarBgDrawable;
private boolean mPopupVisible = false; // Nearby or Partners
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (isFinishing()) {
return;
}
setContentView(R.layout.activity_map);
getLPreviewUtils().trySetActionBar();
if (null == savedInstanceState) {
// Pass arguments to MapFragment
MapFragment fragment = MapFragment.newInstance();
fragment.setArguments(intentToFragmentArguments(getIntent()));
getFragmentManager().beginTransaction()
.replace(R.id.main_content, fragment)
.commit();
}
/* [ANALYTICS:SCREEN]
* TRIGGER: View the Map screen on a phone.
* LABEL: "Map"
* [/ANALYTICS]
*/
AnalyticsManager.sendScreenView(SCREEN_LABEL);
LOGD("Tracker", SCREEN_LABEL);
overridePendingTransition(0, 0);
final Resources res = getResources();
mActionBarOffColor = res.getColor(R.color.translucent_actionbar_background);
mActionBarOnColor = res.getColor(R.color.theme_primary);
// Initialise and set background drawable here explicitly to ensure the background
// is drawn when the background color is changed on JellyBean
mActionBarBgDrawable = new ColorDrawable(mActionBarOffColor);
getActionBar().setBackgroundDrawable(mActionBarBgDrawable);
getFragmentManager().addOnBackStackChangedListener(
new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
mPopupVisible = (getFragmentManager().getBackStackEntryCount() == 1);
updateActionBarNavigation();
}
}
);
updateActionBarNavigation();
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
Fragment nearbyFragment = getFragmentManager().findFragmentByTag(NEARBY_FRAGMENT_TAG);
Fragment partnersFragment = getFragmentManager().findFragmentByTag(PARTNERS_FRAGMENT_TAG);
mPopupVisible = nearbyFragment != null || partnersFragment != null;
updateActionBarNavigation();
}
private void updateActionBarNavigation() {
boolean show = !isNavDrawerOpen();
ActionBar ab = getActionBar();
if (getLPreviewUtils().shouldChangeActionBarForDrawer()) {
ab.setDisplayShowTitleEnabled(show);
ab.setDisplayUseLogoEnabled(!show);
}
if (mPopupVisible) {
ab.hide();
} else {
ab.show();
}
}
@Override
protected void onNavDrawerStateChanged(boolean isOpen, boolean isAnimating) {
super.onNavDrawerStateChanged(isOpen, isAnimating);
updateActionBarNavigation();
}
@Override
protected void onNavDrawerSlide(float offset) {
super.onNavDrawerSlide(offset);
// Make Action Bar gradually fade into the theme color
mActionBarBgDrawable.setColor(Color.argb(
Color.alpha(mActionBarOffColor) + (int) (offset * (Color.alpha(mActionBarOnColor) - Color.alpha(mActionBarOffColor))),
Color.red(mActionBarOffColor) + (int) (offset * (Color.red(mActionBarOnColor) - Color.red(mActionBarOffColor))),
Color.green(mActionBarOffColor) + (int) (offset * (Color.green(mActionBarOnColor) - Color.green(mActionBarOffColor))),
Color.blue(mActionBarOffColor) + (int) (offset * (Color.blue(mActionBarOnColor) - Color.blue(mActionBarOffColor)))
));
getActionBar().setBackgroundDrawable(mActionBarBgDrawable);
}
@Override
public void onSessionRoomSelected(String roomId, String roomTitle) {
// we no longer have a screen that shows sessions on a given room
}
@Override
public void onShowPartners() {
getFragmentManager().beginTransaction()
.replace(R.id.main_content, PartnersFragment.newInstance(true),
PARTNERS_FRAGMENT_TAG)
.addToBackStack(null)
.commit();
}
@Override
protected int getSelfNavDrawerItem() {
if (getIntent().getBooleanExtra(EXTRA_DETACHED_MODE, false)) {
// in detached mode, we don't have a nav drawer
return NAVDRAWER_ITEM_INVALID;
} else {
return NAVDRAWER_ITEM_MAP;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (getIntent().getBooleanExtra(EXTRA_DETACHED_MODE, false)
&& item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
// Show whichever Fragment has been provided by NearbyActivity.
@Override
protected void showNearbyFragment(String tag) {
getFragmentManager().beginTransaction()
.replace(R.id.main_content, NearbyFragment.newInstance(true), tag)
.addToBackStack(null)
.commit();
}
}