accounts: easier ip account discovery

An ip2ip account is a well hidden feature, since we request users to
fill all fields when creating a SIP account.
This commit reduces the discovery barrier by making only the Alias field
mandatory. A warning is displayed if the user tries to create an account
without an hostname (e.g a IP2IP account).

Change-Id: I9f8a1b6d56485fa73f403fe99f918b18c274f355
Tuleap: #694
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/AccountCreationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/AccountCreationFragment.java
index bd740c1..3fbdaa2 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/AccountCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/AccountCreationFragment.java
@@ -105,13 +105,11 @@
         mPasswordView.setOnEditorActionListener(new OnEditorActionListener() {
             @Override
             public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-                mAccountType = AccountDetailBasic.ACCOUNT_TYPE_SIP;
-
-                mAlias = mAliasView.getText().toString();
-                mHostname = mHostnameView.getText().toString();
-                mUsername = mUsernameView.getText().toString();
-                mPassword = mPasswordView.getText().toString();
-                attemptCreation();
+                if (actionId == getResources().getInteger(R.integer.register_sip_account_actionid)
+                        || event == null
+                        || (event.getAction() == KeyEvent.ACTION_UP)) {
+                    inflatedView.findViewById(R.id.create_sip_button).callOnClick();
+                }
                 return true;
             }
         });
@@ -119,7 +117,7 @@
             @Override
             public void onClick(View view) {
                 mAccountType = AccountDetailBasic.ACCOUNT_TYPE_RING;
-                initCreation();
+                initAccountCreation();
             }
         });
         inflatedView.findViewById(R.id.create_sip_button).setOnClickListener(new View.OnClickListener() {
@@ -444,48 +442,62 @@
         // Store values at the time of the login attempt.
 
         boolean cancel = false;
+        boolean warningIPAccount = false;
         View focusView = null;
 
-        // Check for a valid password.
-        if (TextUtils.isEmpty(mPassword)) {
-            mPasswordView.setError(getString(R.string.error_field_required));
-            focusView = mPasswordView;
-            cancel = true;
-        }
-
-        if (TextUtils.isEmpty(mUsername)) {
-            mUsernameView.setError(getString(R.string.error_field_required));
-            focusView = mUsernameView;
-            cancel = true;
-        }
-
-        if (TextUtils.isEmpty(mHostname)) {
-            mHostnameView.setError(getString(R.string.error_field_required));
-            focusView = mHostnameView;
-            cancel = true;
-        }
-
-        // Check for a valid email address.
+        // Alias is mandatory
         if (TextUtils.isEmpty(mAlias)) {
             mAliasView.setError(getString(R.string.error_field_required));
             focusView = mAliasView;
             cancel = true;
         }
 
-        if (cancel) {
-            // There was an error; don't attempt login and focus the first
-            // form field with an error.
-            focusView.requestFocus();
-        } else {
-            // Show a progress spinner, and kick off a background task to
-            // perform the user login attempt.
-            initCreation();
+        if (TextUtils.isEmpty(mHostname)) {
+            warningIPAccount = true;
+        }
 
+        if (!warningIPAccount && TextUtils.isEmpty(mPassword)) {
+            mPasswordView.setError(getString(R.string.error_field_required));
+            focusView = mPasswordView;
+            cancel = true;
+        }
+
+        if (!warningIPAccount && TextUtils.isEmpty(mUsername)) {
+            mUsernameView.setError(getString(R.string.error_field_required));
+            focusView = mUsernameView;
+            cancel = true;
+        }
+
+        if (cancel) {
+            focusView.requestFocus();
+        } else if (warningIPAccount) {
+            showIP2IPDialog();
+        } else {
+            initAccountCreation();
         }
     }
 
+    private void showIP2IPDialog() {
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        builder.setTitle(R.string.dialog_warn_ip2ip_account_title)
+                .setMessage(R.string.dialog_warn_ip2ip_account_message)
+                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                        initAccountCreation();
+                    }
+                })
+                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                        /* Terminate with no action */
+                    }
+                })
+                .create().show();
+    }
+
     @SuppressWarnings("unchecked")
-    private void initCreation() {
+    private void initAccountCreation() {
         try {
             HashMap<String, String> accountDetails = (HashMap<String, String>) mCallbacks.getRemoteService().getAccountTemplate(mAccountType);
             accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_TYPE, mAccountType);
diff --git a/ring-android/app/src/main/res/layout/frag_account_creation.xml b/ring-android/app/src/main/res/layout/frag_account_creation.xml
index a9faa6a..a6249f7 100644
--- a/ring-android/app/src/main/res/layout/frag_account_creation.xml
+++ b/ring-android/app/src/main/res/layout/frag_account_creation.xml
@@ -274,6 +274,7 @@
                         android:layout_marginLeft="12dp"
                         android:layout_marginRight="12dp"
                         android:hint="@string/prompt_password"
+                        android:imeActionId="@integer/register_sip_account_actionid"
                         android:imeActionLabel="@string/action_create_short"
                         android:inputType="textPassword"
                         android:singleLine="true"
diff --git a/ring-android/app/src/main/res/values/integers.xml b/ring-android/app/src/main/res/values/integers.xml
new file mode 100644
index 0000000..353c4cf
--- /dev/null
+++ b/ring-android/app/src/main/res/values/integers.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <integer name="register_sip_account_actionid">1000</integer>
+</resources>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/values/strings_account.xml b/ring-android/app/src/main/res/values/strings_account.xml
index 3e867ea..fdc31a0 100644
--- a/ring-android/app/src/main/res/values/strings_account.xml
+++ b/ring-android/app/src/main/res/values/strings_account.xml
@@ -31,6 +31,11 @@
     <string name="dialog_wait_create">Adding account</string>
     <string name="dialog_wait_create_details">Please wait while your new account is added…</string>
 
+    <string name="dialog_warn_ip2ip_account_title">Create empty SIP account ?</string>
+    <string name="dialog_warn_ip2ip_account_message">You are about to create a SIP account with no valid hostname.
+        You will only be able to make and receive direct ip calls.
+        You can edit your account later</string>
+
     <string-array name="accountType">
         <item>RING</item>
         <item>SIP</item>