diff --git a/ring-android/app/src/main/java/cx/ring/client/QRCodeActivity.java b/ring-android/app/src/main/java/cx/ring/client/QRCodeActivity.java
index a797722..3020354 100644
--- a/ring-android/app/src/main/java/cx/ring/client/QRCodeActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/QRCodeActivity.java
@@ -22,7 +22,6 @@
 
 import android.content.Context;
 import android.os.Bundle;
-import android.view.View;
 
 import com.google.android.material.tabs.TabLayout;
 
@@ -47,36 +46,28 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_qrcode);
-        SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager());
+
         ViewPager viewPager = findViewById(R.id.view_pager);
-        viewPager.setAdapter(sectionsPagerAdapter);
+        viewPager.setAdapter(new SectionsPagerAdapter(this, getSupportFragmentManager()));
         TabLayout tabs = findViewById(R.id.tabs);
         tabs.setupWithViewPager(viewPager);
 
         Toolbar toolbar = findViewById(R.id.qrToolbar);
-
         setSupportActionBar(toolbar);
         ActionBar supportActionBar = getSupportActionBar();
-
-
         if (supportActionBar != null) {
             supportActionBar.setDisplayHomeAsUpEnabled(true);
             supportActionBar.setDisplayShowHomeEnabled(true);
-
         }
-
-        toolbar.setNavigationOnClickListener((View v) ->
-                finish());
+        toolbar.setNavigationOnClickListener(v -> finish());
     }
 
-
-    public class SectionsPagerAdapter extends FragmentPagerAdapter {
-
+    class SectionsPagerAdapter extends FragmentPagerAdapter {
         @StringRes
         private final int[] TAB_TITLES = new int[]{R.string.tab_code, R.string.tab_scan};
         private final Context mContext;
 
-        public SectionsPagerAdapter(Context context, FragmentManager fm) {
+        SectionsPagerAdapter(Context context, FragmentManager fm) {
             super(fm);
             mContext = context;
         }
@@ -91,7 +82,6 @@
                 default:
                     return null;
             }
-
         }
 
         @Nullable
@@ -102,8 +92,7 @@
 
         @Override
         public int getCount() {
-            // Show 2 total pages.
-            return 2;
+            return TAB_TITLES.length;
         }
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/share/ShareFragment.java b/ring-android/app/src/main/java/cx/ring/share/ShareFragment.java
index 541789d..299ff10 100644
--- a/ring-android/app/src/main/java/cx/ring/share/ShareFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/share/ShareFragment.java
@@ -64,9 +64,7 @@
     @BindString(R.string.share_via)
     protected String mShareVia;
 
-
     private String mUriToShow;
-    private int mQRCodeSize = 0;
     private boolean isShareLocked = false;
 
     @Override
@@ -82,15 +80,7 @@
     @Override
     public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
         setHasOptionsMenu(true);
-
-        mQrImage.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
-            mQRCodeSize = mQrImage.getMeasuredWidth();
-
-            // when view is ready, we search for contact infos to display
-            presenter.loadContactInformation();
-        });
     }
 
     @Override
@@ -104,7 +94,7 @@
         switch (item.getItemId()) {
             case R.id.menu_qr_share:
                 if (!isShareLocked) {
-                    shareRingAccount();
+                    shareAccount();
                     return true;
                 } else {
                     return false;
@@ -115,14 +105,13 @@
     }
 
     @OnClick(R.id.share_button)
-    public void shareClicked(View view) {
+    void shareClicked(View view) {
         if(!isShareLocked) {
-            shareRingAccount();
+            shareAccount();
         }
     }
 
-
-    public void shareRingAccount() {
+    private void shareAccount() {
         if (!TextUtils.isEmpty(mUriToShow)) {
             Intent sharingIntent = new Intent(Intent.ACTION_SEND);
             sharingIntent.setType("text/plain");
@@ -140,7 +129,7 @@
             return;
         }
 
-        if (qrCodeData == null || mQRCodeSize <= 0) {
+        if (qrCodeData == null) {
             mQrImage.setVisibility(View.INVISIBLE);
             mShareInstruction.setText(mShareMessageNoAccount);
         } else {
@@ -152,10 +141,6 @@
         }
 
         mUriToShow = viewModel.getAccountShareUri();
-        if (TextUtils.isEmpty(mUriToShow)) {
-            isShareLocked = true;
-        } else {
-            isShareLocked = false;
-        }
+        isShareLocked = TextUtils.isEmpty(mUriToShow);
     }
 }
diff --git a/ring-android/app/src/main/res/layout/activity_qrcode.xml b/ring-android/app/src/main/res/layout/activity_qrcode.xml
index 4a9e0a9..5a63250 100644
--- a/ring-android/app/src/main/res/layout/activity_qrcode.xml
+++ b/ring-android/app/src/main/res/layout/activity_qrcode.xml
@@ -19,7 +19,7 @@
             android:layout_weight="1"
             android:background="?attr/colorPrimary"
             app:layout_scrollFlags="scroll|enterAlways"
-            app:popupTheme="@style/AppTheme"></androidx.appcompat.widget.Toolbar>
+            app:popupTheme="@style/AppTheme" />
 
         <com.google.android.material.tabs.TabLayout
             android:id="@+id/tabs"
