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

Commit f5cf4c33 authored by James Lemieux's avatar James Lemieux Committed by android-build-merger
Browse files

Avoid jank in the tabs from a cold open

am: 84006e23

* commit '84006e23':
  Avoid jank in the tabs from a cold open
parents a9489547 84006e23
Loading
Loading
Loading
Loading
+23 −19
Original line number Diff line number Diff line
@@ -17,26 +17,30 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <group android:id="@+id/menu_items">
        <item android:id="@+id/menu_item_search"
            android:title="@android:string/search_go"
        <item
            android:id="@+id/menu_item_search"
            android:icon="@android:drawable/ic_menu_search"
            android:imeOptions="actionSearch"
            android:orderInCategory="1"
            app:showAsAction="ifRoom"
            app:actionViewClass="android.support.v7.widget.SearchView" />
        <item android:id="@+id/menu_item_sort"
            android:title="@android:string/search_go"
            android:visible="false"
            app:actionViewClass="android.support.v7.widget.SearchView"
            app:showAsAction="ifRoom"/>
        <item
            android:id="@+id/menu_item_sort"
            android:title="@string/menu_item_sort_by_gmt_offset"
            app:showAsAction="never"/>
        <item android:id="@+id/menu_item_night_mode"
            android:title="@string/menu_item_night_mode"
            android:icon="@android:drawable/ic_menu_preferences"/>
        <item android:id="@+id/menu_item_settings"
            android:title="@string/menu_item_settings"
            android:icon="@android:drawable/ic_menu_preferences"/>
        <item android:id="@+id/menu_item_help"
            android:title="@string/menu_item_help"
            android:icon="@android:drawable/ic_menu_preferences"/>
        <item
            android:id="@+id/menu_item_night_mode"
            android:icon="@android:drawable/ic_menu_preferences"
            android:title="@string/menu_item_night_mode"/>
        <item
            android:id="@+id/menu_item_settings"
            android:icon="@android:drawable/ic_menu_preferences"
            android:title="@string/menu_item_settings"/>
        <item
            android:id="@+id/menu_item_help"
            android:icon="@android:drawable/ic_menu_preferences"
            android:title="@string/menu_item_help"/>
    </group>
</menu>
 No newline at end of file

+53 −49
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ public class DeskClock extends BaseActivity
        // not the most recent launch was via a dock event
        setIntent(newIntent);

        // Timer receiver may ask to go to the timers fragment if a timer expired.
        // Honor the tab requested by the intent, if any.
        int tab = newIntent.getIntExtra(SELECT_TAB_INTENT_EXTRA, -1);
        if (tab != -1 && mTabLayout != null) {
            mTabLayout.getTabAt(tab).select();
@@ -108,45 +108,6 @@ public class DeskClock extends BaseActivity
        }
    }

    private void initViews() {
        setContentView(R.layout.desk_clock);
        setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
        mTabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
        mFab = (ImageView) findViewById(R.id.fab);
        mLeftButton = (ImageButton) findViewById(R.id.left_button);
        mRightButton = (ImageButton) findViewById(R.id.right_button);
        if (mTabsAdapter == null) {
            mViewPager = (RtlViewPager) findViewById(R.id.desk_clock_pager);
            // Keep all four tabs to minimize jank.
            mViewPager.setOffscreenPageLimit(3);
            // Set Accessibility Delegate to null so ViewPager doesn't intercept movements and
            // prevent the fab from being selected.
            mViewPager.setAccessibilityDelegate(null);
            mTabsAdapter = new TabsAdapter(this, mViewPager);
            createTabs();
            mTabLayout.setOnTabSelectedListener(new ViewPagerOnTabSelectedListener(mViewPager));
        }

        mFab.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                getSelectedFragment().onFabClick(view);
            }
        });
        mLeftButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                getSelectedFragment().onLeftButtonClick(view);
            }
        });
        mRightButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                getSelectedFragment().onRightButtonClick(view);
            }
        });
    }

    @VisibleForTesting
    DeskClockFragment getSelectedFragment() {
        return (DeskClockFragment) mTabsAdapter.getItem(mSelectedTab);
@@ -178,10 +139,6 @@ public class DeskClock extends BaseActivity
    @Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        mActionBarMenuManager.addMenuItemController(new SettingMenuItemController(this))
                .addMenuItemController(MenuItemControllerFactory.getInstance()
                        .buildMenuItemControllers(this))
                .addMenuItemController(nightModeMenuItemController);
        setVolumeControlStream(AudioManager.STREAM_ALARM);

        if (icicle != null) {
@@ -195,15 +152,62 @@ public class DeskClock extends BaseActivity
                    false /* animate */);
        }

        // Timer receiver may ask the app to go to the timer fragment if a timer expired
        Intent i = getIntent();
        if (i != null) {
            int tab = i.getIntExtra(SELECT_TAB_INTENT_EXTRA, -1);
        // Honor the tab requested by the intent, if any.
        final Intent intent = getIntent();
        if (intent != null) {
            int tab = intent.getIntExtra(SELECT_TAB_INTENT_EXTRA, -1);
            if (tab != -1) {
                mSelectedTab = tab;
            }
        }
        initViews();

        setContentView(R.layout.desk_clock);
        final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        mTabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
        mFab = (ImageView) findViewById(R.id.fab);
        mLeftButton = (ImageButton) findViewById(R.id.left_button);
        mRightButton = (ImageButton) findViewById(R.id.right_button);
        if (mTabsAdapter == null) {
            mViewPager = (RtlViewPager) findViewById(R.id.desk_clock_pager);
            // Keep all four tabs to minimize jank.
            mViewPager.setOffscreenPageLimit(3);
            // Set Accessibility Delegate to null so ViewPager doesn't intercept movements and
            // prevent the fab from being selected.
            mViewPager.setAccessibilityDelegate(null);
            mTabsAdapter = new TabsAdapter(this, mViewPager);
            createTabs();
            mTabLayout.setOnTabSelectedListener(new ViewPagerOnTabSelectedListener(mViewPager));
        }

        mFab.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                getSelectedFragment().onFabClick(view);
            }
        });
        mLeftButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                getSelectedFragment().onLeftButtonClick(view);
            }
        });
        mRightButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                getSelectedFragment().onRightButtonClick(view);
            }
        });

        // Configure the menu item controllers.
        mActionBarMenuManager.addMenuItemController(new SettingMenuItemController(this))
                .addMenuItemController(MenuItemControllerFactory.getInstance()
                        .buildMenuItemControllers(this))
                .addMenuItemController(nightModeMenuItemController);

        // Inflate the menu during creation to avoid a double layout pass. Otherwise, the menu
        // inflation occurs *after* the initial draw and a second layout pass adds in the menu.
        onCreateOptionsMenu(toolbar.getMenu());

        // We need to update the system next alarm time on app startup because the
        // user might have clear our data.