account: don't set "Unknown" as profile name

"Unknown" is a placeholder to use at
presentation time, not as the actual profile
name that will be transmitted and saved.

This patch prevents setting a "default name"
in a vcard since the vcard can be used
without a name. If no name is available,
no name is set.

In the account list, the account alias is
showed if the profile name is not set.

Change-Id: I48cef23edc139c269fe54cd5ca8cd6de91ea6752
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ProfileCreationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ProfileCreationFragment.java
index c28d003..410ce20 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/ProfileCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/ProfileCreationFragment.java
@@ -106,9 +106,6 @@
             }
             mPhotoView.setImageBitmap(BitmapUtils.cropImageToCircle(mSourcePhoto));
         }
-        if (TextUtils.isEmpty(mFullnameView.getText().toString())) {
-            mFullnameView.setText(R.string.unknown);
-        }
         return view;
     }
 
@@ -120,15 +117,11 @@
 
     private void initProfile() {
         //~ Checking the state of the READ_CONTACTS permission
-        boolean hasReadContactsPermission = mDeviceRuntimeService.hasContactPermission();
-        if (hasReadContactsPermission) {
+        if (mDeviceRuntimeService.hasContactPermission()) {
             Cursor mProfileCursor = getActivity().getContentResolver().query(ContactsContract.Profile.CONTENT_URI, PROFILE_PROJECTION, null, null, null);
             if (mProfileCursor != null) {
                 if (mProfileCursor.moveToFirst()) {
                     String displayName = mProfileCursor.getString(mProfileCursor.getColumnIndex(ContactsContract.Profile.DISPLAY_NAME_PRIMARY));
-                    if (TextUtils.isEmpty(displayName)) {
-                        displayName = getActivity().getResources().getString(R.string.unknown);
-                    }
                     mFullnameView.setText(displayName);
                 }
                 mProfileCursor.close();
@@ -176,7 +169,7 @@
 
     @OnClick(R.id.next_create_account)
     public void nextClicked() {
-        String fullname = TextUtils.isEmpty(mFullnameView.getText().toString()) ? getString(R.string.unknown) : mFullnameView.getText().toString().trim();
+        String fullname = mFullnameView.getText().toString().trim();
         ((AccountWizard) getActivity()).profileNext(fullname, mSourcePhoto);
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/navigation/AccountAdapter.java b/ring-android/app/src/main/java/cx/ring/navigation/AccountAdapter.java
index fc21b67..5c6142d 100644
--- a/ring-android/app/src/main/java/cx/ring/navigation/AccountAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/navigation/AccountAdapter.java
@@ -40,6 +40,7 @@
 import cx.ring.utils.BitmapUtils;
 import cx.ring.utils.VCardUtils;
 import ezvcard.VCard;
+import ezvcard.property.FormattedName;
 
 class AccountAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
     private List<Account> mDataset;
@@ -182,7 +183,7 @@
         switch (getItemViewType(position)) {
             case TYPE_ACCOUNT:
                 Account account = mDataset.get(position);
-                VCard vcard = VCardUtils.loadLocalProfileFromDisk(mContext.getFilesDir(), account.getAccountID(), mContext.getString(R.string.unknown));
+                VCard vcard = VCardUtils.loadLocalProfileFromDisk(mContext.getFilesDir(), account.getAccountID());
                 if (!vcard.getPhotos().isEmpty()) {
                     Bitmap photo = BitmapUtils.cropImageToCircle(vcard.getPhotos().get(0).getData());
                     ((AccountView) holder).photo.setImageBitmap(photo);
@@ -190,7 +191,15 @@
                     Drawable photo = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_contact_picture, null);
                     ((AccountView) holder).photo.setImageDrawable(photo);
                 }
-                ((AccountView) holder).alias.setText(vcard.getFormattedName().getValue());
+                String alias = account.getAlias();
+                FormattedName name = vcard.getFormattedName();
+                if (name != null) {
+                    String name_value = name.getValue();
+                    if (!TextUtils.isEmpty(name_value)) {
+                        alias = name_value;
+                    }
+                }
+                ((AccountView) holder).alias.setText(alias);
                 if (account.isRing()) {
                     String username = account.getRegisteredName();
                     if (!account.registeringUsername && !TextUtils.isEmpty(username)) {
diff --git a/ring-android/app/src/main/java/cx/ring/navigation/RingNavigationFragment.java b/ring-android/app/src/main/java/cx/ring/navigation/RingNavigationFragment.java
index e0d7601..c0813ba 100644
--- a/ring-android/app/src/main/java/cx/ring/navigation/RingNavigationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/navigation/RingNavigationFragment.java
@@ -35,6 +35,7 @@
 import android.support.v7.widget.AppCompatImageView;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -65,6 +66,7 @@
 import cx.ring.utils.BitmapUtils;
 import ezvcard.VCard;
 import ezvcard.parameter.ImageType;
+import ezvcard.property.FormattedName;
 import ezvcard.property.Photo;
 
 public class RingNavigationFragment extends Fragment implements NavigationAdapter.OnNavigationItemClicked,
@@ -72,6 +74,7 @@
     private static final String TAG = RingNavigationFragment.class.getSimpleName();
 
     private AccountAdapter mAccountAdapter;
+    private Account mSelectedAccount;
 
     @Inject
     RingNavigationPresenter mRingNavigationPresenter;
@@ -180,7 +183,7 @@
         SHARE(3),
         ABOUT(4);
 
-        int position;
+        final int position;
 
         Section(int pos) {
             position = pos;
@@ -221,7 +224,7 @@
         // dependency injection
         ((RingApplication) getActivity().getApplication()).getRingInjectionComponent().inject(this);
 
-        mRingNavigationPresenter.initializePresenter(getString(R.string.unknown));
+        mRingNavigationPresenter.updateUser();
 
         setupNavigationMenu();
         setupAccountList();
@@ -303,7 +306,13 @@
         } else {
             mUserImage.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_contact_picture, null));
         }
-        mSelectedAccountAlias.setText(vcard.getFormattedName().getValue());
+        FormattedName name = vcard.getFormattedName();
+        if (name != null) {
+            String name_value = name.getValue();
+            if (!TextUtils.isEmpty(name_value)) {
+                mSelectedAccountAlias.setText(name_value);
+            }
+        }
         Log.d(TAG, "User did change, updating user view.");
     }
 
@@ -353,7 +362,7 @@
         ViewGroup view = (ViewGroup) inflater.inflate(R.layout.dialog_profile, null);
 
         final EditText editText = (EditText) view.findViewById(R.id.user_name);
-        editText.setText(mSelectedAccountAlias.getText());
+        editText.setText(mRingNavigationPresenter.getAlias(mSelectedAccount));
         mProfilePhoto = (ImageView) view.findViewById(R.id.profile_photo);
         mProfilePhoto.setImageDrawable(mUserImage.getDrawable());
 
@@ -424,7 +433,12 @@
         if (selectedAccount == null) {
             return;
         }
-        mSelectedAccountAlias.setText(mRingNavigationPresenter.getAlias(selectedAccount));
+        mSelectedAccount = selectedAccount;
+        String alias = mRingNavigationPresenter.getAlias(selectedAccount);
+        if (TextUtils.isEmpty(alias)) {
+            alias = selectedAccount.getAlias();
+        }
+        mSelectedAccountAlias.setText(alias);
         mSelectedAccountHost.setText(mRingNavigationPresenter.getHost(selectedAccount, getString(R.string.account_type_ip2ip)));
         mSelectedAccountError.setVisibility(selectedAccount.isRegistered() ? View.GONE : View.VISIBLE);
     }
@@ -435,7 +449,7 @@
             @Override
             public void run() {
                 mAccountAdapter.replaceAll(viewModel.getAccounts());
-                updateUserView(viewModel.getVcard(getActivity().getFilesDir(), getString(R.string.unknown)));
+                updateUserView(viewModel.getVcard(getActivity().getFilesDir()));
                 updateSelectedAccountView(viewModel.getAccount());
 
                 if (viewModel.getAccounts().isEmpty()) {
diff --git a/ring-android/app/src/main/res/layout-land/frag_acc_profile_create.xml b/ring-android/app/src/main/res/layout-land/frag_acc_profile_create.xml
index 184bfdf..5d35b64 100644
--- a/ring-android/app/src/main/res/layout-land/frag_acc_profile_create.xml
+++ b/ring-android/app/src/main/res/layout-land/frag_acc_profile_create.xml
@@ -18,7 +18,6 @@
             android:layout_gravity="center"
             android:gravity="center"
             android:orientation="vertical"
-            android:paddingBottom="@dimen/activity_vertical_margin"
             android:paddingLeft="@dimen/activity_horizontal_margin"
             android:paddingRight="@dimen/activity_horizontal_margin"
             android:paddingTop="@dimen/activity_vertical_margin">
@@ -31,6 +30,7 @@
                 android:layout_marginTop="@dimen/activity_vertical_margin"
                 android:gravity="center"
                 android:text="@string/account_creation_profile"
+                android:textColor="@color/text_color_primary_dark"
                 android:textSize="24sp" />
 
             <TextView
@@ -49,89 +49,74 @@
                 android:orientation="horizontal">
 
                 <RelativeLayout
-                    android:layout_width="0dp"
+                    android:id="@+id/profile_container"
+                    android:layout_width="150dp"
+                    android:layout_height="160dp"
+                    android:layout_gravity="center">
+
+                    <ImageView
+                        android:id="@+id/profile_photo"
+                        android:layout_width="120dp"
+                        android:layout_height="120dp"
+                        android:layout_alignParentTop="true"
+                        android:layout_centerHorizontal="true"
+                        android:layout_margin="10dp"
+                        android:scaleType="fitCenter"
+                        tools:src="@drawable/ic_contact_picture" />
+
+                    <android.support.design.widget.FloatingActionButton
+                        android:id="@+id/camera"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_alignTop="@+id/anchor"
+                        android:layout_toRightOf="@+id/anchor"
+                        android:contentDescription="@string/take_a_photo"
+                        android:src="@drawable/ic_photo_camera"
+                        android:text="@string/take_a_photo"
+                        app:backgroundTint="@color/light"
+                        app:rippleColor="@android:color/white" />
+
+                    <Space
+                        android:id="@+id/anchor"
+                        android:layout_width="20dp"
+                        android:layout_height="20dp"
+                        android:layout_alignBottom="@+id/profile_photo"
+                        android:layout_centerHorizontal="true" />
+
+                    <android.support.design.widget.FloatingActionButton
+                        android:id="@+id/gallery"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_alignTop="@+id/anchor"
+                        android:layout_toLeftOf="@+id/anchor"
+                        android:contentDescription="@string/open_the_gallery"
+                        android:src="@drawable/ic_insert_photo"
+                        android:text="@string/open_the_gallery"
+                        app:backgroundTint="@color/light"
+                        app:rippleColor="@android:color/white" />
+
+                </RelativeLayout>
+
+                <cx.ring.views.BoundedRelativeLayout
+                    android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_weight="0.5"
-                    android:gravity="center">
+                    app:bounded_width="300dp">
 
-                    <RelativeLayout
-                        android:id="@+id/profile_container"
-                        android:layout_width="150dp"
-                        android:layout_height="180dp"
-                        android:layout_gravity="center">
-
-                        <ImageView
-                            android:id="@+id/profile_photo"
-                            android:layout_width="120dp"
-                            android:layout_height="120dp"
-                            android:layout_alignParentTop="true"
-                            android:layout_centerHorizontal="true"
-                            android:layout_margin="10dp"
-                            android:scaleType="fitCenter"
-                            tools:src="@drawable/ic_contact_picture" />
-
-                        <android.support.design.widget.FloatingActionButton
-                            android:id="@+id/camera"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_alignTop="@+id/anchor"
-                            android:layout_toRightOf="@+id/anchor"
-                            android:contentDescription="@string/take_a_photo"
-                            android:src="@drawable/ic_photo_camera"
-                            android:text="@string/take_a_photo"
-                            app:backgroundTint="@color/light"
-                            app:rippleColor="@android:color/white" />
-
-                        <View
-                            android:id="@+id/anchor"
-                            android:layout_width="20dp"
-                            android:layout_height="20dp"
-                            android:layout_alignBottom="@+id/profile_photo"
-                            android:layout_centerHorizontal="true"
-                            android:background="@color/zxing_transparent" />
-
-                        <android.support.design.widget.FloatingActionButton
-                            android:id="@+id/gallery"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_alignTop="@+id/anchor"
-                            android:layout_toLeftOf="@+id/anchor"
-                            android:contentDescription="@string/open_the_gallery"
-                            android:src="@drawable/ic_insert_photo"
-                            android:text="@string/open_the_gallery"
-                            app:backgroundTint="@color/light"
-                            app:rippleColor="@android:color/white" />
-
-                    </RelativeLayout>
-                </RelativeLayout>
-
-                <RelativeLayout
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="0.5">
-
-                    <cx.ring.views.BoundedRelativeLayout
+                    <EditText
+                        android:id="@+id/user_name"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
-                        app:bounded_width="500dp">
+                        android:layout_marginLeft="24dp"
+                        android:layout_marginRight="24dp"
+                        android:hint="@string/profile_name_hint"
+                        android:inputType="textCapWords"
+                        android:maxLines="1"
+                        android:textAlignment="center"
+                        android:textColor="@color/text_color_primary_dark"
+                        android:textColorHint="@color/text_color_secondary_dark" />
 
-                        <EditText
-                            android:id="@+id/user_name"
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content"
-                            android:layout_marginLeft="24dp"
-                            android:layout_marginRight="24dp"
-                            android:hint="@string/unknowm_if_empty"
-                            android:inputType="textCapWords"
-                            android:maxLines="1"
-                            android:textAlignment="center"
-                            android:textColor="@color/text_color_primary_dark"
-                            android:textColorHint="@color/text_color_secondary_dark"
-                            tools:text="Username" />
-
-                    </cx.ring.views.BoundedRelativeLayout>
-
-                </RelativeLayout>
+                </cx.ring.views.BoundedRelativeLayout>
 
             </LinearLayout>
 
diff --git a/ring-android/app/src/main/res/layout/dialog_profile.xml b/ring-android/app/src/main/res/layout/dialog_profile.xml
index 5104ea2..8f1667b 100644
--- a/ring-android/app/src/main/res/layout/dialog_profile.xml
+++ b/ring-android/app/src/main/res/layout/dialog_profile.xml
@@ -70,7 +70,6 @@
         android:inputType="textCapWords"
         android:maxLines="1"
         android:textAlignment="center"
-        android:hint="@string/unknowm_if_empty"
-        tools:text="Username" />
+        android:hint="@string/profile_name_hint" />
 
 </LinearLayout>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/layout/frag_acc_profile_create.xml b/ring-android/app/src/main/res/layout/frag_acc_profile_create.xml
index 6790ad6..329bfc0 100644
--- a/ring-android/app/src/main/res/layout/frag_acc_profile_create.xml
+++ b/ring-android/app/src/main/res/layout/frag_acc_profile_create.xml
@@ -6,7 +6,7 @@
     android:layout_height="match_parent"
     android:theme="@style/Wizard">
 
-    <RelativeLayout
+    <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_above="@+id/add_action_panel"
@@ -15,7 +15,7 @@
         <cx.ring.views.BoundedScrollView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_centerInParent="true"
+            android:layout_gravity="center"
             app:bounded_width="500dp">
 
             <LinearLayout
@@ -76,13 +76,12 @@
                         app:backgroundTint="@color/light"
                         app:rippleColor="@android:color/white" />
 
-                    <View
+                    <Space
                         android:id="@+id/anchor"
                         android:layout_width="20dp"
                         android:layout_height="20dp"
                         android:layout_alignBottom="@+id/profile_photo"
-                        android:layout_centerHorizontal="true"
-                        android:background="@color/zxing_transparent" />
+                        android:layout_centerHorizontal="true" />
 
                     <android.support.design.widget.FloatingActionButton
                         android:id="@+id/gallery"
@@ -102,7 +101,7 @@
                     android:id="@+id/user_name"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:hint="@string/unknowm_if_empty"
+                    android:hint="@string/profile_name_hint"
                     android:inputType="textCapWords"
                     android:maxLines="1"
                     android:paddingBottom="8dp"
@@ -111,13 +110,12 @@
                     android:paddingTop="16dp"
                     android:textAlignment="center"
                     android:textColor="@color/text_color_primary_dark"
-                    android:textColorHint="@color/text_color_secondary_dark"
-                    tools:text="Username" />
+                    android:textColorHint="@color/text_color_secondary_dark" />
 
             </LinearLayout>
 
         </cx.ring.views.BoundedScrollView>
-    </RelativeLayout>
+    </FrameLayout>
 
     <RelativeLayout
         android:id="@+id/add_action_panel"
diff --git a/ring-android/app/src/main/res/layout/item_account.xml b/ring-android/app/src/main/res/layout/item_account.xml
index 65bb628..5d5480a 100644
--- a/ring-android/app/src/main/res/layout/item_account.xml
+++ b/ring-android/app/src/main/res/layout/item_account.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2016 Savoir-faire Linux Inc.
+<?xml version="1.0" encoding="utf-8"?><!-- Copyright (c) 2016 Savoir-faire Linux Inc.
 
 Author: Adrien Beraud <adrien.beraud@savoirfairelinux.com>
 
@@ -32,18 +31,19 @@
         android:layout_marginRight="8dp"
         tools:src="@drawable/ic_contact_picture" />
 
-    <android.support.v7.widget.AppCompatTextView
+    <TextView
         android:id="@+id/account_alias"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_alignParentLeft="false"
-        android:layout_alignParentStart="false"
         android:layout_alignParentTop="true"
         android:layout_toEndOf="@+id/account_photo"
+        android:layout_toLeftOf="@+id/error_indicator"
         android:layout_toRightOf="@+id/account_photo"
+        android:layout_toStartOf="@+id/error_indicator"
+        android:ellipsize="end"
         android:textAppearance="@style/ListPrimary" />
 
-    <android.support.v7.widget.AppCompatTextView
+    <TextView
         android:id="@+id/account_host"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
diff --git a/ring-android/app/src/main/res/values/strings.xml b/ring-android/app/src/main/res/values/strings.xml
index 50bcee0..23f88fa 100644
--- a/ring-android/app/src/main/res/values/strings.xml
+++ b/ring-android/app/src/main/res/values/strings.xml
@@ -175,10 +175,10 @@
 
     <!-- MenuHeaderView -->
     <string name="profile">My profile</string>
-    <string name="profile_message_warning">This is shared with your contacts</string>
+    <string name="profile_message_warning">Your profile is only shared with your contacts</string>
     <string name="open_the_gallery">Open the gallery</string>
     <string name="take_a_photo">Take a photo</string>
-    <string name="unknowm_if_empty">Unknown if empty</string>
+    <string name="profile_name_hint">Enter your name (optional)</string>
     <string name="unknown">Unknown</string>
 
     <!-- Share fragment -->