Skip to content
This repository has been archived by the owner on Feb 26, 2023. It is now read-only.

Nullpointer on @EActivity #1815

Closed
githubdoramon opened this issue Jul 5, 2016 · 1 comment
Closed

Nullpointer on @EActivity #1815

githubdoramon opened this issue Jul 5, 2016 · 1 comment

Comments

@githubdoramon
Copy link

I am getting a lot of this errors, but have no idea how to reproduce them... And it only happpens on one of my generated Activities. Gere is the stack

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fleeber/com.fleeber.main.MainActivity_}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.util.SparseArray.get(int)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3125) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3224) at android.app.ActivityThread.access$1000(ActivityThread.java:198) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1682) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6843) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.util.SparseArray.get(int)' on a null object reference at android.view.View.dispatchRestoreInstanceState(View.java:14970) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3188) at android.view.View.restoreHierarchyState(View.java:14953) at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.restoreInstanceState(SourceFile:585) at android.support.design.internal.NavigationMenuPresenter.onRestoreInstanceState(SourceFile:180) at android.support.v7.view.menu.MenuBuilder.dispatchRestoreInstanceState(SourceFile:348) at android.support.v7.view.menu.MenuBuilder.restorePresenterStates(SourceFile:360) at android.support.design.widget.NavigationView.onRestoreInstanceState(SourceFile:197) at android.view.View.dispatchRestoreInstanceState(View.java:14975) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3188) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3194) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3194) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3194) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3194) at android.view.View.restoreHierarchyState(View.java:14953) at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2294) at android.app.Activity.onRestoreInstanceState(Activity.java:1140) at android.app.Activity.performRestoreInstanceState(Activity.java:1085) at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1176) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3098) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3224) at android.app.ActivityThread.access$1000(ActivityThread.java:198) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1682) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6843) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

Here is the activity code:

