Merge "HCE: Latest UX and strings." into klp-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 49e8977..653290d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1621,15 +1621,10 @@
android:resource="@id/nfc_payment_settings" />
</activity>
<activity android:name=".nfc.PaymentDefaultDialog"
- android:label="@string/nfc_payment_set_default"
+ android:label="@string/nfc_payment_set_default_label"
android:excludeFromRecents="true"
android:theme="@*android:style/Theme.Holo.Light.Dialog.Alert">
<intent-filter>
- <!-- TODO this filter can be removed -->
- <action android:name="android.nfc.cardemulation.ACTION_CHANGE_DEFAULT" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <intent-filter>
<action android:name="android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
diff --git a/res/drawable-hdpi/nfc_payment_empty_state.png b/res/drawable-hdpi/nfc_payment_empty_state.png
new file mode 100644
index 0000000..69b22f2
--- /dev/null
+++ b/res/drawable-hdpi/nfc_payment_empty_state.png
Binary files differ
diff --git a/res/drawable-mdpi/nfc_payment_empty_state.png b/res/drawable-mdpi/nfc_payment_empty_state.png
new file mode 100644
index 0000000..1ab7187
--- /dev/null
+++ b/res/drawable-mdpi/nfc_payment_empty_state.png
Binary files differ
diff --git a/res/drawable-xhdpi/nfc_payment_empty_state.png b/res/drawable-xhdpi/nfc_payment_empty_state.png
new file mode 100644
index 0000000..3951c82
--- /dev/null
+++ b/res/drawable-xhdpi/nfc_payment_empty_state.png
Binary files differ
diff --git a/res/drawable-xxhdpi/nfc_payment_empty_state.png b/res/drawable-xxhdpi/nfc_payment_empty_state.png
new file mode 100644
index 0000000..914021a
--- /dev/null
+++ b/res/drawable-xxhdpi/nfc_payment_empty_state.png
Binary files differ
diff --git a/res/layout/nfc_payment.xml b/res/layout/nfc_payment.xml
new file mode 100644
index 0000000..92fe86f
--- /dev/null
+++ b/res/layout/nfc_payment.xml
@@ -0,0 +1,33 @@
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical"
+ android:orientation="vertical" >
+ <TextView
+ android:id="@+id/nfc_payment_empty_text"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:textSize="24sp"
+ android:visibility="gone"
+ android:paddingBottom="16dp"
+ android:text="@string/nfc_payment_no_apps"/>
+ <ImageView
+ android:id="@+id/nfc_payment_tap_image"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:visibility="gone"
+ android:src="@drawable/nfc_payment_empty_state"/>
+ </LinearLayout>
+ <ListView
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginTop="5dp" />
+
+</FrameLayout>
diff --git a/res/layout/nfc_payment_option.xml b/res/layout/nfc_payment_option.xml
index 122e041..04fdc07 100644
--- a/res/layout/nfc_payment_option.xml
+++ b/res/layout/nfc_payment_option.xml
@@ -13,7 +13,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
@@ -21,53 +21,24 @@
android:focusable="true"
android:clickable="true"
android:gravity="center_vertical"
+ android:paddingTop="10dp"
+ android:paddingBottom="10dp"
android:minHeight="?android:attr/listPreferredItemHeight"
android:background="?android:attr/selectableItemBackground">
- <LinearLayout
+ <FrameLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:minWidth="@*android:dimen/preference_icon_minWidth"
android:orientation="horizontal">
<ImageView
- android:id="@+android:id/icon"
- android:layout_width="48dp"
- android:layout_height="48dp"
+ android:id="@+id/banner"
android:layout_gravity="center"
- android:minWidth="48dp"
+ android:layout_width="wrap_content"
+ android:layout_height="96dp"
android:scaleType="centerInside"
- android:layout_marginEnd="@*android:dimen/preference_item_padding_inner"
/>
- </LinearLayout>
- <RelativeLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="6dip"
- android:layout_marginTop="6dip"
- android:layout_marginBottom="6dip"
- android:layout_weight="1">
- <TextView
- android:id="@+android:id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"/>
- <TextView
- android:id="@android:id/summary"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@android:id/title"
- android:layout_alignStart="@android:id/title"
- android:paddingBottom="3dip"
- android:visibility="gone"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textSize="13sp"
- android:textColor="?android:attr/textColorSecondary"
- android:focusable="false"
- android:maxLines="4" />
- </RelativeLayout>
+ </FrameLayout>
<RadioButton
android:id="@android:id/button1"
android:layout_width="wrap_content"
@@ -77,4 +48,4 @@
android:duplicateParentState="true"
android:clickable="false"
android:focusable="false" />
-</LinearLayout>
+</RelativeLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 492697d..d316609 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4678,13 +4678,13 @@
<!-- NFC payment settings --><skip/>
<string name="nfc_payment_settings_title">Payments</string>
- <!-- Option to tell Android to ask the user which payment app to use every time
- a payment terminal is tapped -->
- <string name="nfc_payment_ask">Ask every time</string>
+ <!-- String shown when there are no NFC payment applications installed -->
+ <string name="nfc_payment_no_apps">DO NOT TRANSLATE ME</string>
<!-- Label for the dialog that is shown when the user is asked to set a
preferred payment application -->
- <string name="nfc_payment_set_default">Set as your preference?</string>
-
+ <string name="nfc_payment_set_default_label">Set as your preference?</string>
+ <string name="nfc_payment_set_default">Always use <xliff:g id="app">%1$s</xliff:g> when you tap and pay?</string>
+ <string name="nfc_payment_set_default_instead_of">Always use <xliff:g id="app">%1$s</xliff:g> instead of <xliff:g id="app">%2$s</xliff:g> when you tap and pay?</string>
<!-- Restrictions settings --><skip/>
<!-- Restriction settings title [CHAR LIMIT=35] -->
diff --git a/src/com/android/settings/nfc/PaymentBackend.java b/src/com/android/settings/nfc/PaymentBackend.java
index e2f110f..59f4ddf 100644
--- a/src/com/android/settings/nfc/PaymentBackend.java
+++ b/src/com/android/settings/nfc/PaymentBackend.java
@@ -33,7 +33,7 @@
public static class PaymentAppInfo {
CharSequence caption;
- Drawable icon;
+ Drawable banner;
boolean isDefault;
public ComponentName componentName;
}
@@ -62,7 +62,7 @@
for (ApduServiceInfo service : serviceInfos) {
PaymentAppInfo appInfo = new PaymentAppInfo();
appInfo.caption = service.loadLabel(pm);
- appInfo.icon = service.loadIcon(pm);
+ appInfo.banner = service.loadBanner(pm);
appInfo.isDefault = service.getComponent().equals(defaultApp);
appInfo.componentName = service.getComponent();
appInfos.add(appInfo);
diff --git a/src/com/android/settings/nfc/PaymentDefaultDialog.java b/src/com/android/settings/nfc/PaymentDefaultDialog.java
index ae2f4c1..538af2e 100644
--- a/src/com/android/settings/nfc/PaymentDefaultDialog.java
+++ b/src/com/android/settings/nfc/PaymentDefaultDialog.java
@@ -125,12 +125,15 @@
// Compose dialog; get
final AlertController.AlertParams p = mAlertParams;
- p.mTitle = getString(R.string.nfc_payment_set_default);
+ p.mTitle = getString(R.string.nfc_payment_set_default_label);
if (defaultAppInfo == null) {
- p.mMessage = "Always use " + newAppInfo.loadLabel(pm) + " when you tap and pay?";
+ String formatString = getString(R.string.nfc_payment_set_default);
+ String msg = String.format(formatString, newAppInfo.loadLabel(pm));
+ p.mMessage = msg;
} else {
- p.mMessage = "Always use " + newAppInfo.loadLabel(pm) + " instead of " +
- defaultAppInfo.loadLabel(pm) + " when you tap and pay?";
+ String formatString = getString(R.string.nfc_payment_set_default_instead_of);
+ String msg = String.format(formatString, newAppInfo.loadLabel(pm), defaultAppInfo.loadLabel(pm));
+ p.mMessage = msg;
}
p.mPositiveButtonText = getString(R.string.yes);
p.mNegativeButtonText = getString(R.string.no);
diff --git a/src/com/android/settings/nfc/PaymentSettings.java b/src/com/android/settings/nfc/PaymentSettings.java
index af569ac..d3ccbaf 100644
--- a/src/com/android/settings/nfc/PaymentSettings.java
+++ b/src/com/android/settings/nfc/PaymentSettings.java
@@ -21,9 +21,14 @@
import android.preference.Preference;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
+import android.util.Log;
+import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.ImageView;
import android.widget.RadioButton;
+import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
@@ -34,14 +39,17 @@
public class PaymentSettings extends SettingsPreferenceFragment implements
OnClickListener {
public static final String TAG = "PaymentSettings";
+ private LayoutInflater mInflater;
private PaymentBackend mPaymentBackend;
+
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setHasOptionsMenu(false);
mPaymentBackend = new PaymentBackend(getActivity());
+ mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void refresh() {
@@ -55,12 +63,35 @@
for (PaymentAppInfo appInfo : appInfos) {
PaymentAppPreference preference =
new PaymentAppPreference(getActivity(), appInfo, this);
- preference.setIcon(appInfo.icon);
preference.setTitle(appInfo.caption);
- screen.addPreference(preference);
+ if (appInfo.banner != null) {
+ screen.addPreference(preference);
+ } else {
+ // Ignore, no banner
+ Log.e(TAG, "Couldn't load banner drawable of service " + appInfo.componentName);
+ }
}
}
- setPreferenceScreen(screen);
+ TextView emptyText = (TextView) getView().findViewById(R.id.nfc_payment_empty_text);
+ ImageView emptyImage = (ImageView) getView().findViewById(R.id.nfc_payment_tap_image);
+ if (screen.getPreferenceCount() == 0) {
+ emptyText.setVisibility(View.VISIBLE);
+ emptyImage.setVisibility(View.VISIBLE);
+ } else {
+ emptyText.setVisibility(View.GONE);
+ emptyImage.setVisibility(View.GONE);
+ setPreferenceScreen(screen);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ super.onCreateView(inflater, container, savedInstanceState);
+
+ View v = mInflater.inflate(R.layout.nfc_payment, container, false);
+
+ return v;
}
@Override
@@ -101,6 +132,9 @@
RadioButton radioButton = (RadioButton) view.findViewById(android.R.id.button1);
radioButton.setChecked(appInfo.isDefault);
+
+ ImageView banner = (ImageView) view.findViewById(R.id.banner);
+ banner.setImageDrawable(appInfo.banner);
}
}
}
\ No newline at end of file