Bug 1147064 - Abstract out shared doorhanger layout. r=margaret

--HG--
rename : mobile/android/base/resources/layout/doorhanger.xml => mobile/android/base/resources/layout/default_doorhanger.xml
extra : rebase_source : 3d2547b501a7f69cef6585549d97f85e36bb444d
This commit is contained in:
Chenxia Liu 2015-05-27 15:48:17 -07:00
Родитель 1feb4346f0
Коммит 61e89877b0
6 изменённых файлов: 130 добавлений и 123 удалений

Просмотреть файл

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView android:id="@+id/doorhanger_message"
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.DoorHanger.Medium"/>
<LinearLayout android:id="@+id/doorhanger_inputs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="@dimen/doorhanger_section_padding_small"
android:gravity="right"
android:visibility="gone"/>
<CheckBox android:id="@+id/doorhanger_checkbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/doorhanger_section_padding_small"
android:checked="true"
android:textColor="@color/placeholder_active_grey"
android:visibility="gone"/>
</LinearLayout>
</merge>

Просмотреть файл

@ -5,40 +5,24 @@
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:layout_width="wrap_content"
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="@dimen/doorhanger_padding">
<ImageView android:id="@+id/doorhanger_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="@dimen/doorhanger_padding"
android:layout_width="@dimen/doorhanger_icon_size"
android:layout_height="@dimen/doorhanger_icon_size"
android:layout_gravity="center_horizontal"
android:paddingRight="@dimen/doorhanger_section_padding_small"
android:visibility="gone"/>
<TextView android:id="@+id/doorhanger_message"
android:focusable="true"
<ViewStub android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.DoorHanger.Medium"/>
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout android:id="@+id/doorhanger_inputs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="right"
android:paddingLeft="@dimen/doorhanger_padding"
android:visibility="gone"/>
<CheckBox android:id="@+id/doorhanger_checkbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:textColor="@color/placeholder_active_grey"
android:visibility="gone"/>
<View android:id="@+id/divider_buttons"
android:layout_width="match_parent"
android:layout_height="1dp"

Просмотреть файл

@ -5,64 +5,31 @@
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:layout_width="wrap_content"
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="@dimen/doorhanger_section_padding_small"
android:paddingLeft="@dimen/doorhanger_section_padding_small">
android:orientation="vertical">
<ImageView android:id="@+id/doorhanger_icon"
android:layout_width="@dimen/doorhanger_icon_size"
android:layout_height="@dimen/doorhanger_icon_size"
android:layout_gravity="center_horizontal"
android:paddingRight="@dimen/doorhanger_section_padding_small"
android:src="@drawable/icon_key"/>
<TextView android:id="@+id/doorhanger_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/doorhanger_section_padding_small"
android:textAppearance="@style/TextAppearance.DoorHanger.Medium.Light"/>
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView android:id="@+id/doorhanger_message"
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/doorhanger_section_padding_large"
android:textAppearance="@style/TextAppearance.DoorHanger.Medium"/>
<TextView android:id="@+id/doorhanger_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/doorhanger_section_padding_small"
android:textAppearance="@style/TextAppearance.DoorHanger.Medium.Light"/>
<TextView android:id="@+id/doorhanger_message"
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/doorhanger_section_padding_large"
android:textAppearance="@style/TextAppearance.DoorHanger.Medium"/>
<TextView android:id="@+id/doorhanger_link"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.DoorHanger.Medium"
android:textColor="@color/link_blue"
android:paddingBottom="@dimen/doorhanger_section_padding_large"
android:visibility="gone"/>
</LinearLayout>
<TextView android:id="@+id/doorhanger_link"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.DoorHanger.Medium"
android:textColor="@color/link_blue"
android:layout_marginBottom="@dimen/doorhanger_section_padding_large"
android:visibility="gone"/>
</LinearLayout>
<View android:id="@+id/divider_buttons"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/divider_light"
android:visibility="gone"/>
<LinearLayout android:id="@+id/doorhanger_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="gone"/>
<View android:id="@+id/divider_doorhanger"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/divider_light"
android:visibility="gone"/>
</merge>

Просмотреть файл

