diff --git a/commonui/src/main/res/drawable/ic_edit.xml b/commonui/src/main/res/drawable/ic_edit.xml new file mode 100644 index 000000000..bf16bd5cc --- /dev/null +++ b/commonui/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,12 @@ + + + diff --git a/commonui/src/main/res/drawable/ic_trash.xml b/commonui/src/main/res/drawable/ic_trash.xml index 5fdcd6dfe..caa047ad8 100644 --- a/commonui/src/main/res/drawable/ic_trash.xml +++ b/commonui/src/main/res/drawable/ic_trash.xml @@ -1,20 +1,12 @@ - - + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + diff --git a/commonui/src/main/res/values/strings.xml b/commonui/src/main/res/values/strings.xml index d1ece3372..c350f1971 100644 --- a/commonui/src/main/res/values/strings.xml +++ b/commonui/src/main/res/values/strings.xml @@ -33,6 +33,7 @@ Authentication Error Cancel + Edit Remove Are you sure? diff --git a/transfermethodui/src/androidTest/java/com/hyperwallet/android/ui/transfermethod/EditTransferMethodTest.java b/transfermethodui/src/androidTest/java/com/hyperwallet/android/ui/transfermethod/EditTransferMethodTest.java new file mode 100644 index 000000000..e1144cdbf --- /dev/null +++ b/transfermethodui/src/androidTest/java/com/hyperwallet/android/ui/transfermethod/EditTransferMethodTest.java @@ -0,0 +1,257 @@ +package com.hyperwallet.android.ui.transfermethod; + +import android.app.Instrumentation; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.view.MenuItem; +import android.widget.ImageButton; +import android.widget.TextView; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.test.core.app.ApplicationProvider; +import androidx.test.espresso.IdlingRegistry; +import androidx.test.espresso.Root; +import androidx.test.espresso.assertion.ViewAssertions; +import androidx.test.espresso.matcher.ViewMatchers; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.rule.ActivityTestRule; + +import com.hyperwallet.android.model.StatusTransition; +import com.hyperwallet.android.ui.R; +import com.hyperwallet.android.ui.common.repository.EspressoIdlingResource; +import com.hyperwallet.android.ui.common.view.error.DefaultErrorDialogFragment; +import com.hyperwallet.android.ui.testutils.rule.HyperwalletExternalResourceManager; +import com.hyperwallet.android.ui.testutils.rule.HyperwalletMockWebServer; +import com.hyperwallet.android.ui.testutils.util.RecyclerViewCountAssertion; +import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodRepositoryFactory; +import com.hyperwallet.android.ui.transfermethod.rule.HyperwalletInsightMockRule; +import com.hyperwallet.android.ui.transfermethod.view.AddTransferMethodActivity; +import com.hyperwallet.android.ui.transfermethod.view.ListTransferMethodActivity; + +import org.hamcrest.Matchers; +import org.junit.After; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.IOException; +import java.util.concurrent.CountDownLatch; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.action.ViewActions.replaceText; +import static androidx.test.espresso.action.ViewActions.typeText; +import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.RootMatchers.isDialog; +import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant; +import static androidx.test.espresso.matcher.ViewMatchers.hasSibling; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withParent; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static com.hyperwallet.android.model.StatusTransition.StatusDefinition.DE_ACTIVATED; +import static com.hyperwallet.android.ui.common.view.error.DefaultErrorDialogFragment.RESULT_ERROR; +import static com.hyperwallet.android.ui.testutils.util.EspressoUtils.atPosition; +import static com.hyperwallet.android.ui.testutils.util.EspressoUtils.nestedScrollTo; +import static com.hyperwallet.android.ui.testutils.util.EspressoUtils.withDrawable; +import static java.net.HttpURLConnection.HTTP_BAD_REQUEST; +import static java.net.HttpURLConnection.HTTP_OK; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.is; + +@RunWith(AndroidJUnit4.class) +public class EditTransferMethodTest { + + private static final String ACCOUNT_NUMBER = "8017110254"; + private static final String ROUTING_NUMBER = "211179539"; + + @ClassRule + public static HyperwalletExternalResourceManager sResourceManager = new HyperwalletExternalResourceManager(); + @Rule + public HyperwalletInsightMockRule mHyperwalletInsightMockRule = new HyperwalletInsightMockRule(); + @Rule + public HyperwalletMockWebServer mMockWebServer = new HyperwalletMockWebServer(8080); + @Rule + public ActivityTestRule mActivityTestRule = + new ActivityTestRule<>(ListTransferMethodActivity.class, true, false); + + @Before + public void setup() { + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("authentication_token_response.json")).mock(); + IdlingRegistry.getInstance().register(EspressoIdlingResource.getIdlingResource()); + } + + @After + public void cleanup() { + TransferMethodRepositoryFactory.clearInstance(); + IdlingRegistry.getInstance().unregister(EspressoIdlingResource.getIdlingResource()); + } + + + @Test + public void testUpdateTransferMethodFragment_verifyUpdateBankAccountTransferMethod() throws InterruptedException { + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("transfer_method_list_single_bank_account_response.json")).mock(); + mMockWebServer.mockResponse().withHttpResponseCode(HTTP_OK).withBody(sResourceManager + .getResourceContent("transfer_method_update_bankacount_response.json")).mock(); + + + final CountDownLatch gate = new CountDownLatch(1); + final BroadcastReceiver br = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + gate.countDown(); + + StatusTransition statusTransition = intent.getParcelableExtra( + "hyperwallet-local-broadcast-payload"); + assertThat("Transition is not valid", statusTransition.getTransition(), is(DE_ACTIVATED)); + } + }; + + // run test + mActivityTestRule.launchActivity(null); + LocalBroadcastManager.getInstance(mActivityTestRule.getActivity().getApplicationContext()) + .registerReceiver(br, new IntentFilter("ACTION_HYPERWALLET_TRANSFER_METHOD_DEACTIVATED")); + + // assert + onView(withId(R.id.toolbar)).check(matches(isDisplayed())); + onView(withId(R.id.toolbar)) + .check(matches( + hasDescendant(withText(R.string.mobileTransferMethodsHeader)))); + onView(withId(R.id.fab)).check(matches(isDisplayed())); + + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(0, hasDescendant(withText(R.string.bank_account_font_icon))))); + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(0, hasDescendant(withText(R.string.bank_account))))); + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(0, hasDescendant(withText("United States"))))); + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(0, hasDescendant(withText(getEndingIn("1332")))))); + onView(withId(R.id.list_transfer_method_item)).check( + matches(atPosition(0, hasDescendant(withDrawable(R.drawable.ic_three_dots_16dp))))); + + onView(allOf(instanceOf(ImageButton.class), hasSibling(withText(R.string.bank_account)))).perform(click()) + .inRoot(Matchers.instanceOf(MenuItem.class)); + onView(withDrawable(R.drawable.ic_trash)).check(matches(isDisplayed())); + onView(withText(R.string.edit)).check(matches(isDisplayed())).perform(click()); + + onView(withId(R.id.branchIdLabel)).check(matches(isDisplayed())); + + onView(withId(R.id.branchId)).perform(nestedScrollTo()).check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(matches(withText("021000021"))); + + onView(ViewMatchers.withId(R.id.branchIdLabel)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + onView(ViewMatchers.withId(R.id.bankAccountId)) + .perform(nestedScrollTo()) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(matches(withText("****"))); + + onView(ViewMatchers.withId(R.id.bankAccountIdLabel)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + // ACCOUNT HOLDER INFO + onView( + Matchers.allOf( + ViewMatchers.withId(R.id.section_header_title), + ViewMatchers.withText(R.string.account_holder) + ) + ) + .perform(nestedScrollTo()) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + onView(ViewMatchers.withId(R.id.firstName)) + .perform(nestedScrollTo()) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(matches(withText("Android Mobile"))); + + onView(ViewMatchers.withId(R.id.firstNameLabel)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + onView(ViewMatchers.withId(R.id.middleName)) + .perform(nestedScrollTo()) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(matches(withText("mobile-qa"))); + + onView(ViewMatchers.withId(R.id.middleNameLabel)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + onView(ViewMatchers.withId(R.id.lastName)) + .perform(nestedScrollTo()) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(matches(withText("UITest"))); + + onView(ViewMatchers.withId(R.id.lastNameLabel)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + // ADDRESS + onView( + Matchers.allOf( + ViewMatchers.withId(R.id.section_header_title), + ViewMatchers.withText(R.string.address) + ) + ).perform(nestedScrollTo()) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + onView(ViewMatchers.withId(R.id.country)) + .perform(nestedScrollTo()) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(matches(withText("Canada"))); + + onView(ViewMatchers.withId(R.id.countryLabel)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + onView(ViewMatchers.withId(R.id.stateProvince)) + .perform(nestedScrollTo()) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(matches(withText("BC"))); + + onView(ViewMatchers.withId(R.id.stateProvinceLabel)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + onView(ViewMatchers.withId(R.id.addressLine1)) + .perform(nestedScrollTo()) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(matches(withText("475 howe st"))); + + onView(ViewMatchers.withId(R.id.addressLine1Label)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + onView(ViewMatchers.withId(R.id.city)) + .perform(nestedScrollTo()) + .check(matches(withText("vancouver"))) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + onView(ViewMatchers.withId(R.id.cityLabel)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + onView(ViewMatchers.withId(R.id.postalCode)) + .perform(nestedScrollTo()) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(matches(withText("V6Z1L2"))); + + onView(ViewMatchers.withId(R.id.postalCodeLabel)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())); + + } + + private String getEndingIn(String ending) { + return String.format(InstrumentationRegistry.getInstrumentation().getTargetContext() + .getString(R.string.endingIn), ending); + } + +} diff --git a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/ListTransferMethodActivity.java b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/ListTransferMethodActivity.java index f81e7a84b..ab11d8e15 100644 --- a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/ListTransferMethodActivity.java +++ b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/ListTransferMethodActivity.java @@ -17,6 +17,7 @@ package com.hyperwallet.android.ui.transfermethod.view; import static com.hyperwallet.android.ui.common.intent.HyperwalletIntent.SELECT_TRANSFER_METHOD_REQUEST_CODE; +import static com.hyperwallet.android.ui.common.intent.HyperwalletIntent.UPDATE_TRANSFER_METHOD_REQUEST_CODE; import static com.hyperwallet.android.ui.transfermethod.view.ListTransferMethodFragment.ARGUMENT_IS_TRANSFER_METHODS_RELOAD_NEEDED; import android.content.Intent; @@ -49,7 +50,7 @@ public class ListTransferMethodActivity extends AppCompatActivity implements ListTransferMethodFragment.OnAddNewTransferMethodSelected, ListTransferMethodFragment.OnDeactivateTransferMethodNetworkErrorCallback, ListTransferMethodFragment.OnLoadTransferMethodNetworkErrorCallback, - ListTransferMethodFragment.OnTransferMethodContextMenuDeletionSelected, + ListTransferMethodFragment.OnTransferMethodContextMenuItemSelected, OnTransferMethodDeactivateCallback, OnNetworkErrorCallback { public static final String TAG = "transfer-method:list:list-transfer-methods"; @@ -134,6 +135,9 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (fragment != null && fragment.getArguments() != null) { fragment.getArguments().putBoolean(ARGUMENT_IS_TRANSFER_METHODS_RELOAD_NEEDED, true); } + } else if (requestCode == UPDATE_TRANSFER_METHOD_REQUEST_CODE && resultCode == RESULT_OK) { + ActivityUtils.initFragment(this, ListTransferMethodFragment.newInstance(), + R.id.list_transfer_method_fragment); } } @@ -177,6 +181,15 @@ public void showConfirmationDialog(@NonNull TransferMethod transferMethod) { } } + @Override + public void invokeTransferMethodEdit(@NonNull TransferMethod transferMethod) { + String token = transferMethod.getField(TransferMethod.TransferMethodFields.TOKEN); + Intent intent = new Intent(this, UpdateTransferMethodActivity.class); + intent.putExtra(UpdateTransferMethodActivity.EXTRA_TRANSFER_METHOD_TOKEN, token); + intent.putExtra(UpdateTransferMethodActivity.EXTRA_LOCK_SCREEN_ORIENTATION_TO_PORTRAIT, true); + startActivityForResult(intent, UPDATE_TRANSFER_METHOD_REQUEST_CODE); + } + @Override public void confirm() { mRetryCode = RETRY_CONFIRM_DEACTIVATE_TRANSFER_METHOD; diff --git a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/ListTransferMethodFragment.java b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/ListTransferMethodFragment.java index 62290d99b..f5c185311 100644 --- a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/ListTransferMethodFragment.java +++ b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/ListTransferMethodFragment.java @@ -69,7 +69,7 @@ public class ListTransferMethodFragment extends Fragment implements ListTransfer private View mProgressBar; private ArrayList mTransferMethodList; private OnAddNewTransferMethodSelected mOnAddNewTransferMethodSelected; - private OnTransferMethodContextMenuDeletionSelected mOnTransferMethodContextMenuDeletionSelected; + private OnTransferMethodContextMenuItemSelected mOnTransferMethodContextMenuItemSelected; private OnDeactivateTransferMethodNetworkErrorCallback mOnDeactivateTransferMethodNetworkErrorCallback; private OnLoadTransferMethodNetworkErrorCallback mOnLoadTransferMethodNetworkErrorCallback; private boolean mIsTransferMethodsReloadNeeded; @@ -105,10 +105,10 @@ public void onAttach(Context context) { } try { - mOnTransferMethodContextMenuDeletionSelected = (OnTransferMethodContextMenuDeletionSelected) context; + mOnTransferMethodContextMenuItemSelected = (OnTransferMethodContextMenuItemSelected) context; } catch (ClassCastException e) { throw new ClassCastException(getActivity().toString() + " must implement " - + OnTransferMethodContextMenuDeletionSelected.class.getCanonicalName()); + + OnTransferMethodContextMenuItemSelected.class.getCanonicalName()); } try { @@ -144,7 +144,7 @@ public void onViewStateRestored(@Nullable Bundle savedInstanceState) { mIsTransferMethodsReloadNeeded = true; } mListTransferMethodAdapter = new ListTransferMethodAdapter(mTransferMethodList, - mOnTransferMethodContextMenuDeletionSelected); + mOnTransferMethodContextMenuItemSelected); recyclerView.setAdapter(mListTransferMethodAdapter); } @@ -187,7 +187,11 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { public void onResume() { super.onResume(); mIsTransferMethodsReloadNeeded = getArguments().getBoolean(ARGUMENT_IS_TRANSFER_METHODS_RELOAD_NEEDED, true); - if (mIsTransferMethodsReloadNeeded) { + loadTransferMethodsList(mIsTransferMethodsReloadNeeded); + } + + private void loadTransferMethodsList(boolean shouldReload) { + if (shouldReload) { getArguments().putBoolean(ARGUMENT_IS_TRANSFER_METHODS_RELOAD_NEEDED, false); mPresenter.loadTransferMethods(); } else { @@ -272,9 +276,11 @@ public void loadTransferMethods() { mPresenter.loadTransferMethods(); } - interface OnTransferMethodContextMenuDeletionSelected { + interface OnTransferMethodContextMenuItemSelected { void showConfirmationDialog(@NonNull final TransferMethod transferMethod); + + void invokeTransferMethodEdit(@NonNull final TransferMethod transferMethod); } interface OnAddNewTransferMethodSelected { @@ -294,12 +300,12 @@ interface OnLoadTransferMethodNetworkErrorCallback { private static class ListTransferMethodAdapter extends RecyclerView.Adapter { private List mTransferMethodList; - private OnTransferMethodContextMenuDeletionSelected mOnTransferMethodContextMenuDeletionSelected; + private OnTransferMethodContextMenuItemSelected mOnTransferMethodContextMenuItemSelected; ListTransferMethodAdapter(final List transferMethodList, - final OnTransferMethodContextMenuDeletionSelected onTransferMethodContextMenuSelection) { + final OnTransferMethodContextMenuItemSelected onTransferMethodContextMenuSelection) { mTransferMethodList = transferMethodList; - mOnTransferMethodContextMenuDeletionSelected = onTransferMethodContextMenuSelection; + mOnTransferMethodContextMenuItemSelected = onTransferMethodContextMenuSelection; } @NonNull @@ -373,18 +379,6 @@ void bind(@NonNull final TransferMethod transferMethod) { mTransferMethodIdentification.setText(transferMethodIdentification); } - // Todo: Remove before code merge. Used for Debugging purpose. - itemView.setOnClickListener(new OneClickListener() { - @Override - public void onOneClick(View v) { - String token = transferMethod.getField(TransferMethod.TransferMethodFields.TOKEN); - Intent intent = new Intent(itemView.getContext(), UpdateTransferMethodActivity.class); - intent.putExtra(UpdateTransferMethodActivity.EXTRA_TRANSFER_METHOD_TOKEN, token); - intent.putExtra(UpdateTransferMethodActivity.EXTRA_LOCK_SCREEN_ORIENTATION_TO_PORTRAIT, true); - itemView.getContext().startActivity(intent); - } - }); - mImageButton.setOnClickListener(new View.OnClickListener() { @Override @SuppressWarnings("RestrictedApi") @@ -400,7 +394,10 @@ public void onClick(View v) { @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.remove_account_context_option) { - mOnTransferMethodContextMenuDeletionSelected.showConfirmationDialog(transferMethod); + mOnTransferMethodContextMenuItemSelected.showConfirmationDialog(transferMethod); + return true; + } if (item.getItemId() == R.id.edit_account_context_option) { + mOnTransferMethodContextMenuItemSelected.invokeTransferMethodEdit(transferMethod); return true; } return false; diff --git a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/UpdateTransferMethodActivity.java b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/UpdateTransferMethodActivity.java index 6b223c445..7bb47db9c 100644 --- a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/UpdateTransferMethodActivity.java +++ b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/UpdateTransferMethodActivity.java @@ -54,6 +54,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { collapsingToolbar.setCollapsedTitleTextAppearance(titleStyleCollapse); int titleStyleExpanded = TransferMethodUtils.getAdjustExpandTitleStyle(getTitle().toString()); collapsingToolbar.setExpandedTitleTextAppearance(titleStyleExpanded); + getSupportActionBar().setTitle(""); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override diff --git a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/UpdateTransferMethodFragment.java b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/UpdateTransferMethodFragment.java index 171a74bda..49ad03ac6 100644 --- a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/UpdateTransferMethodFragment.java +++ b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/UpdateTransferMethodFragment.java @@ -51,6 +51,7 @@ import com.hyperwallet.android.ui.common.insight.HyperwalletInsight; import com.hyperwallet.android.ui.common.util.ErrorTypes; import com.hyperwallet.android.ui.common.util.PageGroups; +import com.hyperwallet.android.ui.common.view.TransferMethodUtils; import com.hyperwallet.android.ui.transfermethod.TransferMethodLocalBroadcast; import com.hyperwallet.android.ui.transfermethod.repository.TransferMethodRepositoryFactory; import com.hyperwallet.android.ui.transfermethod.view.widget.AbstractWidget; @@ -88,6 +89,7 @@ public class UpdateTransferMethodFragment extends Fragment implements WidgetEven private TransferMethod mTransferMethod; private String mTransferMethodToken; private HashMap mWidgetInputStateHashMap; + private boolean isEdited; /** * Please do not use this to have instance of UpdateTransferMethodFragment this is reserved for android framework @@ -158,7 +160,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat mDynamicContainer = view.findViewById(R.id.update_transfer_method_dynamic_container); mNestedScrollView = view.findViewById(R.id.update_transfer_method_scroll_view); - mUpdateButtonProgressBar = view.findViewById(R.id.update_transfer_method_progress_bar); + mUpdateButtonProgressBar = view.findViewById(R.id.update_transfer_method_button_progress_bar); mProgressBar = view.findViewById(R.id.update_transfer_method_progress_bar_layout); mUpdateTransferMethodButton = view.findViewById(R.id.update_transfer_method_button); @@ -268,12 +270,17 @@ private void triggerUpdate() { if (view.getTag() instanceof AbstractWidget) { AbstractWidget widget = (AbstractWidget) view.getTag(); if (widget.isEdited) { + isEdited = true; mTransferMethod.setField(widget.getName(), widget.getValue()); } } } - mPresenter.updateTransferMethod(mTransferMethod); + if (isEdited) { + mPresenter.updateTransferMethod(mTransferMethod); + } else { + getActivity().finish(); + } } } @@ -440,8 +447,8 @@ public void showTransferMethodFields( TransferMethodConfiguration fields = hyperwalletTransferMethodConfigurationField.getFields(); Locale locale = new Locale.Builder().setRegion(fields.getCountry()).build(); mTransferMethodType = fields.getTransferMethodType(); -// getActivity().getActionBar().setTitle( -// TransferMethodUtils.getTransferMethodName(getContext(), mTransferMethodType)); + String transferMethod = TransferMethodUtils.getTransferMethodName(getContext(), mTransferMethodType); + ((UpdateTransferMethodActivity) getActivity()).getSupportActionBar().setTitle(transferMethod); // group for (FieldGroup group : fields.getFieldGroups()) { View sectionHeader = LayoutInflater.from(mDynamicContainer.getContext()) diff --git a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/widget/AbstractWidget.java b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/widget/AbstractWidget.java index 5d6076f48..0e9cb8311 100644 --- a/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/widget/AbstractWidget.java +++ b/transfermethodui/src/main/java/com/hyperwallet/android/ui/transfermethod/view/widget/AbstractWidget.java @@ -167,8 +167,8 @@ public DefaultKeyListener(View focusView, View clearFocusView) { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { + isEdited = true; if (event.getAction() == KeyEvent.ACTION_DOWN) { - isEdited = true; switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: diff --git a/transfermethodui/src/main/res/layout/fragment_update_transfer_method.xml b/transfermethodui/src/main/res/layout/fragment_update_transfer_method.xml index 568353712..47ee191f6 100644 --- a/transfermethodui/src/main/res/layout/fragment_update_transfer_method.xml +++ b/transfermethodui/src/main/res/layout/fragment_update_transfer_method.xml @@ -106,12 +106,12 @@ app:layout_constraintTop_toTopOf="parent" /> +