diff --git a/embedding/android/GeckoApp.java b/embedding/android/GeckoApp.java index 5f8bd07f7ba..ed5cb19d3bb 100644 --- a/embedding/android/GeckoApp.java +++ b/embedding/android/GeckoApp.java @@ -122,7 +122,7 @@ abstract public class GeckoApp private Vector mPluginViews = new Vector(); public interface OnTabsChangedListener { - public void onTabsChanged(); + public void onTabsChanged(Tab tab); } private static ArrayList mTabsChangedListeners; @@ -574,7 +574,7 @@ abstract public class GeckoApp if (Tabs.getInstance().isSelectedTab(tab)) mBrowserToolbar.setFavicon(tab.getFavicon()); - onTabsChanged(); + onTabsChanged(tab); } }); } @@ -657,13 +657,13 @@ abstract public class GeckoApp mTabsChangedListeners.remove(listener); } - public void onTabsChanged() { + public void onTabsChanged(Tab tab) { if (mTabsChangedListeners == null) return; Iterator items = mTabsChangedListeners.iterator(); while (items.hasNext()) { - ((OnTabsChangedListener) items.next()).onTabsChanged(); + ((OnTabsChangedListener) items.next()).onTabsChanged(tab); } } @@ -870,7 +870,7 @@ abstract public class GeckoApp mMainHandler.post(new Runnable() { public void run() { if (selected && Tabs.getInstance().isSelectedTab(tab)) { - onTabsChanged(); + onTabsChanged(tab); mDoorHangerPopup.updatePopup(); } mBrowserToolbar.updateTabs(Tabs.getInstance().getCount()); @@ -885,7 +885,7 @@ abstract public class GeckoApp mMainHandler.post(new Runnable() { public void run() { - onTabsChanged(); + onTabsChanged(tab); mBrowserToolbar.updateTabs(Tabs.getInstance().getCount()); mDoorHangerPopup.updatePopup(); } @@ -924,7 +924,7 @@ abstract public class GeckoApp mBrowserToolbar.setSecurityMode(tab.getSecurityMode()); mBrowserToolbar.setProgressVisibility(true); } - onTabsChanged(); + onTabsChanged(tab); } }); } @@ -940,7 +940,7 @@ abstract public class GeckoApp public void run() { if (Tabs.getInstance().isSelectedTab(tab)) mBrowserToolbar.setProgressVisibility(false); - onTabsChanged(); + onTabsChanged(tab); } }); } @@ -970,7 +970,7 @@ abstract public class GeckoApp public void run() { if (Tabs.getInstance().isSelectedTab(tab)) mBrowserToolbar.setTitle(tab.getDisplayTitle()); - onTabsChanged(); + onTabsChanged(tab); } }); } @@ -986,7 +986,7 @@ abstract public class GeckoApp public void run() { if (Tabs.getInstance().isSelectedTab(tab)) mBrowserToolbar.setTitle(tab.getDisplayTitle()); - onTabsChanged(); + onTabsChanged(tab); } }); } diff --git a/embedding/android/TabsTray.java b/embedding/android/TabsTray.java index a1304cc56de..65ceb8210ee 100644 --- a/embedding/android/TabsTray.java +++ b/embedding/android/TabsTray.java @@ -97,7 +97,7 @@ public class TabsTray extends Activity implements GeckoApp.OnTabsChangedListener }); GeckoApp.registerOnTabsChangedListener(this); - onTabsChanged(); + onTabsChanged(null); } @Override @@ -117,12 +117,27 @@ public class TabsTray extends Activity implements GeckoApp.OnTabsChangedListener } } - public void onTabsChanged() { + public void onTabsChanged(Tab tab) { if (Tabs.getInstance().getCount() == 1) finishActivity(); - mTabsAdapter = new TabsAdapter(this, Tabs.getInstance().getTabsInOrder()); - mList.setAdapter(mTabsAdapter); + if (mTabsAdapter == null) { + mTabsAdapter = new TabsAdapter(this, Tabs.getInstance().getTabsInOrder()); + mList.setAdapter(mTabsAdapter); + return; + } + + int position = mTabsAdapter.getPositionForTab(tab); + if (position == -1) + return; + + if (Tabs.getInstance().getIndexOf(tab) == -1) { + mTabsAdapter = new TabsAdapter(this, Tabs.getInstance().getTabsInOrder()); + mList.setAdapter(mTabsAdapter); + } else { + View view = mList.getChildAt(position - mList.getFirstVisiblePosition()); + mTabsAdapter.assignValues(view, tab); + } } void finishActivity() { @@ -164,6 +179,25 @@ public class TabsTray extends Activity implements GeckoApp.OnTabsChangedListener return mTabs.indexOf(tab); } + public void assignValues(View view, Tab tab) { + if (view == null || tab == null) + return; + + ImageView favicon = (ImageView) view.findViewById(R.id.favicon); + + Drawable faviconImage = tab.getFavicon(); + if (faviconImage != null) + favicon.setImageDrawable(faviconImage); + else + favicon.setImageResource(R.drawable.favicon); + + TextView title = (TextView) view.findViewById(R.id.title); + title.setText(tab.getDisplayTitle()); + + if (Tabs.getInstance().isSelectedTab(tab)) + title.setTypeface(title.getTypeface(), Typeface.BOLD); + } + @Override public View getView(int position, View convertView, ViewGroup parent) { @@ -180,19 +214,7 @@ public class TabsTray extends Activity implements GeckoApp.OnTabsChangedListener } }); - ImageView favicon = (ImageView) convertView.findViewById(R.id.favicon); - - Drawable faviconImage = tab.getFavicon(); - if (faviconImage != null) - favicon.setImageDrawable(faviconImage); - else - favicon.setImageResource(R.drawable.favicon); - - TextView title = (TextView) convertView.findViewById(R.id.title); - title.setText(tab.getDisplayTitle()); - - if (Tabs.getInstance().isSelectedTab(tab)) - title.setTypeface(title.getTypeface(), Typeface.BOLD); + assignValues(convertView, tab); ImageButton close = (ImageButton) convertView.findViewById(R.id.close); if (mTabs.size() > 1) {