Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 79ef0887 authored by Wenyi Wang's avatar Wenyi Wang
Browse files

Don't wait for drawer is idle to switch view

- Make Settings a special case because it's an activity
  that may cause janky animation.
- Help&feedback is also an activity but it's not opened
  right away so it's fine.

Bug: 32917299

Test: manual:
      1. With TalkBack on, verify the bug doesn't repro.
      2. Navigate b/w fragments

Change-Id: I09cb7a90a9e787a257114494a881c8305f71b2c0
parent e6493181
Loading
Loading
Loading
Loading
+29 −50
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.os.Handler;
import android.provider.ContactsContract.Intents;
import android.support.annotation.LayoutRes;
import android.support.design.widget.NavigationView;
@@ -112,11 +113,11 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i
    private static final String KEY_NEW_GROUP_ACCOUNT = "newGroupAccount";
    private static final String KEY_CONTACTS_VIEW = "contactsView";

    private static final long DRAWER_CLOSE_DELAY = 300L;

    protected ContactsView mCurrentView;

    private class ContactsActionBarDrawerToggle extends ActionBarDrawerToggle {

        private Runnable mRunnable;
        private boolean mMenuClickedBefore = SharedPreferenceUtil.getHamburgerMenuClickedBefore(
                ContactsDrawerActivity.this);

@@ -177,16 +178,8 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i
            if (newState != DrawerLayout.STATE_IDLE) {
                updateStatusBarBackground();
            }
            if (mRunnable != null && newState == DrawerLayout.STATE_IDLE) {
                mRunnable.run();
                mRunnable = null;
            }
            initializeAssistantNewBadge();
        }

        public void runWhenIdle(Runnable runnable) {
            mRunnable = runnable;
        }
    }

    protected ContactListFilterController mContactListFilterController;
@@ -437,14 +430,9 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i
                menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        mToggle.runWhenIdle(new Runnable() {
                            @Override
                            public void run() {
                        onGroupMenuItemClicked(groupListItem.getGroupId(),
                                groupListItem.getTitle());
                        updateMenuSelection(menuItem);
                            }
                        });
                        mDrawer.closeDrawer(GravityCompat.START);
                        return true;
                    }
@@ -464,12 +452,7 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i
        menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                mToggle.runWhenIdle(new Runnable() {
                    @Override
                    public void run() {
                onCreateGroupMenuItemClicked();
                    }
                });
                mDrawer.closeDrawer(GravityCompat.START);
                return true;
            }
@@ -562,13 +545,8 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i
            menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    mToggle.runWhenIdle(new Runnable() {
                        @Override
                        public void run() {
                    onFilterMenuItemClicked(intent);
                    updateMenuSelection(menuItem);
                        }
                    });
                    mDrawer.closeDrawer(GravityCompat.START);
                    return true;
                }
@@ -614,11 +592,14 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i
    @Override
    public boolean onNavigationItemSelected(final MenuItem item) {
        final int id = item.getItemId();
        mToggle.runWhenIdle(new Runnable() {

        if (id == R.id.nav_settings) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                if (id == R.id.nav_settings) {
                    startActivity(createPreferenceIntent());
                }
            }, DRAWER_CLOSE_DELAY);
        } else if (id == R.id.nav_help) {
            HelpUtils.launchHelpAndFeedbackForMainScreen(ContactsDrawerActivity.this);
        } else if (id == R.id.nav_all_contacts) {
@@ -634,8 +615,6 @@ public abstract class ContactsDrawerActivity extends AppCompatContactsActivity i
        } else {
            Log.w(TAG, "Unhandled navigation view item selection");
        }
            }
        });

        mDrawer.closeDrawer(GravityCompat.START);
        return true;