@ -5,9 +5,17 @@
package org.mozilla.gecko.widget;
import android.text.Html;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
import android.text.style.URLSpan;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import org.mozilla.gecko.R;
import org.mozilla.gecko.Tabs;
import org.mozilla.gecko.prompts.PromptInput;
import org.json.JSONArray;
@ -29,12 +37,15 @@ public class DefaultDoorHanger extends DoorHanger {
private static int sSpinnerTextColor = -1;
private final TextView mMessage;
private List<PromptInput> mInputs;
private CheckBox mCheckBox;
public DefaultDoorHanger(Context context, DoorhangerConfig config, Type type) {
super(context, config, type);
mMessage = (TextView) findViewById(R.id.doorhanger_message);
if (sSpinnerTextColor == -1) {
sSpinnerTextColor = mResources.getColor(R.color.text_color_primary_disable_only);
}
@ -61,6 +72,11 @@ public class DefaultDoorHanger extends DoorHanger {
setButtons(config);
}
@Override
protected int getContentResource() {
return R.layout.default_doorhanger;
}
private List<PromptInput> getInputs() {
return mInputs;
}
@ -154,6 +170,30 @@ public class DefaultDoorHanger extends DoorHanger {
};
}
private void setMessage(String message) {
Spanned markupMessage = Html.fromHtml(message);
mMessage.setText(markupMessage);
}
private void addLink(String label, String url, String delimiter) {
String title = mMessage.getText().toString();
SpannableString titleWithLink = new SpannableString(title + delimiter + label);
URLSpan linkSpan = new URLSpan(url) {
@Override
public void onClick(View view) {
Tabs.getInstance().loadUrlInTab(getURL());
}
};
// Prevent text outside the link from flashing when clicked.
ForegroundColorSpan colorSpan = new ForegroundColorSpan(mMessage.getCurrentTextColor());
titleWithLink.setSpan(colorSpan, 0, title.length(), 0);
titleWithLink.setSpan(linkSpan, title.length() + 1, titleWithLink.length(), 0);
mMessage.setText(titleWithLink);
mMessage.setMovementMethod(LinkMovementMethod.getInstance());
}
private void styleInput(PromptInput input, View view) {
if (input instanceof PromptInput.MenulistInput) {
styleDropdownInputs(input, view);

Просмотреть файл

@ -7,24 +7,17 @@ package org.mozilla.gecko.widget;
import android.content.Context;
import android.content.res.Resources;
import android.text.Html;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
import android.text.style.URLSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewStub;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.mozilla.gecko.R;
import org.mozilla.gecko.Tabs;
public abstract class DoorHanger extends LinearLayout {
@ -67,8 +60,7 @@ public abstract class DoorHanger extends LinearLayout {
protected final Type mType;
private final ImageView mIcon;
private final TextView mMessage;
protected final ImageView mIcon;
protected final Context mContext;
protected final Resources mResources;
@ -81,34 +73,30 @@ public abstract class DoorHanger extends LinearLayout {
protected DoorHanger(Context context, DoorhangerConfig config, Type type) {
super(context);
mContext = context;
mResources = context.getResources();
mTabId = config.getTabId();
mIdentifier = config.getId();
mType = type;
int resource;
switch (type) {
case LOGIN:
resource = R.layout.login_doorhanger;
break;
default:
resource = R.layout.doorhanger;
}
setOrientation(VERTICAL);
final ViewStub contentStub = (ViewStub) findViewById(R.id.content);
contentStub.setLayoutResource(getContentResource());
contentStub.inflate();
LayoutInflater.from(context).inflate(resource, this);
mDivider = findViewById(R.id.divider_doorhanger);
mIcon = (ImageView) findViewById(R.id.doorhanger_icon);
mMessage = (TextView) findViewById(R.id.doorhanger_message);
mType = type;
mButtonsContainer = (LinearLayout) findViewById(R.id.doorhanger_buttons);
mOnButtonClickListener = config.getButtonClickListener();
mDividerColor = mResources.getColor(R.color.divider_light);
setOrientation(VERTICAL);
}
protected abstract int getContentResource();
protected abstract void loadConfig(DoorhangerConfig config);
protected void setOptions(final JSONObject options) {
@ -160,30 +148,6 @@ public abstract class DoorHanger extends LinearLayout {
mIcon.setVisibility(View.VISIBLE);
}
protected void setMessage(String message) {
Spanned markupMessage = Html.fromHtml(message);
mMessage.setText(markupMessage);
}
protected void addLink(String label, String url, String delimiter) {
String title = mMessage.getText().toString();
SpannableString titleWithLink = new SpannableString(title + delimiter + label);
URLSpan linkSpan = new URLSpan(url) {
@Override
public void onClick(View view) {
Tabs.getInstance().loadUrlInTab(getURL());
}
};
// Prevent text outside the link from flashing when clicked.
ForegroundColorSpan colorSpan = new ForegroundColorSpan(mMessage.getCurrentTextColor());
titleWithLink.setSpan(colorSpan, 0, title.length(), 0);
titleWithLink.setSpan(linkSpan, title.length() + 1, titleWithLink.length(), 0);
mMessage.setText(titleWithLink);
mMessage.setMovementMethod(LinkMovementMethod.getInstance());
}
/**
* Creates and adds a button into the DoorHanger.
* @param text Button text

Просмотреть файл

@ -13,6 +13,8 @@ import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.text.Html;
import android.text.Spanned;
import android.text.method.PasswordTransformationMethod;
import android.util.Log;
import android.view.LayoutInflater;
@ -38,6 +40,7 @@ public class LoginDoorHanger extends DoorHanger {
private enum ActionType { EDIT, SELECT }
private final TextView mTitle;
private final TextView mMessage;
private final TextView mLink;
private int mCallbackID;
@ -45,11 +48,19 @@ public class LoginDoorHanger extends DoorHanger {
super(context, config, Type.LOGIN);
mTitle = (TextView) findViewById(R.id.doorhanger_title);
mMessage = (TextView) findViewById(R.id.doorhanger_message);
mLink = (TextView) findViewById(R.id.doorhanger_link);
mIcon.setImageResource(R.drawable.icon_key);
mIcon.setVisibility(View.VISIBLE);
loadConfig(config);
}
private void setMessage(String message) {
Spanned markupMessage = Html.fromHtml(message);
mMessage.setText(markupMessage);
}
@Override
protected void loadConfig(DoorhangerConfig config) {
setOptions(config.getOptions());
@ -57,6 +68,11 @@ public class LoginDoorHanger extends DoorHanger {
setButtons(config);
}
@Override
protected int getContentResource() {
return R.layout.login_doorhanger;
}
@Override
protected void setOptions(final JSONObject options) {
super.setOptions(options);