diff --git a/mobile/android/base/resources/layout-large-land-v11/tabs_panel.xml b/mobile/android/base/resources/layout-large-land-v11/tabs_panel.xml index 80f34c2f6ae..e0957278ef2 100644 --- a/mobile/android/base/resources/layout-large-land-v11/tabs_panel.xml +++ b/mobile/android/base/resources/layout-large-land-v11/tabs_panel.xml @@ -46,11 +46,10 @@ android:layout_height="match_parent" android:visibility="gone"/> - + diff --git a/mobile/android/base/resources/layout/remote_tabs_panel_view.xml b/mobile/android/base/resources/layout/remote_tabs_panel_view.xml new file mode 100644 index 00000000000..aacb7b6df07 --- /dev/null +++ b/mobile/android/base/resources/layout/remote_tabs_panel_view.xml @@ -0,0 +1,9 @@ + + + + diff --git a/mobile/android/base/resources/layout/tabs_panel.xml b/mobile/android/base/resources/layout/tabs_panel.xml index 4a481c0f367..68e5a655bb5 100644 --- a/mobile/android/base/resources/layout/tabs_panel.xml +++ b/mobile/android/base/resources/layout/tabs_panel.xml @@ -45,11 +45,10 @@ android:layout_height="match_parent" android:visibility="gone"/> - + diff --git a/mobile/android/base/tabs/TabsPanel.java b/mobile/android/base/tabs/TabsPanel.java index 33fa3860b54..612ae83f3d3 100644 --- a/mobile/android/base/tabs/TabsPanel.java +++ b/mobile/android/base/tabs/TabsPanel.java @@ -32,6 +32,7 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.ViewStub; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageButton; @@ -113,7 +114,7 @@ public class TabsPanel extends LinearLayout public void onResume() { if (mPanel == mPanelRemote) { // Refresh the remote panel. - mPanelRemote.show(); + getRemotePanelView().show(); } } @@ -127,7 +128,23 @@ public class TabsPanel extends LinearLayout }; } + /** + * Initializes views in tabs_panel layout + * + * @throws IllegalStateException + * mCurrentPanel must have a non-null value + */ private void initialize() { + if (mCurrentPanel == null) { + throw new IllegalStateException( + "mCurrentPanel cannot be null in order for RemotePanelView to be initialized"); + } + + if (mCurrentPanel == Panel.REMOTE_TABS) { + // Initializes mPanelRemote + getRemotePanelView(); + } + mHeader = (RelativeLayout) findViewById(R.id.tabs_panel_header); mTabsContainer = (TabsListContainer) findViewById(R.id.tabs_container); @@ -137,9 +154,6 @@ public class TabsPanel extends LinearLayout mPanelPrivate = (PanelView) findViewById(R.id.private_tabs_panel); mPanelPrivate.setTabsPanel(this); - mPanelRemote = (PanelView) findViewById(R.id.remote_tabs); - mPanelRemote.setTabsPanel(this); - mFooter = (RelativeLayout) findViewById(R.id.tabs_panel_footer); mAddTab = (ImageButton) findViewById(R.id.add_tab); @@ -416,7 +430,7 @@ public class TabsPanel extends LinearLayout mPanel = mPanelPrivate; break; case REMOTE_TABS: - mPanel = mPanelRemote; + mPanel = getRemotePanelView(); break; default: @@ -472,6 +486,9 @@ public class TabsPanel extends LinearLayout public void refresh() { removeAllViews(); + // The View that mPanelRemote points to is invalidated because the layout is invalidated. + // mPanelRemote must be null in order to properly initialize RemotePanelView. + mPanelRemote = null; LayoutInflater.from(mContext).inflate(R.layout.tabs_panel, this); initialize(); @@ -570,4 +587,18 @@ public class TabsPanel extends LinearLayout public void setIconDrawable(Panel panel, int resource) { mTabWidget.setIconDrawable(panel.ordinal(), resource); } + + /** + * Initializes mPanelRemote if necessary and provides getter because you + * should probably not access mPanelRemote directly + * + * @return PanelView + */ + private PanelView getRemotePanelView() { + if (mPanelRemote == null) { + mPanelRemote = (PanelView) ((ViewStub) findViewById(R.id.remote_tabs_panel_stub)).inflate(); + mPanelRemote.setTabsPanel(TabsPanel.this); + } + return mPanelRemote; + } }