`package com.fleeber.main;

import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.app.AlertDialog;
import android.app.NotificationManager;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.graphics.Point;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.view.menu.ActionMenuItemView;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.facebook.drawee.view.SimpleDraweeView;
import com.fleeber.FleeberApplication;
import com.fleeber.R;
import com.fleeber.activities.zendesk.ContactZendeskFleeberActivity;
import com.fleeber.api.domain.enumx.NotificationType;
import com.fleeber.chat.ChatListActivity_;
import com.fleeber.cloud_messaging.NotificationTypeHelper;
import com.fleeber.common.domain.enumx.TimelineType;
import com.fleeber.common.prefs.IsRunningPrefs_;
import com.fleeber.common.prefs.UsagePrefs_;
import com.fleeber.common.ui_items.BaseActivity;
import com.fleeber.common.ui_items.LogInDialog;
import com.fleeber.common.ui_items.LogInDialog_;
import com.fleeber.main.fragments.NotificationsFragment;
import com.fleeber.main.fragments.SearchFragment;
import com.fleeber.main.fragments.SearchFragment_;
import com.fleeber.messages.fragments.ChatsFragment;
import com.fleeber.messages.fragments.ChatsFragment_;
import com.fleeber.profiles.UserMusicianProfile_;
import com.fleeber.profiles.musician.edit.EditMusicianProfileActivity_;
import com.fleeber.rest.notification.NotificationsRest;
import com.fleeber.rest.profiles.ProfilesRest;
import com.fleeber.rest.profiles.data.NotesAndProfilesData;
import com.fleeber.rest.util.RestUtils;
import com.fleeber.search.SearchResultsFragment;
import com.fleeber.search.SearchResultsFragment_;
import com.fleeber.settings.SettingsActivity_;
import com.fleeber.util.BroadcastConstants;
import com.fleeber.util.helpers.FleeberSupportedLocalesHelper;
import com.fleeber.util.helpers.GoogleAnalyticsHelper;
import com.fleeber.util.helpers.HintsHelper;
import com.fleeber.util.helpers.LocationHelper;
import com.fleeber.util.helpers.LoginReceiver;
import com.fleeber.util.helpers.UserHelper;
import com.google.android.gms.appinvite.AppInviteInvitation;

import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Background;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.FragmentById;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById;
import org.androidannotations.annotations.sharedpreferences.Pref;
import org.androidannotations.rest.spring.annotations.RestService;
import org.springframework.web.client.HttpStatusCodeException;

import java.util.ArrayList;
import java.util.List;

@EActivity(R.layout.activity_main)
public class MainActivity extends BaseActivity implements RestUtils.RestErrorMessageHandler {

private final static int INVITE_CODE = 10;

//Tab Itens
private final static int TIMELINE_TAB = 0;
private final static int MAP_TAB = 1;

@Pref
UsagePrefs_ usagePrefs;

@Pref
IsRunningPrefs_ isRunningPrefs;

@RestService
protected ProfilesRest profilesRest;

@RestService
protected NotificationsRest notificationsRest;

@Bean
LocationHelper locationHelper;

@Bean
UserHelper userHelper;

@Bean
HintsHelper hintsHelper;

@Bean
GoogleAnalyticsHelper googleAnalyticsHelper;

@ViewById(R.id.pager)
ViewPager mViewPager;

@ViewById
DrawerLayout drawer_layout;

@ViewById
NavigationView navigationView;

@ViewById
FrameLayout mainContainer, settings_container, help_container;

@ViewById
public FloatingActionButton fab;

@ViewById
TabLayout tabLayout;

@FragmentById(R.id.notificationsMenu)
NotificationsFragment notificationsFragment;

@FragmentById(R.id.searchMenuFragment)
SearchFragment searchFragment;

SimpleDraweeView profile_image;

TextView profile_name, menu_notes, menu_followers, menu_following, notificationCountLabel, chatCount;

private ActionBarDrawerToggle mDrawerToggle;

private boolean drawerOpened = false;

MainSectionsPagerAdapter mMainSectionsPagerAdapter;

private UserInfoReceiver userInfoReceiver = new UserInfoReceiver();

ChatsFragment chatsFragment;

SearchResultsFragment searchResultsFragment;

private int selectedTab = TIMELINE_TAB;

private TimelineType timelineType = TimelineType.RELATED_TO_ME;

public MainActivity instance = null;

private ImageView notificationIcon;

private View navHeaderView;

MainLoginReceiver loginReceiver = new MainLoginReceiver();

PrivateChatsSync privateChatsSync = new PrivateChatsSync();

MessageSentReceiver messageSentReceiver = new MessageSentReceiver();

List<MenuItem> menuItems = new ArrayList<>();

int newMessageTentatives = 0;

private float activitySlided = 0f, initialPoint = 0f;

private long lastClickTime = 0L;

@AfterViews
public void afterViews() {

    this.getSupportActionBar().setElevation(0);

    locationHelper.updateUserLocation(false, this);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setSharedElementReturnTransition(null);
        getWindow().setSharedElementReenterTransition(null);
        getWindow().setSharedElementEnterTransition(null);
        getWindow().setSharedElementExitTransition(null);
        getWindow().setSharedElementsUseOverlay(true);
        getWindow().setAllowEnterTransitionOverlap(false);
    }

    for (Fragment fragment : getSupportFragmentManager().getFragments()) {
        if (fragment instanceof ChatsFragment_) {
            chatsFragment = (ChatsFragment_) fragment;
        }
        if (fragment instanceof SearchResultsFragment_) {
            searchResultsFragment = (SearchResultsFragment_) fragment;
        }
        if (fragment instanceof SearchFragment_) {
            searchFragment = (SearchFragment_) fragment;
        }
    }

    instance = this; // used in Settings to change app language

    ((FleeberApplication) getApplication()).setMain(this);

    RestUtils.setupRestTemplate(this, profilesRest.getRestTemplate(), fleeberPrefs.token().get(), fleeberPrefs.user().get(), fleeberPrefs.profile().get(), fleeberPrefs.appVersion().get());
    RestUtils.configureExceptionHandler(this.profilesRest, this, this);
    RestUtils.setupRestTemplate(this, notificationsRest.getRestTemplate(), fleeberPrefs.token().get(), fleeberPrefs.user().get(), fleeberPrefs.profile().get(), fleeberPrefs.appVersion().get());
    RestUtils.configureExceptionHandler(this.notificationsRest, this, this);

    mDrawerToggle = new ActionBarDrawerToggle(this, drawer_layout, R.string.openMenu, R.string.closeMenu) {
        public void onDrawerClosed(View view) {
            drawerOpened = false;
        }

        public void onDrawerOpened(View drawerView) {
            googleAnalyticsHelper.trackMenuOpening();
            drawerOpened = true;
        }

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
        }
    };

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);

    mainContainer.getLayoutParams().width = size.x;

    drawer_layout.setDrawerListener(mDrawerToggle);

    settings_container.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, SettingsActivity_.class);
            startActivity(intent);
            drawer_layout.closeDrawers();
        }
    });

    help_container.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, ContactZendeskFleeberActivity.class);
            startActivity(intent);
            drawer_layout.closeDrawers();
        }
    });

    final ActionBar actionBar = getSupportActionBar();

    actionBar.setDisplayShowTitleEnabled(true);
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayHomeAsUpEnabled(true);

    findViewById(R.id.toolbar).findViewById(R.id.search_layout).setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                searchFragment.showSearchBar(v.getLeft() + event.getX(), v.getTop() + event.getY());
            }
            return true;
        }
    });

    mMainSectionsPagerAdapter = new MainSectionsPagerAdapter(getSupportFragmentManager());
    // Set up the ViewPager with the sections adapter.
    mViewPager.setAdapter(mMainSectionsPagerAdapter);
    mMainSectionsPagerAdapter.notifyDataSetChanged();
    mViewPager.setOffscreenPageLimit(3);

    tabLayout.removeAllTabs();
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_timeline_white));
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_search_map_white));

    tabLayout.setSelectedTabIndicatorColor(ContextCompat.getColor(this, android.R.color.white));
    tabLayout.setSelectedTabIndicatorHeight(Math.round(4 * getResources().getDisplayMetrics().density));

    delayShowSearchHint();

    mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            mViewPager.setCurrentItem(tab.getPosition());
            ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(tab.getIcon(), PropertyValuesHolder.ofInt("alpha", 160, 255));
            anim.setTarget(tab.getIcon());
            anim.setDuration(300);
            anim.start();
            switch (tab.getPosition()) {
                case TIMELINE_TAB:
                    selectedTab = TIMELINE_TAB;
                    invalidateOptionsMenu();
                    fab.show();
                    MainActivity.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
                    googleAnalyticsHelper.trackTabChanging("TIMELINE_TAB");
                    break;
                case MAP_TAB:
                    selectedTab = MAP_TAB;
                    invalidateOptionsMenu();
                    MainActivity.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
                    fab.hide();
                    if (searchResultsFragment != null) {
                        searchResultsFragment.initMapAfterVisible();
                    }
                    googleAnalyticsHelper.trackTabChanging("MAP_TAB");
                    break;
                default:
                    MainActivity.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
                    break;
            }
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            if(tab!=null && tab.getIcon()!=null) {
                ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(tab.getIcon(), PropertyValuesHolder.ofInt("alpha", 255, 160));
                anim.setTarget(tab.getIcon());
                anim.setDuration(300);
                anim.start();
            }
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }


    });

    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            drawer_layout.closeDrawers();
            menuItem.setChecked(false);
            switch (menuItem.getItemId()) {
                case R.id.myProfile:
                    Intent intent = new Intent(MainActivity.this, UserMusicianProfile_.class);
                    Bundle b = new Bundle();
                    b.putLong("profileId", fleeberPrefs.profile().get());
                    b.putString("profileName", fleeberPrefs.username().get());
                    intent.putExtras(b);
                    MainActivity.this.startActivity(intent);
                    break;
                case R.id.action_chats:
                    Intent chatIntent = new Intent(MainActivity.this, ChatListActivity_.class);
                    startActivity(chatIntent);
                    break;
                case R.id.clap:
                    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);
                    alertDialogBuilder.setTitle(null);
                    alertDialogBuilder.setMessage(MainActivity.this.getResources().getString(R.string.rate_text));
                    alertDialogBuilder.setPositiveButton("Ok",
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface arg0, int arg1) {
                                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.fleeber"));
                                    try {
                                        MainActivity.this.startActivity(intent);
                                    } catch (ActivityNotFoundException e) {
                                        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.fleeber"));
                                        MainActivity.this.startActivity(intent);
                                    }
                                }
                            }
                    );
                    AlertDialog alert = alertDialogBuilder.create();
                    alert.show();
                    break;
                case R.id.invite:
                    Intent inviteIntent = new AppInviteInvitation.IntentBuilder(getString(R.string.invite_friends))
                            .setMessage(getString(R.string.invite_message))
                            .setCallToActionText(getString(R.string.invite_call))
                            .setAndroidMinimumVersionCode(15)
                            .setCustomImage(Uri.parse("https://fleeber.com/appInvite.jpg"))
                            .setOtherPlatformsTargetApplication(AppInviteInvitation.IntentBuilder.PlatformMode.PROJECT_PLATFORM_IOS, "576750074304-4foavlrkbufd2t314bavp7v91pa3qepc.apps.googleusercontent.com")
                            .build();
                    startActivityForResult(inviteIntent, INVITE_CODE);
                    googleAnalyticsHelper.trackAppInviteOpening();
                    break;
            }
            return true;
        }
    });

    // while is the only button, but in the future can be changed for other fragments
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (chatsFragment != null) {
                newMessageTentatives = 0;
                chatsFragment.newMessage();
            } else {
                delayNewMessage();
            }
        }
    });

    LoginReceiver.registerLoginReceiver(this, loginReceiver);
    this.registerReceiver(userInfoReceiver, new IntentFilter("userInfoChange"));
    this.registerReceiver(privateChatsSync, new IntentFilter(BroadcastConstants.PRIVATE_CHATS_SYNC));
    this.registerReceiver(messageSentReceiver, new IntentFilter(BroadcastConstants.PUBLICATION_SENT));

    for (int i = 0; i < navigationView.getMenu().size(); i++) {
        menuItems.add(navigationView.getMenu().getItem(i));
    }

    drawer_layout.setDrawerShadow(R.drawable.right_shadow_background, GravityCompat.START);
    drawer_layout.closeDrawers();
    mDrawerToggle.syncState();
    setupNavDrawer();
    setupNotificationsFragment();

    if (!fleeberPrefs.logged().get()) {
        tabLayout.setVisibility(View.GONE);
        selectedTab = MAP_TAB;
        fab.hide();
    } else {
        tabLayout.setVisibility(View.VISIBLE);
    }

    if (searchResultsFragment != null && !fleeberPrefs.logged().get()) {
        searchResultsFragment.initMapAfterVisible();
    }

    presentNavDrawerOrNot();
}

public void closeDrawers() {
    drawer_layout.closeDrawers();
}

private void checkIntents() {
    if (getIntent().getBooleanExtra("newUser", false) || (getIntent().getDataString() != null && getIntent().getDataString().contains("search"))) {
        tabLayout.getTabAt(0).getIcon().setAlpha(160);
        selectedTab = MAP_TAB;
    } else {
        tabLayout.getTabAt(1).getIcon().setAlpha(160);
    }
    mMainSectionsPagerAdapter.notifyDataSetChanged();
    mViewPager.setCurrentItem(selectedTab);
}

@UiThread(delay = 35000)
void delayShowSearchHint() {
    if (fleeberPrefs.logged().get()) {
        if (!drawerOpened) {
            hintsHelper.showOrNotNewSearchHint(((ViewGroup) ((ViewGroup) tabLayout.getChildAt(0)).getChildAt(1)).getChildAt(0), getSupportFragmentManager(), mainContainer);
        } else {
            delayShowSearchHint();
        }
    }
}

@Override
protected void onStart() {
    super.onStart();
    checkIntents();
}

@Override
protected void onPause() {
    super.onPause();
    isRunningPrefs.mainActivity().put(false);
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    this.setIntent(intent);
    checkIntents();
}

@UiThread(delay = 2000)
void presentNavDrawerOrNot() {
    if (fleeberPrefs.logged().get() && !usagePrefs.showedNavDrawer().get()) {
        usagePrefs.showedNavDrawer().put(true);
        drawer_layout.openDrawer(GravityCompat.START);
    }
}

@UiThread(delay = 1000)
void delayNewMessage() {
    newMessageTentatives++;
    if (chatsFragment != null && newMessageTentatives < 5) {
        chatsFragment.newMessage();
    } else {
        delayNewMessage();
    }
}

@Override
public void onBackPressed() {
    if (null != searchFragment && searchFragment.searchBarOpened) {
        searchFragment.hideSearchBar();
    } else if (null != searchResultsFragment && searchResultsFragment.isPanelExpanded()) {
        searchResultsFragment.switchToTinderLayout();
    } else if (drawerOpened) {
        drawer_layout.closeDrawers();
    } else {
        super.onBackPressed();
    }
}

private void setupNotificationsFragment() {
    int amount = Math.round(300 * getResources().getDisplayMetrics().density);

    if(getResources().getDisplayMetrics().widthPixels < 350 * getResources().getDisplayMetrics().density) {
        amount = Math.round(getResources().getDisplayMetrics().widthPixels-50*this.getResources().getDisplayMetrics().density);
    }

    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(amount, FrameLayout.LayoutParams.MATCH_PARENT, Gravity.END);
    notificationsFragment.getView().setLayoutParams(params);
}

private void setupNavDrawer() {
    if (navHeaderView != null) {
        navigationView.removeHeaderView(navHeaderView);
    }
    if (fleeberPrefs.logged().get()) {
        navHeaderView = LayoutInflater.from(this).inflate(R.layout.nav_drawer_header, null);
        profile_name = ((TextView) navHeaderView.findViewById(R.id.profile_name));
        profile_name.setText(fleeberPrefs.username().get());
        profile_image = ((SimpleDraweeView) navHeaderView.findViewById(R.id.profile_image));
        profile_image.setImageURI(Uri.parse(fleeberPrefs.userPic().get()));
        menu_notes = ((TextView) navHeaderView.findViewById(R.id.notes));
        menu_followers = ((TextView) navHeaderView.findViewById(R.id.followers));
        menu_following = ((TextView) navHeaderView.findViewById(R.id.following));
        navigationView.addHeaderView(navHeaderView);

        if (navigationView.getMenu().size() == 0) {
            navigationView.inflateMenu(R.menu.main_drawer_itens);
            navigationView.setItemBackgroundResource(R.drawable.fleeber_ripple_light);
        }

        FrameLayout edit_container = (FrameLayout) navHeaderView.findViewById(R.id.edit_container);
        edit_container.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, EditMusicianProfileActivity_.class));
            }
        });

        getNotesAndFollowers();

        chatCount = ((TextView) navigationView.getMenu().findItem(R.id.action_chats).getActionView().findViewById(R.id.chatCount));

        updateChatsCount();

    } else {
        final LogInDialog logInDialog = new LogInDialog_();
        navigationView.getMenu().clear();
        navHeaderView = LayoutInflater.from(this).inflate(R.layout.nav_drawer_not_logged_header, null);
        LinearLayout login_button = (LinearLayout) navHeaderView.findViewById(R.id.login_button);
        login_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (SystemClock.elapsedRealtime() - lastClickTime > 800) {
                    lastClickTime = SystemClock.elapsedRealtime();
                    if (!logInDialog.isRemoving()) {
                        closeDrawers();
                        googleAnalyticsHelper.trackShowLoginOptions("menuWhileExploring");
                        logInDialog.show(MainActivity.this.getSupportFragmentManager(), "loginDialog");
                    }
                }
            }
        });
        navigationView.addHeaderView(navHeaderView);

    }
}

@Override
protected void onResume() {
    super.onResume();
    isRunningPrefs.mainActivity().put(true);
    if (((FleeberApplication) getApplication()).openNotificationMenu) {
        this.openNotificationMenu();
        ((FleeberApplication) getApplication()).openNotificationMenu = false;
    }
}

@Background
public void getNotesAndFollowers() {
    NotesAndProfilesData data = profilesRest.getNotesAndFolowers(fleeberPrefs.profile().get());
    if (data != null) {
        updateNotesAndFollowers(data.getNotes(), data.getFollowers(), data.getFollowing());
    }
}

@Background
public void getNotificationCount() {
    Integer count = this.notificationsRest.getUnreadCount();
    if (null != count) {
        ((FleeberApplication) getApplication()).notificationCount = count;
        updateNotificationsCount(count);
        if (notificationsFragment != null) {
            notificationsFragment.getFirstNotifications(false);
        }
    }
}

@UiThread
public void updateChatsCount() {
    if (chatCount != null) {
        if (fleeberPrefs.unreadChatNotifications().get() > 0) {
            chatCount.setText(String.valueOf(fleeberPrefs.unreadChatNotifications().get()));
            chatCount.setVisibility(View.VISIBLE);

            ScaleAnimation anim = new ScaleAnimation(0f, 1.0f, 0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            anim.setDuration(400);
            anim.setStartOffset(700);

            chatCount.startAnimation(anim);
        } else {
            chatCount.setText("");
            chatCount.setVisibility(View.GONE);
        }
    }
}

@UiThread
public void updateNotificationsCount(int count) {
    int image;
    if (count > 0) {
        notificationCountLabel.setText(String.valueOf(count));
        notificationCountLabel.setVisibility(View.VISIBLE);

        ScaleAnimation anim = new ScaleAnimation(0f, 1.0f, 0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        anim.setDuration(400);
        anim.setStartOffset(700);

        notificationCountLabel.startAnimation(anim);
        image = R.drawable.ic_notifications_white_24dp;
    } else {
        notificationCountLabel.setText("");
        notificationCountLabel.setVisibility(View.GONE);
        image = R.drawable.ic_notifications_none_white_24dp;
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        notificationIcon.setImageDrawable(getResources().getDrawable(image, getTheme()));
    } else {
        notificationIcon.setImageDrawable(getResources().getDrawable(image));
    }
}

@UiThread(delay = 2000)
void showOrNotNotifications() {
    if (!drawerOpened && notificationIcon != null) {
        hintsHelper.showOrNotNotificationsHint(notificationIcon, getSupportFragmentManager(), mainContainer);
        hintsHelper.showOrNotTimelineTypeHint(notificationIcon, getSupportFragmentManager(), mainContainer); // using this icon because cant get view for the timeline one
    } else {
        showOrNotNotifications();
    }
}

@UiThread
public void updateNotesAndFollowers(int notes, int followers, int following) {
    menu_notes.setText(String.valueOf(notes));
    menu_followers.setText(String.valueOf(followers));
    menu_following.setText(String.valueOf(following));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    if (fleeberPrefs.logged().get()) {
        FrameLayout badgeLayout = (FrameLayout) menu.findItem(R.id.action_notification).getActionView();
        notificationCountLabel = (TextView) badgeLayout.findViewById(R.id.notificationCount);
        notificationIcon = (ImageView) badgeLayout.findViewById(R.id.notificationIcon);

        showOrNotNotifications();

        getNotificationCount();

        badgeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openNotificationMenu();
            }
        });
    } else {
        menu.findItem(R.id.action_notification).setVisible(false);
    }

    if (searchResultsFragment != null) {
        if (searchResultsFragment.isPanelExpanded()) {
            menu.findItem(R.id.action_toggle_search).setIcon(R.drawable.ic_view_carousel_white_24dp);
        } else {
            menu.findItem(R.id.action_toggle_search).setIcon(R.drawable.ic_list_white_24dp);
        }
    }

    return super.onCreateOptionsMenu(menu);
}

public void openNotificationMenu() {

    drawer_layout.openDrawer(GravityCompat.END);

    usagePrefs.showedNotificationsHint().put(true);

    NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    nm.cancel(NotificationTypeHelper.getNotificationIdFromType(NotificationType.FOLLOW_PROFILE));
    nm.cancel(NotificationTypeHelper.getNotificationIdFromType(NotificationType.PROFILE_NOTE));
    nm.cancel(NotificationTypeHelper.getNotificationIdFromType(NotificationType.PUBLICATION));
    nm.cancel(NotificationTypeHelper.getNotificationIdFromType(NotificationType.PUBLICATION_NOTE));

    if (notificationCountLabel != null) {
        notificationCountLabel.setText("");
        notificationCountLabel.setVisibility(View.GONE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            notificationIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_notifications_none_white_24dp, getTheme()));
        } else {
            notificationIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_notifications_none_white_24dp));
        }
    }

    notificationsFragment.markAllViewed();
    notificationsFragment.getFirstNotifications(false);
    fleeberPrefs.profileNotifications().put(0);
    fleeberPrefs.publicationNotifications().put(0);

    googleAnalyticsHelper.trackNotificationsMenuOpening();

}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    View searchLayout = findViewById(R.id.toolbar).findViewById(R.id.search_layout);

    if (!fleeberPrefs.logged().get()) {
        searchLayout.setPadding(0, 0, Math.round(20 * getResources().getDisplayMetrics().density), 0);
    } else {
        searchLayout.setPadding(0, 0, 0, 0);
    }

    MenuItem timelineItem = menu.findItem(R.id.action_toggle_timeline);
    MenuItem searchItem = menu.findItem(R.id.action_toggle_search);

    if (selectedTab == MAP_TAB) {
        if (searchLayout != null) {
            searchLayout.setVisibility(View.VISIBLE);
        }
        if (searchItem != null) {
            searchItem.setVisible(true);
        }
        if (timelineItem != null) {
            timelineItem.setVisible(false);
        }
    } else {
        if (searchLayout != null) {
            searchLayout.setVisibility(View.GONE);
        }
        if (searchItem != null) {
            searchItem.setVisible(false);
        }
        if (timelineItem != null) {
            timelineItem.setVisible(true);
            switch (timelineType) {
                case RELATED_TO_ME:
                    googleAnalyticsHelper.trackTimelineChange("RELATED_TO_ME");
                    menu.findItem(R.id.action_toggle_timeline).setIcon(R.drawable.ic_account_circle_white_24dp);
                    break;
                case NEARBY:
                    googleAnalyticsHelper.trackTimelineChange("NEARBY");
                    menu.findItem(R.id.action_toggle_timeline).setIcon(R.drawable.ic_place_white_full);
                    break;
                case WORLDWIDE:
                    googleAnalyticsHelper.trackTimelineChange("WORLDWIDE");
                    menu.findItem(R.id.action_toggle_timeline).setIcon(R.drawable.ic_public_white_24dp);
                    break;
            }
        }
    }
    return super.onPrepareOptionsMenu(menu);
}

@UiThread
@Override
public void onMessageError(HttpStatusCodeException rootCause, String message) {
    Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}

@Override
protected void onDestroy() {
    this.unregisterReceiver(userInfoReceiver);
    this.unregisterReceiver(loginReceiver);
    this.unregisterReceiver(privateChatsSync);
    this.unregisterReceiver(messageSentReceiver);
    super.onDestroy();
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onOptionsItemSelected(final MenuItem item) {

    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch (item.getItemId()) {
        case R.id.action_myTimeline:
            usagePrefs.showedTimelineTypeHint().put(true);
            timelineType = TimelineType.RELATED_TO_ME;
            ((ActionMenuItemView) findViewById(R.id.action_toggle_timeline)).setIcon(getResources().getDrawable(R.drawable.ic_account_circle_white_24dp));
            chatsFragment.setMyTimeline(TimelineType.RELATED_TO_ME);
            chatsFragment.getFirstMessages();
            return true;
        case R.id.action_near_timeline:
            usagePrefs.showedTimelineTypeHint().put(true);
            timelineType = TimelineType.NEARBY;
            ((ActionMenuItemView) findViewById(R.id.action_toggle_timeline)).setIcon(getResources().getDrawable(R.drawable.ic_place_white_full));
            chatsFragment.setMyTimeline(TimelineType.NEARBY);
            chatsFragment.getFirstMessages();
            return true;
        case R.id.action_worldwide_timeline:
            usagePrefs.showedTimelineTypeHint().put(true);
            timelineType = TimelineType.WORLDWIDE;
            ((ActionMenuItemView) findViewById(R.id.action_toggle_timeline)).setIcon(getResources().getDrawable(R.drawable.ic_public_white_24dp));
            chatsFragment.setMyTimeline(TimelineType.WORLDWIDE);
            chatsFragment.getFirstMessages();
            return true;
        case R.id.action_toggle_search:
            if (searchResultsFragment != null) {
                searchResultsFragment.toggleResultLayout();
                invalidateOptionsMenu();
            }
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case INVITE_CODE:
            break;

    }
}

@Override
protected boolean isActivitySecure() {
    return false;
}

public class MainSectionsPagerAdapter extends FragmentStatePagerAdapter {

    private int NUM_ITEMS = 2;

    public MainSectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

        if (fleeberPrefs.logged().get()) {
            switch (position) {
                case MAP_TAB:
                    searchResultsFragment = new SearchResultsFragment_();
                    if (selectedTab == MAP_TAB) {
                        searchResultsFragment.initMapAfterVisible();
                    }
                    return searchResultsFragment;
                case TIMELINE_TAB:
                    chatsFragment = ChatsFragment_.newInstance(userHelper.getCurrentProfileId(), "", true, timelineType);
                    return chatsFragment;
                default:
                    return null;
            }
        } else {
            searchResultsFragment = new SearchResultsFragment_();
            searchResultsFragment.initMapAfterVisible();
            return searchResultsFragment;
        }
    }

    @Override
    public int getCount() {
        if (fleeberPrefs.logged().get()) {
            return NUM_ITEMS;
        } else {
            return 1;
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "";
    }

}

public class UserInfoReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getStringExtra("type").equals("pic")) {
            profile_image.setImageURI(Uri.parse(fleeberPrefs.userPic().get()));
            chatsFragment.updateProfilePic();
        }

        if (intent.getStringExtra("type").equals("name")) {
            profile_name.setText(fleeberPrefs.username().get());
        }
    }
}

public class PrivateChatsSync extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        updateChatsCount();
    }
}

private class MainLoginReceiver extends LoginReceiver {

    @Override
    public void onLoginSuccess(Intent intent, boolean newUser) {
        if (!intent.getStringExtra("locale").equals("")) {
            FleeberSupportedLocalesHelper.changeLocale(fleeberPrefs, MainActivity.this, intent.getStringExtra("locale"));
        }
        notificationsFragment.userLogged();
        mMainSectionsPagerAdapter.notifyDataSetChanged();
        afterViews();
    }

    @Override
    public void onLoginFail() {

    }

    @Override
    public void onLoginCancelled(boolean needsConfirmation) {

    }
}

public class MessageSentReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getBooleanExtra("start", false)) {
            fab.hide();
        } else {
            fab.show();
        }
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    locationHelper.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

}
`

Any thoughts?

@WonderCsabo
Copy link
Member

This error happens in the calls trace of NavigationMenuPresenter.onRestoreInstanceState. It is hardly related to AA.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants