mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 850600: Part 2: Split RemoteTabs into container and list. r=margaret
This commit is contained in:
parent
a7b7b167e6
commit
426ac12fcd
59
mobile/android/base/RemoteTabsContainer.java
Normal file
59
mobile/android/base/RemoteTabsContainer.java
Normal file
@ -0,0 +1,59 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.gecko;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
/**
|
||||
* Serves as container to wrap the list of synced tabs and provide swipe-to-refresh support. The
|
||||
* only child view should be an instance of {@link RemoteTabsList}.
|
||||
*/
|
||||
public class RemoteTabsContainer extends FrameLayout
|
||||
implements TabsPanel.PanelView {
|
||||
private final Context context;
|
||||
private RemoteTabsList list;
|
||||
|
||||
public RemoteTabsContainer(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addView(View child, int index, ViewGroup.LayoutParams params) {
|
||||
super.addView(child, index, params);
|
||||
|
||||
list = (RemoteTabsList) child;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ViewGroup getLayout() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTabsPanel(TabsPanel panel) {
|
||||
list.setTabsPanel(panel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show() {
|
||||
setVisibility(VISIBLE);
|
||||
TabsAccessor.getTabs(context, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hide() {
|
||||
setVisibility(GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldExpand() {
|
||||
return true;
|
||||
}
|
||||
}
|
@ -16,59 +16,38 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class RemoteTabs extends ExpandableListView
|
||||
implements TabsPanel.PanelView,
|
||||
ExpandableListView.OnGroupClickListener,
|
||||
ExpandableListView.OnChildClickListener,
|
||||
TabsAccessor.OnQueryTabsCompleteListener {
|
||||
private static final String LOGTAG = "GeckoRemoteTabs";
|
||||
|
||||
private Context mContext;
|
||||
private TabsPanel mTabsPanel;
|
||||
|
||||
private static ArrayList <ArrayList <HashMap <String, String>>> mTabsList;
|
||||
|
||||
/**
|
||||
* The actual list of synced tabs. This serves as the only child view of {@link RemoteTabsContainer}
|
||||
* so it can be refreshed using a swipe-to-refresh gesture.
|
||||
*/
|
||||
class RemoteTabsList extends ExpandableListView
|
||||
implements ExpandableListView.OnGroupClickListener,
|
||||
ExpandableListView.OnChildClickListener,
|
||||
TabsAccessor.OnQueryTabsCompleteListener {
|
||||
private static final String[] CLIENT_KEY = new String[] { "name" };
|
||||
private static final String[] TAB_KEY = new String[] { "title", "url" };
|
||||
private static final int[] CLIENT_RESOURCE = new int[] { R.id.client };
|
||||
private static final int[] TAB_RESOURCE = new int[] { R.id.tab, R.id.url };
|
||||
|
||||
public RemoteTabs(Context context, AttributeSet attrs) {
|
||||
private final Context context;
|
||||
private TabsPanel tabsPanel;
|
||||
|
||||
private ArrayList <ArrayList <HashMap <String, String>>> tabsList;
|
||||
|
||||
public RemoteTabsList(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
mContext = context;
|
||||
this.context = context;
|
||||
|
||||
setOnGroupClickListener(this);
|
||||
setOnChildClickListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ViewGroup getLayout() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTabsPanel(TabsPanel panel) {
|
||||
mTabsPanel = panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show() {
|
||||
setVisibility(View.VISIBLE);
|
||||
TabsAccessor.getTabs(mContext, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hide() {
|
||||
setVisibility(View.GONE);
|
||||
tabsPanel = panel;
|
||||
}
|
||||
|
||||
private void autoHidePanel() {
|
||||
mTabsPanel.autoHidePanel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldExpand() {
|
||||
return true;
|
||||
tabsPanel.autoHidePanel();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -79,7 +58,7 @@ public class RemoteTabs extends ExpandableListView
|
||||
|
||||
@Override
|
||||
public boolean onChildClick(ExpandableListView parent, View view, int groupPosition, int childPosition, long id) {
|
||||
HashMap <String, String> tab = mTabsList.get(groupPosition).get(childPosition);
|
||||
HashMap <String, String> tab = tabsList.get(groupPosition).get(childPosition);
|
||||
if (tab == null) {
|
||||
autoHidePanel();
|
||||
return true;
|
||||
@ -95,44 +74,44 @@ public class RemoteTabs extends ExpandableListView
|
||||
ArrayList<TabsAccessor.RemoteTab> remoteTabs = new ArrayList<TabsAccessor.RemoteTab> (remoteTabsList);
|
||||
if (remoteTabs == null || remoteTabs.size() == 0)
|
||||
return;
|
||||
|
||||
|
||||
ArrayList <HashMap <String, String>> clients = new ArrayList <HashMap <String, String>>();
|
||||
|
||||
mTabsList = new ArrayList <ArrayList <HashMap <String, String>>>();
|
||||
tabsList = new ArrayList <ArrayList <HashMap <String, String>>>();
|
||||
|
||||
String oldGuid = null;
|
||||
ArrayList <HashMap <String, String>> tabsForClient = null;
|
||||
HashMap <String, String> client;
|
||||
HashMap <String, String> tab;
|
||||
|
||||
|
||||
for (TabsAccessor.RemoteTab remoteTab : remoteTabs) {
|
||||
if (oldGuid == null || !TextUtils.equals(oldGuid, remoteTab.guid)) {
|
||||
client = new HashMap <String, String>();
|
||||
client.put("name", remoteTab.name);
|
||||
clients.add(client);
|
||||
|
||||
|
||||
tabsForClient = new ArrayList <HashMap <String, String>>();
|
||||
mTabsList.add(tabsForClient);
|
||||
|
||||
tabsList.add(tabsForClient);
|
||||
|
||||
oldGuid = new String(remoteTab.guid);
|
||||
}
|
||||
|
||||
|
||||
tab = new HashMap<String, String>();
|
||||
tab.put("title", TextUtils.isEmpty(remoteTab.title) ? remoteTab.url : remoteTab.title);
|
||||
tab.put("url", remoteTab.url);
|
||||
tabsForClient.add(tab);
|
||||
}
|
||||
|
||||
setAdapter(new SimpleExpandableListAdapter(mContext,
|
||||
|
||||
setAdapter(new SimpleExpandableListAdapter(context,
|
||||
clients,
|
||||
R.layout.remote_tabs_group,
|
||||
CLIENT_KEY,
|
||||
CLIENT_RESOURCE,
|
||||
mTabsList,
|
||||
tabsList,
|
||||
R.layout.remote_tabs_child,
|
||||
TAB_KEY,
|
||||
TAB_RESOURCE));
|
||||
|
||||
|
||||
for (int i = 0; i < clients.size(); i++) {
|
||||
expandGroup(i);
|
||||
}
|
@ -88,13 +88,13 @@ public class TabsPanel extends LinearLayout
|
||||
mHeader = (RelativeLayout) findViewById(R.id.tabs_panel_header);
|
||||
mTabsContainer = (TabsListContainer) findViewById(R.id.tabs_container);
|
||||
|
||||
mPanelNormal = (TabsTray) findViewById(R.id.normal_tabs);
|
||||
mPanelNormal = (PanelView) findViewById(R.id.normal_tabs);
|
||||
mPanelNormal.setTabsPanel(this);
|
||||
|
||||
mPanelPrivate = (TabsTray) findViewById(R.id.private_tabs);
|
||||
mPanelPrivate = (PanelView) findViewById(R.id.private_tabs);
|
||||
mPanelPrivate.setTabsPanel(this);
|
||||
|
||||
mPanelRemote = (RemoteTabs) findViewById(R.id.synced_tabs);
|
||||
mPanelRemote = (PanelView) findViewById(R.id.synced_tabs);
|
||||
mPanelRemote.setTabsPanel(this);
|
||||
|
||||
mFooter = (RelativeLayout) findViewById(R.id.tabs_panel_footer);
|
||||
|
@ -338,7 +338,8 @@ gbjar.sources += [
|
||||
'prompts/TabInput.java',
|
||||
'ReaderModeUtils.java',
|
||||
'ReferrerReceiver.java',
|
||||
'RemoteTabs.java',
|
||||
'RemoteTabsContainer.java',
|
||||
'RemoteTabsList.java',
|
||||
'Restarter.java',
|
||||
'ScrollAnimator.java',
|
||||
'ServiceNotificationClient.java',
|
||||
|
@ -47,14 +47,20 @@
|
||||
android:visibility="gone"
|
||||
gecko:tabs="tabs_private"/>
|
||||
|
||||
<org.mozilla.gecko.RemoteTabs android:id="@+id/synced_tabs"
|
||||
style="@style/RemoteTabsList"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:visibility="gone"
|
||||
android:paddingLeft="@dimen/tabs_panel_list_padding"
|
||||
android:paddingRight="@dimen/tabs_panel_list_padding"
|
||||
android:scrollbarStyle="outsideOverlay"/>
|
||||
<org.mozilla.gecko.RemoteTabsContainer android:id="@+id/synced_tabs"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:visibility="gone">
|
||||
|
||||
<org.mozilla.gecko.RemoteTabsList android:id="@+id/synced_tabs_list"
|
||||
style="@style/RemoteTabsList"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:paddingLeft="@dimen/tabs_panel_list_padding"
|
||||
android:paddingRight="@dimen/tabs_panel_list_padding"
|
||||
android:scrollbarStyle="outsideOverlay"/>
|
||||
|
||||
</org.mozilla.gecko.RemoteTabsContainer>
|
||||
|
||||
</view>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user