ui: QRCode/Share button in a dedicated screen
- removes QRCode/Share button from MenuHeader
- adds a "Share my account" entry in the main menu
- displays these elements in a dedicated screen
Change-Id: Ib8b8e827adb0623ee2f53ddd0621d1cdd5b64577
Tuleap: #1123
diff --git a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
index 597ddb0..38bf211 100644
--- a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
@@ -20,7 +20,6 @@
package cx.ring.client;
import android.Manifest;
-import android.app.Activity;
import android.app.AlertDialog;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
@@ -43,7 +42,6 @@
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.NavigationView;
import android.support.v4.app.ActivityCompat;
@@ -52,22 +50,13 @@
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
-import android.transition.Explode;
-import android.transition.Fade;
import android.util.Log;
-import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.WriterException;
-import com.google.zxing.common.BitMatrix;
-import com.google.zxing.qrcode.QRCodeWriter;
-
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -77,12 +66,12 @@
import butterknife.BindView;
import butterknife.ButterKnife;
-import butterknife.OnClick;
import cx.ring.R;
import cx.ring.fragments.AboutFragment;
import cx.ring.fragments.AccountsManagementFragment;
import cx.ring.fragments.ContactListFragment;
import cx.ring.fragments.SettingsFragment;
+import cx.ring.fragments.ShareFragment;
import cx.ring.fragments.SmartListFragment;
import cx.ring.model.CallContact;
import cx.ring.model.account.Account;
@@ -99,7 +88,7 @@
static final String TAG = HomeActivity.class.getSimpleName();
public static final int REQUEST_CODE_PREFERENCES = 1;
- public static final int REQUEST_CODE_CREATE_ACCOUNT= 7;
+ public static final int REQUEST_CODE_CREATE_ACCOUNT = 7;
public static final int REQUEST_CODE_CALL = 3;
public static final int REQUEST_CODE_CONVERSATION = 4;
@@ -111,6 +100,8 @@
private static final String HOME_TAG = "Home";
private static final String ACCOUNTS_TAG = "Accounts";
private static final String ABOUT_TAG = "About";
+ private static final String SETTINGS_TAG = "Prefs";
+ private static final String SHARE_TAG = "Share";
private LocalService service;
@@ -217,27 +208,6 @@
}
}
- /**
- * Listener given to the MenuHeaderView to be notified when the QRCode is clicked
- */
- private View.OnClickListener mQRCodeClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- QRCodeFragment zoom = QRCodeFragment.newInstance(fMenuHead.getSelectedAccount().getShareURI());
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- zoom.setEnterTransition(new Explode());
- zoom.setReturnTransition(new Fade());
- }
-
- mNavigationDrawer.closeDrawers();
- getSupportFragmentManager()
- .beginTransaction()
- .replace(R.id.drawer_layout, zoom)
- .addToBackStack(null)
- .commit();
- }
- };
-
final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -539,7 +509,6 @@
fMenuHead = new MenuHeaderView(HomeActivity.this);
fMenuHead.setCallbacks(service);
fMenu.addHeaderView(fMenuHead);
- fMenuHead.setQRCodeListener(mQRCodeClickListener);
}
FragmentManager fragmentManager = getFragmentManager();
@@ -589,12 +558,12 @@
}
break;
case REQUEST_CODE_PHOTO:
- if(resultCode == RESULT_OK && data != null){
+ if (resultCode == RESULT_OK && data != null) {
fMenuHead.updatePhoto((Bitmap) data.getExtras().get("data"));
}
break;
case REQUEST_CODE_GALLERY:
- if(resultCode == RESULT_OK && data != null) {
+ if (resultCode == RESULT_OK && data != null) {
fMenuHead.updatePhoto(data.getData());
}
break;
@@ -642,12 +611,31 @@
case R.id.menuitem_prefs:
this.goToSettings();
break;
+ case R.id.menuitem_share:
+ goToShare();
+ break;
default:
return false;
}
return true;
}
+ private void goToShare() {
+ if (fContent instanceof ShareFragment) {
+ return;
+ }
+ fContent = new ShareFragment();
+
+ if (fMenuHead != null) {
+ fMenuHead.registerAccountSelectionListener((MenuHeaderView.MenuHeaderAccountSelectionListener) fContent);
+ }
+
+ Bundle args = new Bundle();
+ args.putString(ShareFragment.ARG_URI, fMenuHead.getSelectedAccount().getShareURI());
+ fContent.setArguments(args);
+ getFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.main_frame, fContent, SHARE_TAG).addToBackStack(SHARE_TAG).commit();
+ }
+
public void goToSettings() {
if (fMenu != null) {
MenuItem settingsItem = fMenu.getMenu().findItem(R.id.menuitem_prefs);
@@ -665,8 +653,8 @@
getFragmentManager()
.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
- .replace(R.id.main_frame, fContent, "Prefs")
- .addToBackStack("Prefs")
+ .replace(R.id.main_frame, fContent, SETTINGS_TAG)
+ .addToBackStack(SETTINGS_TAG)
.commit();
}
@@ -750,90 +738,4 @@
}
}
}
-
- /**
- * Inner fragment used to show a fullscreen QRCode
- * Only used here, may need its own file if used somewhere else
- */
- public static class QRCodeFragment extends android.support.v4.app.Fragment {
-
- private static String ARG_URI = "QRCodeFragment.URI";
-
- @BindView(R.id.qr_image)
- ImageView mQrImage;
-
- /**
- * Create a new QRCodeFragment
- *
- * @param uri the string representing the uri to be displayed
- * @return a new QRCodeFragment instance
- */
- public static QRCodeFragment newInstance(String uri) {
- Bundle args = new Bundle();
- args.putString(ARG_URI, uri);
- QRCodeFragment fragment = new QRCodeFragment();
- fragment.setArguments(args);
- return fragment;
- }
-
- @Nullable
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View rootView = inflater.inflate(R.layout.frag_qrcode, container, false);
- ButterKnife.bind(this,rootView);
-
- final String uriToShow = getArguments().getString(ARG_URI);
-
- mQrImage.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
- @Override
- public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
- if (uriToShow != null) {
- Bitmap qrBitmap = encodeStringAsQrBitmap(uriToShow, mQrImage.getMeasuredWidth());
- mQrImage.setImageBitmap(qrBitmap);
- }
- }
- });
- return rootView;
- }
-
- @OnClick(R.id.exit)
- @SuppressWarnings("unused")
- void onExitClickListener(View view) {
- getFragmentManager().popBackStack();
- }
-
- /**
- * @param input uri to be displayed
- * @param qrWindowPixels the ImageView size that will contain the QRcode
- * @return the resulting image
- */
- public static Bitmap encodeStringAsQrBitmap(String input, int qrWindowPixels) {
- QRCodeWriter qrWriter = new QRCodeWriter();
- BitMatrix qrImageMatrix;
- try {
- qrImageMatrix = qrWriter.encode(input, BarcodeFormat.QR_CODE, qrWindowPixels, qrWindowPixels);
- } catch (WriterException e) {
- Log.e(TAG, "Error while encoding QR", e);
- return null;
- }
-
- int qrImageWidth = qrImageMatrix.getWidth();
- int qrImageHeight = qrImageMatrix.getHeight();
- int[] pixels = new int[qrImageWidth * qrImageHeight];
-
- final int BLACK = 0x00FFFFFF;
- final int WHITE = 0xFFFFFFFF;
-
- for (int row = 0; row < qrImageHeight; row++) {
- int offset = row * qrImageWidth;
- for (int column = 0; column < qrImageWidth; column++) {
- pixels[offset + column] = qrImageMatrix.get(column, row) ? BLACK : WHITE;
- }
- }
-
- Bitmap bitmap = Bitmap.createBitmap(qrImageWidth, qrImageHeight, Bitmap.Config.ARGB_8888);
- bitmap.setPixels(pixels, 0, qrImageWidth, 0, 0, qrImageWidth, qrImageHeight);
- return bitmap;
- }
- }
}
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ShareFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ShareFragment.java
new file mode 100644
index 0000000..248ab4b
--- /dev/null
+++ b/ring-android/app/src/main/java/cx/ring/fragments/ShareFragment.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2015-2016 Savoir-faire Linux Inc.
+ *
+ * Authors: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
+ * Alexandre Lision <alexandre.lision@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package cx.ring.fragments;
+
+import android.app.Fragment;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.ImageView;
+
+import butterknife.BindString;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import cx.ring.R;
+import cx.ring.client.HomeActivity;
+import cx.ring.model.account.Account;
+import cx.ring.utils.QRCodeUtils;
+import cx.ring.views.MenuHeaderView;
+
+public class ShareFragment extends Fragment implements MenuHeaderView.MenuHeaderAccountSelectionListener {
+
+ public static final String ARG_URI = "ShareFragment.URI";
+
+ @BindView(R.id.qr_image)
+ ImageView mQrImage;
+
+ @BindView(R.id.share_button)
+ Button mShareButton;
+
+ @BindString(R.string.account_contact_me)
+ String mAccountCountactMe;
+
+ @BindString(R.string.share_via)
+ String mShareVia;
+
+ String mUriToShow;
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ ((HomeActivity) getActivity()).setToolbarState(false, R.string.menu_item_share);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
+ final View inflatedView = inflater.inflate(R.layout.frag_share, parent, false);
+ ButterKnife.bind(this, inflatedView);
+
+ mUriToShow = getArguments().getString(ARG_URI);
+
+ mQrImage.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+ @Override
+ public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
+ updateView();
+ }
+ });
+
+ return inflatedView;
+ }
+
+ private void updateView() {
+ if (!TextUtils.isEmpty(mUriToShow)) {
+ Bitmap qrBitmap = QRCodeUtils.encodeStringAsQrBitmap(mUriToShow, mQrImage.getMeasuredWidth());
+ mQrImage.setImageBitmap(qrBitmap);
+ }
+ }
+
+ @OnClick(R.id.share_button)
+ public void shareRingAccount() {
+ if (!TextUtils.isEmpty(mUriToShow)) {
+ Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
+ sharingIntent.setType("text/plain");
+ String shareBody = getString(R.string.account_share_body, mUriToShow);
+ sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, mAccountCountactMe);
+ sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
+ startActivity(Intent.createChooser(sharingIntent, mShareVia));
+ }
+ }
+
+ @Override
+ public void accountSelected(Account account) {
+ mUriToShow = account.getShareURI();
+ updateView();
+ }
+}
diff --git a/ring-android/app/src/main/java/cx/ring/utils/QRCodeUtils.java b/ring-android/app/src/main/java/cx/ring/utils/QRCodeUtils.java
new file mode 100644
index 0000000..ce6008a
--- /dev/null
+++ b/ring-android/app/src/main/java/cx/ring/utils/QRCodeUtils.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2004-2016 Savoir-faire Linux Inc.
+ *
+ * Author: Thibault Wittemberg <thibault.wittemberg@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package cx.ring.utils;
+
+import android.graphics.Bitmap;
+import android.util.Log;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.WriterException;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
+
+public class QRCodeUtils {
+
+ private final static String TAG = QRCodeUtils.class.getName();
+
+ /**
+ * @param input uri to be displayed
+ * @param qrWindowPixels the ImageView size that will contain the QRcode
+ * @return the resulting image
+ */
+ public static Bitmap encodeStringAsQrBitmap(String input, int qrWindowPixels) {
+ QRCodeWriter qrWriter = new QRCodeWriter();
+ BitMatrix qrImageMatrix;
+ try {
+ qrImageMatrix = qrWriter.encode(input, BarcodeFormat.QR_CODE, qrWindowPixels, qrWindowPixels);
+ } catch (WriterException e) {
+ Log.e(TAG, "Error while encoding QR", e);
+ return null;
+ }
+
+ int qrImageWidth = qrImageMatrix.getWidth();
+ int qrImageHeight = qrImageMatrix.getHeight();
+ int[] pixels = new int[qrImageWidth * qrImageHeight];
+
+ final int BLACK = 0x00FFFFFF;
+ final int WHITE = 0xFFFFFFFF;
+
+ for (int row = 0; row < qrImageHeight; row++) {
+ int offset = row * qrImageWidth;
+ for (int column = 0; column < qrImageWidth; column++) {
+ pixels[offset + column] = qrImageMatrix.get(column, row) ? BLACK : WHITE;
+ }
+ }
+
+ Bitmap bitmap = Bitmap.createBitmap(qrImageWidth, qrImageHeight, Bitmap.Config.ARGB_8888);
+ bitmap.setPixels(pixels, 0, qrImageWidth, 0, 0, qrImageWidth, qrImageHeight);
+ return bitmap;
+ }
+
+}
diff --git a/ring-android/app/src/main/java/cx/ring/views/MenuHeaderView.java b/ring-android/app/src/main/java/cx/ring/views/MenuHeaderView.java
index 7de246b..7a2fcfe 100644
--- a/ring-android/app/src/main/java/cx/ring/views/MenuHeaderView.java
+++ b/ring-android/app/src/main/java/cx/ring/views/MenuHeaderView.java
@@ -48,6 +48,7 @@
import android.widget.TextView;
import java.io.ByteArrayOutputStream;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -76,15 +77,9 @@
@BindView(R.id.account_selection)
Spinner mSpinnerAccounts;
- @BindView(R.id.share_btn)
- ImageButton mShareBtn;
-
@BindView(R.id.addaccount_btn)
Button mNewAccountBtn;
- @BindView(R.id.qr_image)
- ImageButton mQrImage;
-
@BindView(R.id.user_photo)
ImageView mUserImage;
@@ -94,6 +89,8 @@
private ImageView mProfilePhoto;
private VCard mVCardProfile;
+ private List<WeakReference<MenuHeaderAccountSelectionListener>> mListeners;
+
public MenuHeaderView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initViews();
@@ -118,12 +115,12 @@
mAccountAdapter.setSelectedAccount(pos);
service.setAccountOrder(mAccountAdapter.getAccountOrder());
}
- String shareUri = getSelectedAccount().getShareURI();
- if (!shareUri.isEmpty()) {
- Bitmap qrBitmap = HomeActivity.QRCodeFragment.encodeStringAsQrBitmap(shareUri, mQrImage.getWidth());
- mQrImage.setImageBitmap(qrBitmap);
- } else {
- mQrImage.setImageBitmap(null);
+
+ for (WeakReference<MenuHeaderAccountSelectionListener> weakListener : mListeners) {
+ MenuHeaderAccountSelectionListener listener = weakListener.get();
+ if (listener != null) {
+ listener.accountSelected(getSelectedAccount());
+ }
}
}
@@ -136,6 +133,10 @@
}
}
+ public void registerAccountSelectionListener(MenuHeaderAccountSelectionListener listener) {
+ mListeners.add(new WeakReference<>(listener));
+ }
+
public void updateUserView() {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Log.d(TAG, "updateUserView");
@@ -182,6 +183,8 @@
mVCardProfile = VCardUtils.loadLocalProfileFromDisk(getContext());
updateUserView();
+
+ mListeners = new ArrayList<>();
}
@OnClick(R.id.profile_container)
@@ -273,37 +276,16 @@
public void updateAccounts(List<Account> accounts) {
if (accounts.isEmpty()) {
mNewAccountBtn.setVisibility(View.VISIBLE);
- mShareBtn.setVisibility(View.GONE);
mSpinnerAccounts.setVisibility(View.GONE);
- mQrImage.setVisibility(View.GONE);
} else {
mNewAccountBtn.setVisibility(View.GONE);
- mShareBtn.setVisibility(View.VISIBLE);
mSpinnerAccounts.setVisibility(View.VISIBLE);
- mQrImage.setVisibility(View.VISIBLE);
mAccountAdapter.replaceAll(accounts);
mSpinnerAccounts.setSelection(0);
}
}
- public void setQRCodeListener(OnClickListener l) {
- mQrImage.setOnClickListener(l);
+ public interface MenuHeaderAccountSelectionListener {
+ void accountSelected(Account account);
}
-
- /**
- * Click listeners
- */
-
- @OnClick(R.id.share_btn)
- public void shareButtonClicked() {
- Account account = mAccountAdapter.getSelectedAccount();
- String shareUri = account.getShareURI();
- Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
- sharingIntent.setType("text/plain");
- String shareBody = getContext().getString(R.string.account_share_body, shareUri);
- sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getContext().getString(R.string.account_contact_me));
- sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
- getContext().startActivity(Intent.createChooser(sharingIntent, getContext().getText(R.string.share_via)));
- }
-
}
diff --git a/ring-android/app/src/main/res/drawable-hdpi/ic_share_black_24dp.png b/ring-android/app/src/main/res/drawable-hdpi/ic_share_black_24dp.png
new file mode 100644
index 0000000..20ba480
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-hdpi/ic_share_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-mdpi/ic_share_black_24dp.png b/ring-android/app/src/main/res/drawable-mdpi/ic_share_black_24dp.png
new file mode 100644
index 0000000..f02d360
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-mdpi/ic_share_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-xhdpi/ic_share_black_24dp.png b/ring-android/app/src/main/res/drawable-xhdpi/ic_share_black_24dp.png
new file mode 100644
index 0000000..81c80b7
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-xhdpi/ic_share_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-xxhdpi/ic_share_black_24dp.png b/ring-android/app/src/main/res/drawable-xxhdpi/ic_share_black_24dp.png
new file mode 100644
index 0000000..784933a
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-xxhdpi/ic_share_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-xxxhdpi/ic_share_black_24dp.png b/ring-android/app/src/main/res/drawable-xxxhdpi/ic_share_black_24dp.png
new file mode 100644
index 0000000..5a8544c
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-xxxhdpi/ic_share_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/layout/frag_menu_header.xml b/ring-android/app/src/main/res/layout/frag_menu_header.xml
index e52effc..6f0a299 100644
--- a/ring-android/app/src/main/res/layout/frag_menu_header.xml
+++ b/ring-android/app/src/main/res/layout/frag_menu_header.xml
@@ -35,6 +35,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/anchor"
+ android:layout_toEndOf="@+id/anchor"
android:layout_toRightOf="@+id/anchor"
android:src="@drawable/ic_action_edit"
app:backgroundTint="@color/transparent_light"
@@ -56,14 +57,6 @@
</RelativeLayout>
- <ImageButton
- android:id="@+id/qr_image"
- android:layout_width="85dp"
- android:layout_height="85dp"
- android:layout_below="@+id/profile_container"
- android:layout_centerHorizontal="true"
- android:background="@null" />
-
<Spinner
android:id="@+id/account_selection"
android:layout_width="wrap_content"
@@ -72,24 +65,12 @@
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentStart="true"
- android:layout_below="@+id/qr_image"
- android:layout_toStartOf="@+id/share_btn"
+ android:layout_below="@+id/profile_container"
+ android:layout_toEndOf="@+id/profile_container"
+ android:layout_toRightOf="@+id/profile_container"
android:visibility="visible"
tools:listitem="@layout/item_account_selected" />
- <ImageButton
- android:id="@+id/share_btn"
- style="?android:attr/borderlessButtonStyle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignBottom="@+id/qr_image"
- android:layout_alignTop="@+id/qr_image"
- android:layout_toEndOf="@+id/qr_image"
- android:layout_toRightOf="@+id/qr_image"
- android:src="@drawable/ic_share_white_24dp"
- android:text="@string/share_number"
- android:visibility="visible" />
-
<Button
android:id="@+id/addaccount_btn"
style="@style/Widget.AppCompat.Button.Borderless"
diff --git a/ring-android/app/src/main/res/layout/frag_qrcode.xml b/ring-android/app/src/main/res/layout/frag_qrcode.xml
deleted file mode 100644
index 4f5ef4f..0000000
--- a/ring-android/app/src/main/res/layout/frag_qrcode.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clickable="true"
- android:background="@color/black">
-
- <ImageButton
- android:id="@+id/exit"
- android:layout_width="48dp"
- android:layout_height="48dp"
- android:layout_alignParentRight="true"
- android:layout_alignParentTop="true"
- android:layout_marginTop="20dp"
- android:layout_marginRight="20dp"
- android:background="@null"
- android:src="@drawable/ic_action_remove" />
-
- <ImageView
- android:id="@+id/qr_image"
- android:layout_width="300dp"
- android:layout_height="300dp"
- android:layout_centerHorizontal="true"
- android:layout_centerInParent="true"
- android:background="@null" />
-
-</RelativeLayout>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/layout/frag_share.xml b/ring-android/app/src/main/res/layout/frag_share.xml
new file mode 100644
index 0000000..28c03f9
--- /dev/null
+++ b/ring-android/app/src/main/res/layout/frag_share.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <TextView
+ android:id="@+id/textView"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_above="@+id/qr_image_panel"
+ android:layout_alignEnd="@+id/qr_image_panel"
+ android:layout_alignLeft="@+id/qr_image_panel"
+ android:layout_alignRight="@+id/qr_image_panel"
+ android:layout_alignStart="@+id/qr_image_panel"
+ android:paddingBottom="24sp"
+ android:paddingTop="16sp"
+ android:text="@string/share_message"
+ android:textColor="@color/text_color_primary"
+ android:textSize="16sp" />
+
+ <LinearLayout
+ android:id="@+id/qr_image_panel"
+ android:layout_width="300dp"
+ android:layout_height="300dp"
+ android:layout_centerHorizontal="true"
+ android:layout_centerInParent="true"
+ android:background="@color/black"
+ android:padding="10dp">
+
+ <ImageView
+ android:id="@+id/qr_image"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@null" />
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:background="@color/color_primary_dark">
+
+ <android.support.v7.widget.AppCompatButton
+ android:id="@+id/share_button"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?attr/selectableItemBackground"
+ android:paddingBottom="5dp"
+ android:paddingTop="5dp"
+ android:text="@string/share_your_account_information"
+ android:textColor="@color/white" />
+
+ </LinearLayout>
+
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/menu/drawer.xml b/ring-android/app/src/main/res/menu/drawer.xml
index 2c2cc83..f9493d5 100644
--- a/ring-android/app/src/main/res/menu/drawer.xml
+++ b/ring-android/app/src/main/res/menu/drawer.xml
@@ -15,6 +15,10 @@
android:icon="@drawable/ic_settings_black_24dp"
android:title="@string/menu_item_settings"/>
<item
+ android:id="@+id/menuitem_share"
+ android:icon="@drawable/ic_share_black_24dp"
+ android:title="@string/menu_item_share"/>
+ <item
android:id="@+id/menuitem_about"
android:icon="@drawable/ic_info_black_48dp"
android:title="@string/menu_item_about"/>
diff --git a/ring-android/app/src/main/res/values/strings.xml b/ring-android/app/src/main/res/values/strings.xml
index 4b6d9c6..86cbb38 100644
--- a/ring-android/app/src/main/res/values/strings.xml
+++ b/ring-android/app/src/main/res/values/strings.xml
@@ -57,6 +57,7 @@
<string name="menu_item_home">Home</string>
<string name="menu_item_accounts">Manage accounts</string>
<string name="menu_item_settings">Settings</string>
+ <string name="menu_item_share">Share my contact</string>
<string name="menu_item_about">About Ring</string>
<!-- Dialing Fragment -->
@@ -177,4 +178,9 @@
<string name="unknowm_if_empty">Unknown if empty</string>
<string name="unknown">Unknown</string>
+ <!-- Share fragment -->
+ <string name="share_label">Click on the Ring id to share</string>
+ <string name="share_message">Scan this QRCode with the embedded scanner of the Ring application that wants to communicate with you.</string>
+ <string name="share_your_account_information">Share your contact information</string>
+
</resources>