migrate to java 8

Change-Id: I5bafd6e6b9d3b482ff18379043f6635f248c293c
diff --git a/ring-android/app/build.gradle b/ring-android/app/build.gradle
index 3cd53f6..6647b44 100644
--- a/ring-android/app/build.gradle
+++ b/ring-android/app/build.gradle
@@ -71,8 +71,8 @@
         release.setRoot('build-types/release')
     }
     compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_7
-        targetCompatibility JavaVersion.VERSION_1_7
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
     }
     buildTypes {
         release {
diff --git a/ring-android/app/src/main/java/cx/ring/about/AboutBottomSheetDialogFragment.java b/ring-android/app/src/main/java/cx/ring/about/AboutBottomSheetDialogFragment.java
index 8c47502..4caeec4 100644
--- a/ring-android/app/src/main/java/cx/ring/about/AboutBottomSheetDialogFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/about/AboutBottomSheetDialogFragment.java
@@ -46,7 +46,6 @@
 
     @Override
     public void setupDialog(Dialog dialog, int style) {
-        super.setupDialog(dialog, style);
         View contentView = View.inflate(getContext(), R.layout.dialog_about, null);
         dialog.setContentView(contentView);
 
diff --git a/ring-android/app/src/main/java/cx/ring/account/AccountEditionActivity.java b/ring-android/app/src/main/java/cx/ring/account/AccountEditionActivity.java
index e9e5dd0..d837076 100644
--- a/ring-android/app/src/main/java/cx/ring/account/AccountEditionActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/account/AccountEditionActivity.java
@@ -27,7 +27,6 @@
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
@@ -210,17 +209,12 @@
     @NonNull
     private AlertDialog createDeleteDialog() {
         Activity ownerActivity = this;
-        AlertDialog.Builder builder = new AlertDialog.Builder(ownerActivity);
-        builder.setMessage(R.string.account_delete_dialog_message).setTitle(R.string.account_delete_dialog_title)
-                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int whichButton) {
-                        mEditionPresenter.removeAccount();
-                    }
-                })
-                .setNegativeButton(android.R.string.cancel, null);
-
-        AlertDialog alertDialog = builder.create();
+        AlertDialog alertDialog = new AlertDialog.Builder(ownerActivity)
+                .setMessage(R.string.account_delete_dialog_message)
+                .setTitle(R.string.account_delete_dialog_title)
+                .setPositiveButton(android.R.string.ok, (dialog, whichButton) -> mEditionPresenter.removeAccount())
+                .setNegativeButton(android.R.string.cancel, null)
+                .create();
         alertDialog.setOwnerActivity(ownerActivity);
         return alertDialog;
     }
@@ -240,16 +234,13 @@
 
     @Override
     public void displayAccountName(final String name) {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar);
-                setSupportActionBar(toolbar);
-                ActionBar actionBar = getSupportActionBar();
-                if (actionBar != null) {
-                    actionBar.setDisplayHomeAsUpEnabled(true);
-                    actionBar.setTitle(name);
-                }
+        RingApplication.uiHandler.post(() -> {
+            Toolbar toolbar = findViewById(R.id.main_toolbar);
+            setSupportActionBar(toolbar);
+            ActionBar actionBar = getSupportActionBar();
+            if (actionBar != null) {
+                actionBar.setDisplayHomeAsUpEnabled(true);
+                actionBar.setTitle(name);
             }
         });
 
diff --git a/ring-android/app/src/main/java/cx/ring/account/AccountWizard.java b/ring-android/app/src/main/java/cx/ring/account/AccountWizard.java
index 5c3182e..0465ed6 100644
--- a/ring-android/app/src/main/java/cx/ring/account/AccountWizard.java
+++ b/ring-android/app/src/main/java/cx/ring/account/AccountWizard.java
@@ -25,7 +25,6 @@
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.ProgressDialog;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
@@ -121,24 +120,21 @@
 
     @Override
     public void saveProfile(final String accountID, final RingAccountViewModel ringAccountViewModel) {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                RingAccountViewModelImpl ringAccountViewModelImpl = (RingAccountViewModelImpl) ringAccountViewModel;
+        runOnUiThread(() -> {
+            RingAccountViewModelImpl ringAccountViewModelImpl = (RingAccountViewModelImpl) ringAccountViewModel;
 
-                VCard vcard = new VCard();
-                vcard.setFormattedName(new FormattedName(ringAccountViewModelImpl.getFullName()));
-                vcard.setUid(new Uid(ringAccountViewModelImpl.getUsername()));
-                ByteArrayOutputStream stream = new ByteArrayOutputStream();
-                if (ringAccountViewModelImpl.getPhoto() != null) {
-                    ringAccountViewModelImpl.getPhoto().compress(Bitmap.CompressFormat.PNG, 100, stream);
-                    Photo photoVCard = new Photo(stream.toByteArray(), ImageType.PNG);
-                    vcard.removeProperties(Photo.class);
-                    vcard.addPhoto(photoVCard);
-                }
-                vcard.removeProperties(RawProperty.class);
-                VCardUtils.saveLocalProfileToDisk(vcard, accountID, getFilesDir());
+            VCard vcard = new VCard();
+            vcard.setFormattedName(new FormattedName(ringAccountViewModelImpl.getFullName()));
+            vcard.setUid(new Uid(ringAccountViewModelImpl.getUsername()));
+            ByteArrayOutputStream stream = new ByteArrayOutputStream();
+            if (ringAccountViewModelImpl.getPhoto() != null) {
+                ringAccountViewModelImpl.getPhoto().compress(Bitmap.CompressFormat.PNG, 100, stream);
+                Photo photoVCard = new Photo(stream.toByteArray(), ImageType.PNG);
+                vcard.removeProperties(Photo.class);
+                vcard.addPhoto(photoVCard);
             }
+            vcard.removeProperties(RawProperty.class);
+            VCardUtils.saveLocalProfileToDisk(vcard, accountID, getFilesDir());
         });
     }
 
@@ -172,23 +168,20 @@
 
     @Override
     public void displayProgress(final boolean display) {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (display) {
-                    mProgress = new ProgressDialog(AccountWizard.this);
-                    mProgress.setTitle(R.string.dialog_wait_create);
-                    mProgress.setMessage(getString(R.string.dialog_wait_create_details));
-                    mProgress.setCancelable(false);
-                    mProgress.setCanceledOnTouchOutside(false);
-                    mProgress.show();
-                } else {
-                    if (mProgress != null) {
-                        if (mProgress.isShowing()) {
-                            mProgress.dismiss();
-                        }
-                        mProgress = null;
+        runOnUiThread(() -> {
+            if (display) {
+                mProgress = new ProgressDialog(AccountWizard.this);
+                mProgress.setTitle(R.string.dialog_wait_create);
+                mProgress.setMessage(getString(R.string.dialog_wait_create_details));
+                mProgress.setCancelable(false);
+                mProgress.setCanceledOnTouchOutside(false);
+                mProgress.show();
+            } else {
+                if (mProgress != null) {
+                    if (mProgress.isShowing()) {
+                        mProgress.dismiss();
                     }
+                    mProgress = null;
                 }
             }
         });
@@ -196,115 +189,86 @@
 
     @Override
     public void displayCreationError() {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                Toast.makeText(AccountWizard.this, "Error creating account", Toast.LENGTH_SHORT).show();
-            }
-        });
+        runOnUiThread(() -> Toast.makeText(AccountWizard.this, "Error creating account", Toast.LENGTH_SHORT).show());
     }
 
     @Override
     public void blockOrientation() {
         //orientation is locked during the create of account to avoid the destruction of the thread
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
-            }
-        });
+        runOnUiThread(() -> setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED));
     }
 
     @Override
     public void finish(final boolean affinity) {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (affinity) {
-                    startActivity(new Intent(AccountWizard.this, HomeActivity.class));
-                    finish();
-                } else {
-                    finishAffinity();
-                }
+        runOnUiThread(() -> {
+            if (affinity) {
+                startActivity(new Intent(AccountWizard.this, HomeActivity.class));
+                finish();
+            } else {
+                finishAffinity();
             }
         });
     }
 
     @Override
     public void displayGenericError() {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mAlertDialog != null && mAlertDialog.isShowing()) {
-                    return;
-                }
-                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(AccountWizard.this);
-                dialogBuilder.setPositiveButton(android.R.string.ok, null);
-                dialogBuilder.setTitle(R.string.account_cannot_be_found_title)
-                        .setMessage(R.string.account_cannot_be_found_message);
-                mAlertDialog = dialogBuilder.show();
+        runOnUiThread(() -> {
+            if (mAlertDialog != null && mAlertDialog.isShowing()) {
+                return;
             }
+            mAlertDialog = new AlertDialog.Builder(AccountWizard.this)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .setTitle(R.string.account_cannot_be_found_title)
+                    .setMessage(R.string.account_cannot_be_found_message)
+                    .show();
         });
     }
 
     @Override
     public void displayNetworkError() {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mAlertDialog != null && mAlertDialog.isShowing()) {
-                    return;
-                }
-                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(AccountWizard.this);
-                dialogBuilder.setPositiveButton(android.R.string.ok, null);
-                dialogBuilder.setTitle(R.string.account_no_network_title)
-                        .setMessage(R.string.account_no_network_message);
-                mAlertDialog = dialogBuilder.show();
+        runOnUiThread(() -> {
+            if (mAlertDialog != null && mAlertDialog.isShowing()) {
+                return;
             }
+            mAlertDialog = new AlertDialog.Builder(AccountWizard.this)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .setTitle(R.string.account_no_network_title)
+                    .setMessage(R.string.account_no_network_message)
+                    .show();
         });
     }
 
     @Override
     public void displayCannotBeFoundError() {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mAlertDialog != null && mAlertDialog.isShowing()) {
-                    return;
-                }
-                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(AccountWizard.this);
-                dialogBuilder.setPositiveButton(android.R.string.ok, null);
-                dialogBuilder.setTitle(R.string.account_cannot_be_found_title)
-                        .setMessage(R.string.account_cannot_be_found_message);
-                mAlertDialog = dialogBuilder.show();
+        runOnUiThread(() -> {
+            if (mAlertDialog != null && mAlertDialog.isShowing()) {
+                return;
             }
+            mAlertDialog = new AlertDialog.Builder(AccountWizard.this)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .setTitle(R.string.account_cannot_be_found_title)
+                    .setMessage(R.string.account_cannot_be_found_message)
+                    .show();
         });
     }
 
     @Override
     public void displaySuccessDialog() {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mAlertDialog != null && mAlertDialog.isShowing()) {
-                    return;
-                }
-                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(AccountWizard.this);
-                dialogBuilder.setPositiveButton(android.R.string.ok, null);
-                dialogBuilder.setTitle(R.string.account_device_added_title)
-                        .setMessage(R.string.account_device_added_message);
-                mAlertDialog = dialogBuilder.show();
-                mAlertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
-                    @Override
-                    public void onDismiss(DialogInterface dialogInterface) {
+        runOnUiThread(() -> {
+            if (mAlertDialog != null && mAlertDialog.isShowing()) {
+                return;
+            }
+            mAlertDialog = new AlertDialog.Builder(AccountWizard.this)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .setTitle(R.string.account_device_added_title)
+                    .setMessage(R.string.account_device_added_message)
+                    .setOnDismissListener(dialogInterface -> {
                         setResult(Activity.RESULT_OK, new Intent());
                         //unlock the screen orientation
                         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
                         presenter.successDialogClosed();
-                    }
-                });
-
-            }
+                    })
+                    .show();
         });
     }
 }
diff --git a/ring-android/app/src/main/java/cx/ring/account/AccountsAdapter.java b/ring-android/app/src/main/java/cx/ring/account/AccountsAdapter.java
index 35d7a50..c28d655 100644
--- a/ring-android/app/src/main/java/cx/ring/account/AccountsAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/account/AccountsAdapter.java
@@ -75,11 +75,11 @@
             rowView = inflater.inflate(R.layout.item_account_pref, parent, false);
 
             entryView = new AccountView();
-            entryView.alias = (TextView) rowView.findViewById(R.id.account_alias);
-            entryView.host = (TextView) rowView.findViewById(R.id.account_host);
+            entryView.alias = rowView.findViewById(R.id.account_alias);
+            entryView.host = rowView.findViewById(R.id.account_host);
             entryView.loadingIndicator = rowView.findViewById(R.id.loading_indicator);
-            entryView.errorIndicator = (ImageView) rowView.findViewById(R.id.error_indicator);
-            entryView.enabled = (CheckBox) rowView.findViewById(R.id.account_checked);
+            entryView.errorIndicator = rowView.findViewById(R.id.error_indicator);
+            entryView.enabled = rowView.findViewById(R.id.account_checked);
             entryView.errorIndicator.setColorFilter(parent.getContext().getResources().getColor(R.color.error_red));
             entryView.errorIndicator.setVisibility(View.GONE);
             entryView.loadingIndicator.setVisibility(View.GONE);
@@ -101,13 +101,9 @@
         }
 
         entryView.enabled.setChecked(item.isEnabled());
-        entryView.enabled.setOnClickListener(new View.OnClickListener() {
-
-            @Override
-            public void onClick(View v) {
-                item.setEnabled(!item.isEnabled());
-                mListeners.onItemClicked(item.getAccountID(), item.getDetails());
-            }
+        entryView.enabled.setOnClickListener(v -> {
+            item.setEnabled(!item.isEnabled());
+            mListeners.onItemClicked(item.getAccountID(), item.getDetails());
         });
 
         if (item.isEnabled()) {
diff --git a/ring-android/app/src/main/java/cx/ring/account/ConfirmRevocationDialog.java b/ring-android/app/src/main/java/cx/ring/account/ConfirmRevocationDialog.java
index 698a6b9..8367391 100644
--- a/ring-android/app/src/main/java/cx/ring/account/ConfirmRevocationDialog.java
+++ b/ring-android/app/src/main/java/cx/ring/account/ConfirmRevocationDialog.java
@@ -22,7 +22,6 @@
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DialogFragment;
-import android.content.DialogInterface;
 import android.os.Bundle;
 import android.support.design.widget.TextInputLayout;
 import android.view.View;
@@ -69,26 +68,16 @@
                 .setTitle(mRegisterTitle)
                 .setPositiveButton(R.string.revoke_device_title, null) //Set to null. We override the onclick
                 .setNegativeButton(android.R.string.cancel,
-                        new DialogInterface.OnClickListener() {
-                            public void onClick(DialogInterface dialog, int whichButton) {
-                                dismiss();
-                            }
-                        }
+                        (dialog, whichButton) -> dismiss()
                 )
                 .create();
-        result.setOnShowListener(new DialogInterface.OnShowListener() {
-            @Override
-            public void onShow(DialogInterface dialog) {
-                Button positiveButton = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
-                positiveButton.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View view) {
-                        if (validate()) {
-                            dismiss();
-                        }
-                    }
-                });
-            }
+        result.setOnShowListener(dialog -> {
+            Button positiveButton = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
+            positiveButton.setOnClickListener(view1 -> {
+                if (validate()) {
+                    dismiss();
+                }
+            });
         });
         result.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
         return result;
diff --git a/ring-android/app/src/main/java/cx/ring/account/DeviceAdapter.java b/ring-android/app/src/main/java/cx/ring/account/DeviceAdapter.java
index 86e11ff..5e7d930 100644
--- a/ring-android/app/src/main/java/cx/ring/account/DeviceAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/account/DeviceAdapter.java
@@ -50,9 +50,7 @@
         mCurrentDeviceId = currentDeviceId;
         if (devices != null && !devices.isEmpty()) {
             mDevices.ensureCapacity(devices.size());
-            for (Map.Entry<String, String> e : devices.entrySet()) {
-                mDevices.add(e);
-            }
+            mDevices.addAll(devices.entrySet());
         }
         notifyDataSetChanged();
     }
@@ -79,34 +77,28 @@
         }
         boolean isCurrentDevice = mDevices.get(i).getKey().contentEquals(mCurrentDeviceId);
 
-        TextView devId = (TextView) view.findViewById(R.id.txt_device_id);
+        TextView devId = view.findViewById(R.id.txt_device_id);
         devId.setText(mDevices.get(i).getKey());
 
-        TextView devName = (TextView) view.findViewById(R.id.txt_device_label);
+        TextView devName = view.findViewById(R.id.txt_device_label);
         devName.setText(mDevices.get(i).getValue());
-        ImageButton revokeButton = (ImageButton) view.findViewById(R.id.revoke_button);
-        ImageButton editButton = (ImageButton) view.findViewById(R.id.rename_button);
+        ImageButton revokeButton = view.findViewById(R.id.revoke_button);
+        ImageButton editButton = view.findViewById(R.id.rename_button);
         revokeButton.setVisibility(isCurrentDevice ? View.GONE : View.VISIBLE);
         editButton.setVisibility(isCurrentDevice ? View.VISIBLE : View.GONE);
-        TextView thisDeviceText = (TextView) view.findViewById(R.id.txt_device_thisflag);
+        TextView thisDeviceText = view.findViewById(R.id.txt_device_thisflag);
         thisDeviceText.setVisibility(isCurrentDevice ? View.VISIBLE : View.GONE);
         if (isCurrentDevice) {
-            editButton.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View view) {
-                    if (mListener != null) {
-                        mListener.onDeviceRename();
-                    }
+            editButton.setOnClickListener(view1 -> {
+                if (mListener != null) {
+                    mListener.onDeviceRename();
                 }
             });
         }
 
-        revokeButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                if (mListener != null) {
-                    mListener.onDeviceRevocationAsked(mDevices.get(i).getKey());
-                }
+        revokeButton.setOnClickListener(view12 -> {
+            if (mListener != null) {
+                mListener.onDeviceRevocationAsked(mDevices.get(i).getKey());
             }
         });
 
diff --git a/ring-android/app/src/main/java/cx/ring/account/RegisterNameDialog.java b/ring-android/app/src/main/java/cx/ring/account/RegisterNameDialog.java
index cd4ef5d..6d14447 100644
--- a/ring-android/app/src/main/java/cx/ring/account/RegisterNameDialog.java
+++ b/ring-android/app/src/main/java/cx/ring/account/RegisterNameDialog.java
@@ -22,7 +22,6 @@
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DialogFragment;
-import android.content.DialogInterface;
 import android.os.Bundle;
 import android.support.design.widget.TextInputLayout;
 import android.text.InputFilter;
@@ -100,34 +99,31 @@
     }
 
     private void handleBlockchainResult(final int state, final String name) {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                String actualName = mUsernameTxt.getText().toString();
-                if (actualName.isEmpty()) {
-                    mUsernameTxtBox.setErrorEnabled(false);
-                    mUsernameTxtBox.setError(null);
-                    return;
-                }
+        RingApplication.uiHandler.post(() -> {
+            String actualName = mUsernameTxt.getText().toString();
+            if (actualName.isEmpty()) {
+                mUsernameTxtBox.setErrorEnabled(false);
+                mUsernameTxtBox.setError(null);
+                return;
+            }
 
-                if (actualName.equals(name)) {
-                    switch (state) {
-                        case 0:
-                            // on found
-                            mUsernameTxtBox.setErrorEnabled(true);
-                            mUsernameTxtBox.setError(mUserNameAlreadyTaken);
-                            break;
-                        case 1:
-                            // invalid name
-                            mUsernameTxtBox.setErrorEnabled(true);
-                            mUsernameTxtBox.setError(mInvalidUsername);
-                            break;
-                        default:
-                            // on error
-                            mUsernameTxtBox.setErrorEnabled(false);
-                            mUsernameTxtBox.setError(null);
-                            break;
-                    }
+            if (actualName.equals(name)) {
+                switch (state) {
+                    case 0:
+                        // on found
+                        mUsernameTxtBox.setErrorEnabled(true);
+                        mUsernameTxtBox.setError(mUserNameAlreadyTaken);
+                        break;
+                    case 1:
+                        // invalid name
+                        mUsernameTxtBox.setErrorEnabled(true);
+                        mUsernameTxtBox.setError(mInvalidUsername);
+                        break;
+                    default:
+                        // on error
+                        mUsernameTxtBox.setErrorEnabled(false);
+                        mUsernameTxtBox.setError(null);
+                        break;
                 }
             }
         });
@@ -164,37 +160,24 @@
             dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
         }
 
-        builder.setView(view);
-
-        builder.setMessage(mRegisterMessage)
+        builder.setView(view)
+                .setMessage(mRegisterMessage)
                 .setTitle(mRegisterTitle)
                 .setPositiveButton(android.R.string.ok, null) //Set to null. We override the onclick
                 .setNegativeButton(android.R.string.cancel,
-                        new DialogInterface.OnClickListener() {
-                            public void onClick(DialogInterface dialog, int whichButton) {
-                                dismiss();
-                            }
-                        }
+                        (dialog1, whichButton) -> dismiss()
                 );
 
         AlertDialog result = builder.create();
 
-        result.setOnShowListener(new DialogInterface.OnShowListener() {
+        result.setOnShowListener(dialog12 -> {
 
-            @Override
-            public void onShow(DialogInterface dialog) {
-
-                Button positiveButton = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
-                positiveButton.setOnClickListener(new View.OnClickListener() {
-
-                    @Override
-                    public void onClick(View view) {
-                        if (validate()) {
-                            dismiss();
-                        }
-                    }
-                });
-            }
+            Button positiveButton = ((AlertDialog) dialog12).getButton(AlertDialog.BUTTON_POSITIVE);
+            positiveButton.setOnClickListener(view1 -> {
+                if (validate()) {
+                    dismiss();
+                }
+            });
         });
 
         return result;
diff --git a/ring-android/app/src/main/java/cx/ring/account/RenameDeviceDialog.java b/ring-android/app/src/main/java/cx/ring/account/RenameDeviceDialog.java
index de3256f..777ad9c 100644
--- a/ring-android/app/src/main/java/cx/ring/account/RenameDeviceDialog.java
+++ b/ring-android/app/src/main/java/cx/ring/account/RenameDeviceDialog.java
@@ -21,7 +21,6 @@
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DialogFragment;
-import android.content.DialogInterface;
 import android.os.Bundle;
 import android.support.design.widget.TextInputLayout;
 import android.view.View;
@@ -66,19 +65,13 @@
                 .setPositiveButton(R.string.rename_device_button, null)
                 .setNegativeButton(android.R.string.cancel, null)
                 .create();
-        dialog.setOnShowListener(new DialogInterface.OnShowListener() {
-            @Override
-            public void onShow(final DialogInterface dialog) {
-                Button button = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
-                button.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View view) {
-                        if (validate()) {
-                            dialog.dismiss();
-                        }
-                    }
-                });
-            }
+        dialog.setOnShowListener(dialog1 -> {
+            Button button = ((AlertDialog) dialog1).getButton(AlertDialog.BUTTON_POSITIVE);
+            button.setOnClickListener(view1 -> {
+                if (validate()) {
+                    dialog1.dismiss();
+                }
+            });
         });
         dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
         return dialog;
diff --git a/ring-android/app/src/main/java/cx/ring/account/RingAccountCreationFragment.java b/ring-android/app/src/main/java/cx/ring/account/RingAccountCreationFragment.java
index 82a4572..7ab0df9 100644
--- a/ring-android/app/src/main/java/cx/ring/account/RingAccountCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/RingAccountCreationFragment.java
@@ -150,95 +150,67 @@
 
     @Override
     public void enableTextError() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mUsernameTxtBox.setErrorEnabled(true);
-                mUsernameTxtBox.setError(getString(R.string.looking_for_username_availability));
+        getActivity().runOnUiThread(() -> {
+            mUsernameTxtBox.setErrorEnabled(true);
+            mUsernameTxtBox.setError(getString(R.string.looking_for_username_availability));
 
-            }
         });
     }
 
     @Override
     public void disableTextError() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mUsernameTxtBox.setErrorEnabled(false);
-                mUsernameTxtBox.setError(null);
-            }
+        getActivity().runOnUiThread(() -> {
+            mUsernameTxtBox.setErrorEnabled(false);
+            mUsernameTxtBox.setError(null);
         });
     }
 
     @Override
     public void showExistingNameError() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mUsernameTxtBox.setErrorEnabled(true);
-                mUsernameTxtBox.setError(getString(R.string.username_already_taken));
-            }
+        getActivity().runOnUiThread(() -> {
+            mUsernameTxtBox.setErrorEnabled(true);
+            mUsernameTxtBox.setError(getString(R.string.username_already_taken));
         });
     }
 
     @Override
     public void showInvalidNameError() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mUsernameTxtBox.setErrorEnabled(true);
-                mUsernameTxtBox.setError(getString(R.string.invalid_username));
-            }
+        getActivity().runOnUiThread(() -> {
+            mUsernameTxtBox.setErrorEnabled(true);
+            mUsernameTxtBox.setError(getString(R.string.invalid_username));
         });
     }
 
     @Override
     public void showInvalidPasswordError(final boolean display) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (display) {
-                    mPasswordTxtBox.setError(getString(R.string.error_password_char_count));
-                } else {
-                    mPasswordTxtBox.setError(null);
-                }
+        getActivity().runOnUiThread(() -> {
+            if (display) {
+                mPasswordTxtBox.setError(getString(R.string.error_password_char_count));
+            } else {
+                mPasswordTxtBox.setError(null);
             }
         });
     }
 
     @Override
     public void showNonMatchingPasswordError(final boolean display) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (display) {
-                    mPasswordRepeatTxtBox.setError(getString(R.string.error_passwords_not_equals));
-                } else {
-                    mPasswordRepeatTxtBox.setError(null);
-                }
+        getActivity().runOnUiThread(() -> {
+            if (display) {
+                mPasswordRepeatTxtBox.setError(getString(R.string.error_passwords_not_equals));
+            } else {
+                mPasswordRepeatTxtBox.setError(null);
             }
         });
     }
 
     @Override
     public void displayUsernameBox(final boolean display) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mUsernameBox.setVisibility(display ? View.VISIBLE : View.GONE);
-            }
-        });
+        getActivity().runOnUiThread(() -> mUsernameBox.setVisibility(display ? View.VISIBLE : View.GONE));
     }
 
     @Override
     public void enableNextButton(final boolean enabled) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mCreateAccountButton.setEnabled(enabled);
-            }
-        });
+        getActivity().runOnUiThread(() -> mCreateAccountButton.setEnabled(enabled));
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/account/RingAccountSummaryFragment.java b/ring-android/app/src/main/java/cx/ring/account/RingAccountSummaryFragment.java
index 51ca759..2d09129 100644
--- a/ring-android/app/src/main/java/cx/ring/account/RingAccountSummaryFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/RingAccountSummaryFragment.java
@@ -22,7 +22,6 @@
 
 import android.app.AlertDialog;
 import android.app.ProgressDialog;
-import android.content.DialogInterface;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
@@ -141,72 +140,69 @@
 
     @Override
     public void accountChanged(final Account account) {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                if (account == null) {
-                    Log.w(TAG, "No account to display!");
-                    return;
-                }
-                mDeviceAdapter = new DeviceAdapter(getActivity(), account.getDevices(), account.getDeviceId(),
-                        RingAccountSummaryFragment.this);
-                mDeviceList.setAdapter(mDeviceAdapter);
-
-                int totalHeight = 0;
-                for (int i = 0; i < mDeviceAdapter.getCount(); i++) {
-                    View listItem = mDeviceAdapter.getView(i, null, mDeviceList);
-                    listItem.measure(0, 0);
-                    totalHeight += listItem.getMeasuredHeight();
-                }
-
-                ViewGroup.LayoutParams par = mDeviceList.getLayoutParams();
-                par.height = totalHeight + (mDeviceList.getDividerHeight() * (mDeviceAdapter.getCount() - 1));
-                mDeviceList.setLayoutParams(par);
-                mDeviceList.requestLayout();
-
-                mAccountSwitch.setChecked(account.isEnabled());
-                mAccountNameTxt.setText(account.getAlias());
-                mAccountIdTxt.setText(account.getUsername());
-                String username = account.getRegisteredName();
-                boolean currentRegisteredName = account.registeringUsername;
-                boolean hasRegisteredName = !currentRegisteredName && username != null && !username.isEmpty();
-                registeringNameGroup.setVisibility(currentRegisteredName ? View.VISIBLE : View.GONE);
-                mRegisterNameGroup.setVisibility((!hasRegisteredName && !currentRegisteredName) ? View.VISIBLE : View.GONE);
-                mRegisteredNameGroup.setVisibility(hasRegisteredName ? View.VISIBLE : View.GONE);
-                if (hasRegisteredName) {
-                    mAccountUsernameTxt.setText(username);
-                }
-
-                int color = ContextCompat.getColor(getActivity(), R.color.holo_red_light);
-                String status;
-
-                if (account.isEnabled()) {
-                    if (account.isTrying()) {
-                        status = getString(R.string.account_status_connecting);
-                    } else if (account.needsMigration()) {
-                        status = getString(R.string.account_update_needed);
-                    } else if (account.isInError()) {
-                        status = getString(R.string.account_status_connection_error);
-                    } else if (account.isRegistered()) {
-                        status = getString(R.string.account_status_online);
-                        color = ContextCompat.getColor(getActivity(), R.color.holo_green_dark);
-                    } else {
-                        status = getString(R.string.account_status_unknown);
-                    }
-                } else {
-                    color = ContextCompat.getColor(getActivity(), R.color.darker_gray);
-                    status = getString(R.string.account_status_offline);
-                }
-
-                mAccountStatus.setText(status);
-                Drawable drawable = ContextCompat.getDrawable(getActivity(), R.drawable.static_rounded_background);
-                Drawable wrapped = DrawableCompat.wrap(drawable);
-                DrawableCompat.setTint(wrapped, color);
-                mAccountStatus.setBackground(wrapped);
-
-                mAccountHasPassword = account.getDetailBoolean(ConfigKey.ARCHIVE_HAS_PASSWORD);
-                mPasswordLayout.setVisibility(mAccountHasPassword ? View.VISIBLE : View.GONE);
+        RingApplication.uiHandler.post(() -> {
+            if (account == null) {
+                Log.w(TAG, "No account to display!");
+                return;
             }
+            mDeviceAdapter = new DeviceAdapter(getActivity(), account.getDevices(), account.getDeviceId(),
+                    RingAccountSummaryFragment.this);
+            mDeviceList.setAdapter(mDeviceAdapter);
+
+            int totalHeight = 0;
+            for (int i = 0; i < mDeviceAdapter.getCount(); i++) {
+                View listItem = mDeviceAdapter.getView(i, null, mDeviceList);
+                listItem.measure(0, 0);
+                totalHeight += listItem.getMeasuredHeight();
+            }
+
+            ViewGroup.LayoutParams par = mDeviceList.getLayoutParams();
+            par.height = totalHeight + (mDeviceList.getDividerHeight() * (mDeviceAdapter.getCount() - 1));
+            mDeviceList.setLayoutParams(par);
+            mDeviceList.requestLayout();
+
+            mAccountSwitch.setChecked(account.isEnabled());
+            mAccountNameTxt.setText(account.getAlias());
+            mAccountIdTxt.setText(account.getUsername());
+            String username = account.getRegisteredName();
+            boolean currentRegisteredName = account.registeringUsername;
+            boolean hasRegisteredName = !currentRegisteredName && username != null && !username.isEmpty();
+            registeringNameGroup.setVisibility(currentRegisteredName ? View.VISIBLE : View.GONE);
+            mRegisterNameGroup.setVisibility((!hasRegisteredName && !currentRegisteredName) ? View.VISIBLE : View.GONE);
+            mRegisteredNameGroup.setVisibility(hasRegisteredName ? View.VISIBLE : View.GONE);
+            if (hasRegisteredName) {
+                mAccountUsernameTxt.setText(username);
+            }
+
+            int color = ContextCompat.getColor(getActivity(), R.color.holo_red_light);
+            String status;
+
+            if (account.isEnabled()) {
+                if (account.isTrying()) {
+                    status = getString(R.string.account_status_connecting);
+                } else if (account.needsMigration()) {
+                    status = getString(R.string.account_update_needed);
+                } else if (account.isInError()) {
+                    status = getString(R.string.account_status_connection_error);
+                } else if (account.isRegistered()) {
+                    status = getString(R.string.account_status_online);
+                    color = ContextCompat.getColor(getActivity(), R.color.holo_green_dark);
+                } else {
+                    status = getString(R.string.account_status_unknown);
+                }
+            } else {
+                color = ContextCompat.getColor(getActivity(), R.color.darker_gray);
+                status = getString(R.string.account_status_offline);
+            }
+
+            mAccountStatus.setText(status);
+            Drawable drawable = ContextCompat.getDrawable(getActivity(), R.drawable.static_rounded_background);
+            Drawable wrapped = DrawableCompat.wrap(drawable);
+            DrawableCompat.setTint(wrapped, color);
+            mAccountStatus.setBackground(wrapped);
+
+            mAccountHasPassword = account.getDetailBoolean(ConfigKey.ARCHIVE_HAS_PASSWORD);
+            mPasswordLayout.setVisibility(mAccountHasPassword ? View.VISIBLE : View.GONE);
         });
     }
 
@@ -214,12 +210,10 @@
     BackHandlerInterface
     */
     @Override
-    public boolean onBackPressed() {
+    public void onBackPressed() {
         if (isDisplayingWizard()) {
             hideWizard();
-            return true;
         }
-        return false;
     }
 
     /*
@@ -257,43 +251,34 @@
 
     @Override
     public void showNetworkError() {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mWaitDialog.dismiss();
-                AlertDialog.Builder errorDialog = new AlertDialog.Builder(getActivity());
-                errorDialog.setTitle(R.string.account_export_end_network_title)
-                        .setMessage(R.string.account_export_end_network_message);
-                errorDialog.setPositiveButton(android.R.string.ok, null);
-                errorDialog.show();
-            }
+        RingApplication.uiHandler.post(() -> {
+            mWaitDialog.dismiss();
+            new AlertDialog.Builder(getActivity())
+                    .setTitle(R.string.account_export_end_network_title)
+                    .setMessage(R.string.account_export_end_network_message)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .show();
         });
     }
 
     @Override
     public void showPasswordError() {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mWaitDialog.dismiss();
-                mPasswordLayout.setError(getString(R.string.account_export_end_decryption_message));
-                mRingPassword.setText("");
-            }
+        RingApplication.uiHandler.post(() -> {
+            mWaitDialog.dismiss();
+            mPasswordLayout.setError(getString(R.string.account_export_end_decryption_message));
+            mRingPassword.setText("");
         });
     }
 
     @Override
     public void showGenericError() {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mWaitDialog.dismiss();
-                AlertDialog.Builder errorDialog = new AlertDialog.Builder(getActivity());
-                errorDialog.setTitle(R.string.account_export_end_error_title)
-                        .setMessage(R.string.account_export_end_error_message);
-                errorDialog.setPositiveButton(android.R.string.ok, null);
-                errorDialog.show();
-            }
+        RingApplication.uiHandler.post(() -> {
+            mWaitDialog.dismiss();
+            new AlertDialog.Builder(getActivity())
+                    .setTitle(R.string.account_export_end_error_title)
+                    .setMessage(R.string.account_export_end_error_message)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .show();
         });
     }
 
@@ -381,27 +366,24 @@
 
     @Override
     public void showPIN(final String pin) {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                hideWizard();
-                mWaitDialog.dismiss();
-                mLinkAccountView.setVisibility(View.VISIBLE);
-                mPasswordLayout.setVisibility(View.GONE);
-                mEndBtn.setVisibility(View.VISIBLE);
-                mStartBtn.setVisibility(View.GONE);
+        RingApplication.uiHandler.post(() -> {
+            hideWizard();
+            mWaitDialog.dismiss();
+            mLinkAccountView.setVisibility(View.VISIBLE);
+            mPasswordLayout.setVisibility(View.GONE);
+            mEndBtn.setVisibility(View.VISIBLE);
+            mStartBtn.setVisibility(View.GONE);
 
-                String pined = getString(R.string.account_end_export_infos).replace("%%", pin);
-                final SpannableString styledResultText = new SpannableString(pined);
-                int pos = pined.lastIndexOf(pin);
-                styledResultText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                styledResultText.setSpan(new StyleSpan(Typeface.BOLD), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                styledResultText.setSpan(new RelativeSizeSpan(2.8f), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                mExportInfos.setText(styledResultText);
-                mExportInfos.requestFocus();
+            String pined = getString(R.string.account_end_export_infos).replace("%%", pin);
+            final SpannableString styledResultText = new SpannableString(pined);
+            int pos = pined.lastIndexOf(pin);
+            styledResultText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+            styledResultText.setSpan(new StyleSpan(Typeface.BOLD), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+            styledResultText.setSpan(new RelativeSizeSpan(2.8f), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+            mExportInfos.setText(styledResultText);
+            mExportInfos.requestFocus();
 
-                KeyboardVisibilityManager.hideKeyboard(getActivity(), 0);
-            }
+            KeyboardVisibilityManager.hideKeyboard(getActivity(), 0);
         });
     }
 
@@ -410,49 +392,38 @@
         if (mDeviceAdapter == null) {
             return;
         }
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mDeviceAdapter.setData(devices, currentDeviceId);
-            }
-        });
+        RingApplication.uiHandler.post(() -> mDeviceAdapter.setData(devices, currentDeviceId));
     }
 
     @Override
     public void deviceRevocationEnded(final String device, final int status) {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mWaitDialog.dismiss();
-                int message, title = R.string.account_device_revocation_error_title;
-                switch (status) {
-                    case 0:
-                        title = R.string.account_device_revocation_success_title;
-                        message = R.string.account_device_revocation_success;
-                        break;
-                    case 1:
-                        message = R.string.account_device_revocation_wrong_password;
-                        break;
-                    case 2:
-                        message = R.string.account_device_revocation_unknown_device;
-                        break;
-                    default:
-                        message = R.string.account_device_revocation_error_unknown;
-                }
-                new AlertDialog.Builder(getActivity())
-                        .setTitle(title)
-                        .setMessage(message)
-                        .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialog, int which) {
-                                dialog.dismiss();
-                                if (status == 1) {
-                                    onDeviceRevocationAsked(device);
-                                }
-                            }
-                        })
-                        .show();
+        RingApplication.uiHandler.post(() -> {
+            mWaitDialog.dismiss();
+            int message, title = R.string.account_device_revocation_error_title;
+            switch (status) {
+                case 0:
+                    title = R.string.account_device_revocation_success_title;
+                    message = R.string.account_device_revocation_success;
+                    break;
+                case 1:
+                    message = R.string.account_device_revocation_wrong_password;
+                    break;
+                case 2:
+                    message = R.string.account_device_revocation_unknown_device;
+                    break;
+                default:
+                    message = R.string.account_device_revocation_error_unknown;
             }
+            new AlertDialog.Builder(getActivity())
+                    .setTitle(title)
+                    .setMessage(message)
+                    .setPositiveButton(android.R.string.ok, (dialog, which) -> {
+                        dialog.dismiss();
+                        if (status == 1) {
+                            onDeviceRevocationAsked(device);
+                        }
+                    })
+                    .show();
         });
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/adapters/NumberAdapter.java b/ring-android/app/src/main/java/cx/ring/adapters/NumberAdapter.java
index b584d46..775803e 100644
--- a/ring-android/app/src/main/java/cx/ring/adapters/NumberAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/adapters/NumberAdapter.java
@@ -43,7 +43,7 @@
     public NumberAdapter(Context context, CallContact c, boolean useFullCellForGetView) {
         mContext = context;
         mNumbers = (c != null && c.getPhones() != null) ?
-                c.getPhones() : new ArrayList<Phone>();
+                c.getPhones() : new ArrayList<>();
         mUseFullCellForGetView = useFullCellForGetView;
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/application/RingApplication.java b/ring-android/app/src/main/java/cx/ring/application/RingApplication.java
index e914e20..6379996 100644
--- a/ring-android/app/src/main/java/cx/ring/application/RingApplication.java
+++ b/ring-android/app/src/main/java/cx/ring/application/RingApplication.java
@@ -33,7 +33,6 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 
@@ -41,10 +40,6 @@
 import javax.inject.Named;
 
 import cx.ring.BuildConfig;
-import cx.ring.daemon.Callback;
-import cx.ring.daemon.ConfigurationCallback;
-import cx.ring.daemon.PresenceCallback;
-import cx.ring.daemon.VideoCallback;
 import cx.ring.dependencyinjection.DaggerRingInjectionComponent;
 import cx.ring.dependencyinjection.RingInjectionComponent;
 import cx.ring.dependencyinjection.RingInjectionModule;
@@ -124,13 +119,10 @@
 
     private void setDefaultUncaughtExceptionHandler() {
         try {
-            Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
-                @Override
-                public void uncaughtException(Thread t, Throwable e) {
-                    Log.e(TAG, "Uncaught Exception detected in thread ", e);
-                    android.os.Process.killProcess(android.os.Process.myPid());
-                    System.exit(2);
-                }
+            Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
+                Log.e(TAG, "Uncaught Exception detected in thread ", e);
+                android.os.Process.killProcess(android.os.Process.myPid());
+                System.exit(2);
             });
         } catch (SecurityException e) {
             Log.e(TAG, "Could not set the Default Uncaught Exception Handler", e);
@@ -143,53 +135,47 @@
             return;
         }
 
-        mExecutor.submit(new Callable<Boolean>() {
-            @Override
-            public Boolean call() {
-                try {
+        mExecutor.submit(() -> {
+            try {
 
-                    mDaemonService.startDaemon();
+                mDaemonService.startDaemon();
 
-                    // Check if the camera hardware feature is available.
-                    if (mDeviceRuntimeService.hasVideoPermission() && mHardwareService.isVideoAvailable()) {
-                        //initVideo is called here to give time to the application to initialize hardware cameras
-                        Log.d(TAG, "At least one camera available. Initializing video...");
-                        mHardwareService.initVideo();
-                    } else {
-                        Log.d(TAG, "No camera available");
-                    }
-
-                    ringerModeChanged(((AudioManager) getSystemService(Context.AUDIO_SERVICE)).getRingerMode());
-                    registerReceiver(ringerModeListener, RINGER_FILTER);
-
-                    // load accounts from Daemon
-                    mAccountService.loadAccountsFromDaemon(mPreferencesService.hasNetworkConnected());
-
-                    Intent intent = new Intent(DRING_CONNECTION_CHANGED);
-                    intent.putExtra("connected", mDaemonService.isStarted());
-                    sendBroadcast(intent);
-                } catch (Exception e) {
-                    Log.e(TAG, "DRingService start failed", e);
+                // Check if the camera hardware feature is available.
+                if (mDeviceRuntimeService.hasVideoPermission() && mHardwareService.isVideoAvailable()) {
+                    //initVideo is called here to give time to the application to initialize hardware cameras
+                    Log.d(TAG, "At least one camera available. Initializing video...");
+                    mHardwareService.initVideo();
+                } else {
+                    Log.d(TAG, "No camera available");
                 }
 
-                return true;
+                ringerModeChanged(((AudioManager) getSystemService(Context.AUDIO_SERVICE)).getRingerMode());
+                registerReceiver(ringerModeListener, RINGER_FILTER);
+
+                // load accounts from Daemon
+                mAccountService.loadAccountsFromDaemon(mPreferencesService.hasNetworkConnected());
+
+                Intent intent = new Intent(DRING_CONNECTION_CHANGED);
+                intent.putExtra("connected", mDaemonService.isStarted());
+                sendBroadcast(intent);
+            } catch (Exception e) {
+                Log.e(TAG, "DRingService start failed", e);
             }
+
+            return true;
         });
 
     }
 
     public void terminateDaemon() {
-        Future<Boolean> stopResult = mExecutor.submit(new Callable<Boolean>() {
-            @Override
-            public Boolean call() throws Exception {
-                unregisterReceiver(ringerModeListener);
-                mDaemonService.stopDaemon();
-                Intent intent = new Intent(DRING_CONNECTION_CHANGED);
-                intent.putExtra("connected", mDaemonService.isStarted());
-                sendBroadcast(intent);
+        Future<Boolean> stopResult = mExecutor.submit(() -> {
+            unregisterReceiver(ringerModeListener);
+            mDaemonService.stopDaemon();
+            Intent intent = new Intent(DRING_CONNECTION_CHANGED);
+            intent.putExtra("connected", mDaemonService.isStarted());
+            sendBroadcast(intent);
 
-                return true;
-            }
+            return true;
         });
 
         try {
diff --git a/ring-android/app/src/main/java/cx/ring/client/CallActivity.java b/ring-android/app/src/main/java/cx/ring/client/CallActivity.java
index 8c3b1d0..254dc00 100644
--- a/ring-android/app/src/main/java/cx/ring/client/CallActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/CallActivity.java
@@ -43,7 +43,6 @@
 public class CallActivity extends AppCompatActivity {
     public static final String ACTION_CALL = BuildConfig.APPLICATION_ID + ".action.call";
 
-    private static final String TAG = CallActivity.class.getSimpleName();
     private static final String CALL_FRAGMENT_TAG = "CALL_FRAGMENT_TAG";
 
     /* result code sent in case of call failure */
@@ -67,15 +66,12 @@
         setContentView(R.layout.activity_call_layout);
 
         mMainView = findViewById(R.id.main_call_layout);
-        mMainView.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                dimmed = !dimmed;
-                if (dimmed) {
-                    hideSystemUI();
-                } else {
-                    showSystemUI();
-                }
+        mMainView.setOnClickListener(v -> {
+            dimmed = !dimmed;
+            if (dimmed) {
+                hideSystemUI();
+            } else {
+                showSystemUI();
             }
         });
 
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 db1b83e..3de4102 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
@@ -24,19 +24,16 @@
 import android.app.FragmentTransaction;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
 import android.graphics.Color;
 import android.os.Bundle;
 import android.os.Handler;
-import android.provider.MediaStore;
-import android.support.annotation.NonNull;
 import android.support.design.widget.FloatingActionButton;
 import android.support.design.widget.NavigationView;
-import android.support.v4.app.ActivityCompat;
 import android.support.v4.view.GravityCompat;
 import android.support.v4.widget.DrawerLayout;
+import android.support.v7.app.ActionBar;
 import android.support.v7.app.ActionBarDrawerToggle;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
@@ -213,8 +210,11 @@
 
         if (!isDrawerLocked) {
             mNavigationDrawer.addDrawerListener(mDrawerToggle);
-            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-            getSupportActionBar().setHomeButtonEnabled(true);
+            ActionBar supportActionBar = getSupportActionBar();
+            if (supportActionBar != null) {
+                supportActionBar.setDisplayHomeAsUpEnabled(true);
+                supportActionBar.setHomeButtonEnabled(true);
+            }
         }
 
         if (fNavigation == null && savedInstanceState == null) {
@@ -296,31 +296,13 @@
                 .setMessage(R.string.account_migration_message_dialog)
                 .setIcon(R.drawable.ic_warning)
                 .setCancelable(true)
-                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        dialog.dismiss();
-                        fNavigation.selectSection(RingNavigationFragment.Section.MANAGE);
-                    }
+                .setPositiveButton(android.R.string.ok, (dialog, which) -> {
+                    dialog.dismiss();
+                    fNavigation.selectSection(RingNavigationFragment.Section.MANAGE);
                 })
-                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        dialog.dismiss();
-                    }
-                })
-                .setOnCancelListener(new DialogInterface.OnCancelListener() {
-                    @Override
-                    public void onCancel(DialogInterface dialog) {
-                        dialog.dismiss();
-                    }
-                })
-                .setOnDismissListener(new DialogInterface.OnDismissListener() {
-                    @Override
-                    public void onDismiss(DialogInterface dialog) {
-                        dialog.dismiss();
-                    }
-                })
+                .setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.dismiss())
+                .setOnCancelListener(DialogInterface::dismiss)
+                .setOnDismissListener(DialogInterface::dismiss)
                 .show();
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListFragment.java b/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListFragment.java
index 25f4604..79b9242 100644
--- a/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListFragment.java
@@ -95,39 +95,26 @@
 
     @Override
     public void updateView(final List<CallContact> list) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mBlacklist.setVisibility(View.VISIBLE);
-                if (mBlacklist.getAdapter() != null) {
-                    mAdapter.replaceAll(list);
-                } else {
-                    mAdapter = new BlackListAdapter(list, BlackListFragment.this);
-                    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
-                    mBlacklist.setLayoutManager(layoutManager);
-                    mBlacklist.setAdapter(mAdapter);
-                }
+        getActivity().runOnUiThread(() -> {
+            mBlacklist.setVisibility(View.VISIBLE);
+            if (mBlacklist.getAdapter() != null) {
+                mAdapter.replaceAll(list);
+            } else {
+                mAdapter = new BlackListAdapter(list, BlackListFragment.this);
+                LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
+                mBlacklist.setLayoutManager(layoutManager);
+                mBlacklist.setAdapter(mAdapter);
             }
         });
     }
 
     @Override
     public void hideListView() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mBlacklist.setVisibility(View.GONE);
-            }
-        });
+        getActivity().runOnUiThread(() -> mBlacklist.setVisibility(View.GONE));
     }
 
     @Override
     public void displayEmptyListMessage(final boolean display) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mEmptyTextView.setVisibility(display ? View.VISIBLE : View.GONE);
-            }
-        });
+        getActivity().runOnUiThread(() -> mEmptyTextView.setVisibility(display ? View.VISIBLE : View.GONE));
     }
 }
\ No newline at end of file
diff --git a/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListViewHolder.java b/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListViewHolder.java
index 9ae946a..0525f40 100644
--- a/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListViewHolder.java
+++ b/ring-android/app/src/main/java/cx/ring/contactrequests/BlackListViewHolder.java
@@ -67,12 +67,7 @@
 
         mDisplayname.setText(contact.getRingUsername());
 
-        mButtonUnblock.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                clickListener.onUnblockClicked(contact);
-            }
-        });
+        mButtonUnblock.setOnClickListener(view -> clickListener.onUnblockClicked(contact));
     }
 
     public interface BlackListListeners {
diff --git a/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestViewHolder.java b/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestViewHolder.java
index b4ceb0b..889bc59 100644
--- a/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestViewHolder.java
+++ b/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestViewHolder.java
@@ -60,26 +60,11 @@
     }
 
     public void bind(final ContactRequestListeners clickListerner, final PendingContactRequestsViewModel viewModel) {
-        mButtonAccept.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                clickListerner.onAcceptClick(viewModel);
-            }
-        });
+        mButtonAccept.setOnClickListener(v -> clickListerner.onAcceptClick(viewModel));
 
-        mButtonRefuse.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                clickListerner.onRefuseClick(viewModel);
-            }
-        });
+        mButtonRefuse.setOnClickListener(v -> clickListerner.onRefuseClick(viewModel));
 
-        mButtonBlock.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                clickListerner.onBlockClick(viewModel);
-            }
-        });
+        mButtonBlock.setOnClickListener(v -> clickListerner.onBlockClick(viewModel));
     }
 
     public interface ContactRequestListeners {
diff --git a/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsAdapter.java b/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsAdapter.java
index 58fa163..5dcfaf1 100644
--- a/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsAdapter.java
@@ -33,7 +33,6 @@
 import ezvcard.VCard;
 
 public class ContactRequestsAdapter extends RecyclerView.Adapter<ContactRequestViewHolder> {
-    static final String TAG = ContactRequestsAdapter.class.getSimpleName();
 
     private ArrayList<PendingContactRequestsViewModel> mContactRequestsViewModels;
     private ContactRequestViewHolder.ContactRequestListeners mListener;
diff --git a/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java b/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java
index 2e75ce2..7ea2dae 100644
--- a/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/contactrequests/ContactRequestsFragment.java
@@ -116,31 +116,28 @@
 
     @Override
     public void updateView(final ArrayList<PendingContactRequestsViewModel> list) {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                if (mPaneTextView == null || mEmptyTextView == null) {
-                    return;
-                }
+        RingApplication.uiHandler.post(() -> {
+            if (mPaneTextView == null || mEmptyTextView == null) {
+                return;
+            }
 
-                if (!list.isEmpty()) {
-                    PendingContactRequestsViewModel viewModel = list.get(0);
-                    if (viewModel.hasPane()) {
-                        mPaneTextView.setText(getString(R.string.contact_request_account, viewModel.getAccountUsername()));
-                    }
-                    mPaneTextView.setVisibility(viewModel.hasPane() ? View.VISIBLE : View.GONE);
+            if (!list.isEmpty()) {
+                PendingContactRequestsViewModel viewModel = list.get(0);
+                if (viewModel.hasPane()) {
+                    mPaneTextView.setText(getString(R.string.contact_request_account, viewModel.getAccountUsername()));
                 }
+                mPaneTextView.setVisibility(viewModel.hasPane() ? View.VISIBLE : View.GONE);
+            }
 
-                mEmptyTextView.setVisibility(list.isEmpty() ? View.VISIBLE : View.GONE);
+            mEmptyTextView.setVisibility(list.isEmpty() ? View.VISIBLE : View.GONE);
 
-                if (mRequestsList.getAdapter() != null) {
-                    mAdapter.replaceAll(list);
-                } else {
-                    mAdapter = new ContactRequestsAdapter(list, ContactRequestsFragment.this);
-                    mRequestsList.setAdapter(mAdapter);
-                    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
-                    mRequestsList.setLayoutManager(mLayoutManager);
-                }
+            if (mRequestsList.getAdapter() != null) {
+                mAdapter.replaceAll(list);
+            } else {
+                mAdapter = new ContactRequestsAdapter(list, ContactRequestsFragment.this);
+                mRequestsList.setAdapter(mAdapter);
+                LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
+                mRequestsList.setLayoutManager(mLayoutManager);
             }
         });
     }
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.java
index 4beaa79..5e4ade8 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/AccountMigrationFragment.java
@@ -22,7 +22,6 @@
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.ProgressDialog;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.os.AsyncTask;
@@ -176,53 +175,45 @@
 
 
     private void handleMigrationState(final ServiceEvent event) {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
+        RingApplication.uiHandler.post(() -> {
 
-                String newState = event.getEventInput(ServiceEvent.EventInput.STATE, String.class);
-                if (TextUtils.isEmpty(newState)) {
-                    if (mProgress != null) {
-                        mProgress.dismiss();
-                        mProgress = null;
-                    }
-                    return;
-                }
-
+            String newState = event.getEventInput(ServiceEvent.EventInput.STATE, String.class);
+            if (TextUtils.isEmpty(newState)) {
                 if (mProgress != null) {
                     mProgress.dismiss();
                     mProgress = null;
                 }
-                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
-                dialogBuilder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialog, int id) {
-                        //do things
-                    }
+                return;
+            }
+
+            if (mProgress != null) {
+                mProgress.dismiss();
+                mProgress = null;
+            }
+            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
+            dialogBuilder.setPositiveButton(android.R.string.ok, (dialog, id) -> {
+                //do things
+            });
+            boolean success = false;
+            switch (newState) {
+                case AccountConfig.STATE_INVALID:
+                    dialogBuilder.setTitle(R.string.account_cannot_be_found_title)
+                            .setMessage(R.string.account_cannot_be_updated_message);
+                    break;
+                default:
+                    dialogBuilder.setTitle(R.string.account_device_updated_title)
+                            .setMessage(R.string.account_device_updated_message);
+                    success = true;
+                    break;
+            }
+            AlertDialog dialogSuccess = dialogBuilder.show();
+            if (success) {
+                dialogSuccess.setOnDismissListener(dialogInterface -> {
+                    getActivity().setResult(Activity.RESULT_OK, new Intent());
+                    //unlock the screen orientation
+                    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
+                    getActivity().finish();
                 });
-                boolean success = false;
-                switch (newState) {
-                    case AccountConfig.STATE_INVALID:
-                        dialogBuilder.setTitle(R.string.account_cannot_be_found_title)
-                                .setMessage(R.string.account_cannot_be_updated_message);
-                        break;
-                    default:
-                        dialogBuilder.setTitle(R.string.account_device_updated_title)
-                                .setMessage(R.string.account_device_updated_message);
-                        success = true;
-                        break;
-                }
-                AlertDialog dialogSuccess = dialogBuilder.show();
-                if (success) {
-                    dialogSuccess.setOnDismissListener(new DialogInterface.OnDismissListener() {
-                        @Override
-                        public void onDismiss(DialogInterface dialogInterface) {
-                            getActivity().setResult(Activity.RESULT_OK, new Intent());
-                            //unlock the screen orientation
-                            getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
-                            getActivity().finish();
-                        }
-                    });
-                }
             }
         });
     }
@@ -253,20 +244,17 @@
 
             final Account account = mAccountService.getAccount(mAccountId);
             if (account == null) {
-                getActivity().runOnUiThread(new Runnable() {
-                    @Override
-                    public void run() {
-                        if (mProgress != null) {
-                            mProgress.dismiss();
-                            mProgress = null;
-                        }
-                        Log.e(TAG, "Error updating account, no account or remote service");
-                        AlertDialog.Builder dialogBuilder = new android.support.v7.app.AlertDialog.Builder(getActivity());
-                        dialogBuilder.setPositiveButton(android.R.string.ok, null);
-                        dialogBuilder.setTitle(R.string.generic_error_migration)
-                                .setMessage(R.string.generic_error_migration_message);
-                        dialogBuilder.create().show();
+                getActivity().runOnUiThread(() -> {
+                    if (mProgress != null) {
+                        mProgress.dismiss();
+                        mProgress = null;
                     }
+                    Log.e(TAG, "Error updating account, no account or remote service");
+                    new AlertDialog.Builder(getActivity())
+                            .setPositiveButton(android.R.string.ok, null)
+                            .setTitle(R.string.generic_error_migration)
+                            .setMessage(R.string.generic_error_migration_message)
+                            .show();
                 });
                 return null;
             }
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/AccountsManagementFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/AccountsManagementFragment.java
index 10fe21b..48976e8 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/AccountsManagementFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/AccountsManagementFragment.java
@@ -29,7 +29,6 @@
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.widget.ListView;
 
 import java.util.HashMap;
@@ -101,12 +100,7 @@
         ((HomeActivity) getActivity()).setToolbarState(true, R.string.menu_item_accounts);
         FloatingActionButton button = ((HomeActivity) getActivity()).getActionButton();
         button.setImageResource(R.drawable.ic_add_white);
-        button.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                presenter.addClicked();
-            }
-        });
+        button.setOnClickListener(v -> presenter.addClicked());
     }
 
     @Override
@@ -153,15 +147,12 @@
 
     @Override
     public void refresh(final List<Account> accounts) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mAccountsAdapter.replaceAll(accounts);
-                if (mAccountsAdapter.isEmpty() && mDnDListView != null) {
-                    mDnDListView.setEmptyView(mEmptyView);
-                }
-                mAccountsAdapter.notifyDataSetChanged();
+        getActivity().runOnUiThread(() -> {
+            mAccountsAdapter.replaceAll(accounts);
+            if (mAccountsAdapter.isEmpty() && mDnDListView != null) {
+                mDnDListView.setEmptyView(mEmptyView);
             }
+            mAccountsAdapter.notifyDataSetChanged();
         });
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
index 6fc1e3f..f4b09e1 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java
@@ -178,12 +178,14 @@
         super.initPresenter(presenter);
 
         String action = getArguments().getString(KEY_ACTION);
-        if (action.equals(ACTION_PLACE_CALL)) {
-            presenter.initOutGoing(getArguments().getString(KEY_ACCOUNT_ID),
-                    getArguments().getString(ConversationFragment.KEY_CONTACT_RING_ID),
-                    getArguments().getBoolean(KEY_AUDIO_ONLY));
-        } else if (action.equals(ACTION_GET_CALL)) {
-            presenter.initIncoming(getArguments().getString(KEY_CONF_ID));
+        if (action != null) {
+            if (action.equals(ACTION_PLACE_CALL)) {
+                presenter.initOutGoing(getArguments().getString(KEY_ACCOUNT_ID),
+                        getArguments().getString(ConversationFragment.KEY_CONTACT_RING_ID),
+                        getArguments().getBoolean(KEY_AUDIO_ONLY));
+            } else if (action.equals(ACTION_GET_CALL)) {
+                presenter.initIncoming(getArguments().getString(KEY_CONF_ID));
+            }
         }
     }
 
@@ -220,12 +222,7 @@
 
             @Override
             public void onDisplayChanged(int displayId) {
-                getActivity().runOnUiThread(new Runnable() {
-                    @Override
-                    public void run() {
-                        presenter.displayChanged();
-                    }
-                });
+                getActivity().runOnUiThread(() -> presenter.displayChanged());
             }
         };
 
@@ -246,18 +243,10 @@
                 presenter.videoSurfaceDestroyed();
             }
         });
-        view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
-            @Override
-            public void onLayoutChange(View parent, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                presenter.layoutChanged();
-            }
-        });
-        view.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
-            @Override
-            public void onSystemUiVisibilityChange(int visibility) {
-                boolean ui = (visibility & (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN)) == 0;
-                presenter.uiVisibilityChanged(ui);
-            }
+        view.addOnLayoutChangeListener((parent, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> presenter.layoutChanged());
+        view.setOnSystemUiVisibilityChangeListener(visibility -> {
+            boolean ui = (visibility & (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN)) == 0;
+            presenter.uiVisibilityChanged(ui);
         });
 
         mVideoPreview.getHolder().setFormat(PixelFormat.RGBA_8888);
@@ -359,22 +348,14 @@
 
     @Override
     public void displayContactBubble(final boolean display) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                contactBubbleLayout.setVisibility(display ? View.VISIBLE : View.GONE);
-            }
-        });
+        getActivity().runOnUiThread(() -> contactBubbleLayout.setVisibility(display ? View.VISIBLE : View.GONE));
     }
 
     @Override
     public void displayVideoSurface(final boolean display) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mVideoSurface.setVisibility(display ? View.VISIBLE : View.GONE);
-                mVideoPreview.setVisibility(display ? View.VISIBLE : View.GONE);
-            }
+        getActivity().runOnUiThread(() -> {
+            mVideoSurface.setVisibility(display ? View.VISIBLE : View.GONE);
+            mVideoPreview.setVisibility(display ? View.VISIBLE : View.GONE);
         });
     }
 
@@ -407,66 +388,55 @@
 
     @Override
     public void updateTime(final long duration) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mCallStatusTxt.setText(String.format(Locale.getDefault(), "%d:%02d:%02d", duration / 3600, duration % 3600 / 60, duration % 60));
-            }
-        });
+        getActivity().runOnUiThread(() -> mCallStatusTxt.setText(String.format(Locale.getDefault(), "%d:%02d:%02d", duration / 3600, duration % 3600 / 60, duration % 60)));
     }
 
     @Override
     public void updateContactBubble(@NonNull final CallContact contact) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                byte[] photo = contact.getPhoto();
-                if (photo != null && photo.length > 0) {
-                    Glide.with(getActivity())
-                            .load(photo)
-                            .transform(new CircleTransform(getActivity()))
-                            .error(R.drawable.ic_contact_picture)
-                            .into(contactBubbleView);
-                } else {
-                    Glide.with(getActivity())
-                            .load(R.drawable.ic_contact_picture)
-                            .into(contactBubbleView);
-                }
+        getActivity().runOnUiThread(() -> {
+            byte[] photo = contact.getPhoto();
+            if (photo != null && photo.length > 0) {
+                Glide.with(getActivity())
+                        .load(photo)
+                        .transform(new CircleTransform(getActivity()))
+                        .error(R.drawable.ic_contact_picture)
+                        .into(contactBubbleView);
+            } else {
+                Glide.with(getActivity())
+                        .load(R.drawable.ic_contact_picture)
+                        .into(contactBubbleView);
+            }
 
-                String username = contact.getRingUsername();
-                String displayName = contact.getDisplayName();
-                boolean hasProfileName = displayName != null && !displayName.contentEquals(username);
-                boolean firstShow = contactBubbleTxt.getText() != null && contactBubbleTxt.getText().length() > 0;
+            String username = contact.getRingUsername();
+            String displayName = contact.getDisplayName();
+            boolean hasProfileName = displayName != null && !displayName.contentEquals(username);
+            boolean firstShow = contactBubbleTxt.getText() != null && contactBubbleTxt.getText().length() > 0;
 
-                if (hasProfileName) {
-                    contactBubbleNumTxt.setVisibility(View.VISIBLE);
-                    contactBubbleTxt.setText(displayName);
-                    contactBubbleNumTxt.setText(username);
-                } else {
-                    contactBubbleNumTxt.setVisibility(View.GONE);
-                    contactBubbleTxt.setText(username);
-                }
+            if (hasProfileName) {
+                contactBubbleNumTxt.setVisibility(View.VISIBLE);
+                contactBubbleTxt.setText(displayName);
+                contactBubbleNumTxt.setText(username);
+            } else {
+                contactBubbleNumTxt.setVisibility(View.GONE);
+                contactBubbleTxt.setText(username);
+            }
 
-                if (firstShow) {
-                    mPulseAnimation.startRippleAnimation();
-                }
+            if (firstShow) {
+                mPulseAnimation.startRippleAnimation();
             }
         });
     }
 
     @Override
     public void updateCallStatus(final int callState) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                switch (callState) {
-                    case SipCall.State.NONE:
-                        mCallStatusTxt.setText("");
-                        break;
-                    default:
-                        mCallStatusTxt.setText(callStateToHumanState(callState));
-                        break;
-                }
+        getActivity().runOnUiThread(() -> {
+            switch (callState) {
+                case SipCall.State.NONE:
+                    mCallStatusTxt.setText("");
+                    break;
+                default:
+                    mCallStatusTxt.setText(callStateToHumanState(callState));
+                    break;
             }
         });
     }
@@ -496,98 +466,86 @@
 
     @Override
     public void initNormalStateDisplay(final boolean audioOnly) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                acceptButton.setVisibility(View.GONE);
-                refuseButton.setVisibility(View.GONE);
-                hangupButton.setVisibility(View.VISIBLE);
+        getActivity().runOnUiThread(() -> {
+            acceptButton.setVisibility(View.GONE);
+            refuseButton.setVisibility(View.GONE);
+            hangupButton.setVisibility(View.VISIBLE);
 
-                contactBubbleLayout.setVisibility(audioOnly ? View.VISIBLE : View.INVISIBLE);
+            contactBubbleLayout.setVisibility(audioOnly ? View.VISIBLE : View.INVISIBLE);
 
-                getActivity().invalidateOptionsMenu();
-            }
+            getActivity().invalidateOptionsMenu();
         });
     }
 
     @Override
     public void initIncomingCallDisplay() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                acceptButton.setVisibility(View.VISIBLE);
-                refuseButton.setVisibility(View.VISIBLE);
-                hangupButton.setVisibility(View.GONE);
+        getActivity().runOnUiThread(() -> {
+            acceptButton.setVisibility(View.VISIBLE);
+            refuseButton.setVisibility(View.VISIBLE);
+            hangupButton.setVisibility(View.GONE);
 
-                getActivity().invalidateOptionsMenu();
-            }
+            getActivity().invalidateOptionsMenu();
         });
     }
 
     @Override
     public void initOutGoingCallDisplay() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                acceptButton.setVisibility(View.GONE);
-                refuseButton.setVisibility(View.VISIBLE);
-                hangupButton.setVisibility(View.GONE);
+        getActivity().runOnUiThread(() -> {
+            acceptButton.setVisibility(View.GONE);
+            refuseButton.setVisibility(View.VISIBLE);
+            hangupButton.setVisibility(View.GONE);
 
-                getActivity().invalidateOptionsMenu();
-            }
+            getActivity().invalidateOptionsMenu();
         });
     }
 
     @Override
     public void resetVideoSize(final int videoWidth, final int videoHeight, final int previewWidth, final int previewHeight) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                ViewGroup rootView = (ViewGroup) getView();
-                if (rootView == null)
-                    return;
+        getActivity().runOnUiThread(() -> {
+            ViewGroup rootView = (ViewGroup) getView();
+            if (rootView == null)
+                return;
 
-                double videoRatio = videoWidth / (double) videoHeight;
-                double screenRatio = getView().getWidth() / (double) getView().getHeight();
+            double videoRatio = videoWidth / (double) videoHeight;
+            double screenRatio = getView().getWidth() / (double) getView().getHeight();
 
-                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mVideoSurface.getLayoutParams();
-                int oldW = params.width;
-                int oldH = params.height;
-                if (videoRatio >= screenRatio) {
-                    params.width = RelativeLayout.LayoutParams.MATCH_PARENT;
-                    params.height = (int) (videoHeight * (double) rootView.getWidth() / (double) videoWidth);
-                } else {
-                    params.height = RelativeLayout.LayoutParams.MATCH_PARENT;
-                    params.width = (int) (videoWidth * (double) rootView.getHeight() / (double) videoHeight);
-                }
+            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mVideoSurface.getLayoutParams();
+            int oldW = params.width;
+            int oldH = params.height;
+            if (videoRatio >= screenRatio) {
+                params.width = RelativeLayout.LayoutParams.MATCH_PARENT;
+                params.height = (int) (videoHeight * (double) rootView.getWidth() / (double) videoWidth);
+            } else {
+                params.height = RelativeLayout.LayoutParams.MATCH_PARENT;
+                params.width = (int) (videoWidth * (double) rootView.getHeight() / (double) videoHeight);
+            }
 
-                if (oldW != params.width || oldH != params.height) {
-                    mVideoSurface.setLayoutParams(params);
-                }
+            if (oldW != params.width || oldH != params.height) {
+                mVideoSurface.setLayoutParams(params);
+            }
 
-                final int mPreviewWidth;
-                final int mPreviewHeight;
+            final int mPreviewWidth;
+            final int mPreviewHeight;
 
-                if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
-                    mPreviewWidth = HardwareServiceImpl.VIDEO_HEIGHT;
-                    mPreviewHeight = HardwareServiceImpl.VIDEO_WIDTH;
-                } else {
-                    mPreviewWidth = HardwareServiceImpl.VIDEO_WIDTH;
-                    mPreviewHeight = HardwareServiceImpl.VIDEO_HEIGHT;
-                }
+            if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
+                mPreviewWidth = HardwareServiceImpl.VIDEO_HEIGHT;
+                mPreviewHeight = HardwareServiceImpl.VIDEO_WIDTH;
+            } else {
+                mPreviewWidth = HardwareServiceImpl.VIDEO_WIDTH;
+                mPreviewHeight = HardwareServiceImpl.VIDEO_HEIGHT;
+            }
 
-                DisplayMetrics metrics = getResources().getDisplayMetrics();
-                RelativeLayout.LayoutParams paramsPreview = (RelativeLayout.LayoutParams) mVideoPreview.getLayoutParams();
-                oldW = paramsPreview.width;
-                oldH = paramsPreview.height;
-                double previewMaxDim = Math.max(mPreviewWidth, mPreviewHeight);
-                double previewRatio = metrics.density * 160. / previewMaxDim;
-                paramsPreview.width = (int) (mPreviewWidth * previewRatio);
-                paramsPreview.height = (int) (mPreviewHeight * previewRatio);
+            DisplayMetrics metrics = getResources().getDisplayMetrics();
+            RelativeLayout.LayoutParams paramsPreview = (RelativeLayout.LayoutParams) mVideoPreview.getLayoutParams();
+            oldW = paramsPreview.width;
+            oldH = paramsPreview.height;
+            double previewMaxDim = Math.max(mPreviewWidth, mPreviewHeight);
+            double previewRatio = metrics.density * 160. / previewMaxDim;
+            paramsPreview.width = (int) (mPreviewWidth * previewRatio);
+            paramsPreview.height = (int) (mPreviewHeight * previewRatio);
 
-                if (oldW != paramsPreview.width || oldH != paramsPreview.height) {
-                    mVideoPreview.setLayoutParams(paramsPreview);
-                }
+            if (oldW != paramsPreview.width || oldH != paramsPreview.height) {
+                mVideoPreview.setLayoutParams(paramsPreview);
             }
         });
     }
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/CodecPreference.java b/ring-android/app/src/main/java/cx/ring/fragments/CodecPreference.java
index dacc9fa..54929b8 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/CodecPreference.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/CodecPreference.java
@@ -28,7 +28,6 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.AdapterView;
 import android.widget.BaseAdapter;
 import android.widget.CheckBox;
 import android.widget.LinearLayout;
@@ -46,10 +45,6 @@
 
     private CodecAdapter listAdapter;
 
-    public CodecPreference(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
     public CodecPreference(Context context, AttributeSet attrs, int defStyleAttr) {
         super(context, attrs, defStyleAttr);
         setWidgetLayoutResource(R.layout.frag_audio_mgmt);
@@ -86,14 +81,10 @@
         ListView mCodecList = (ListView) holder.findViewById(R.id.dndlistview);
         if (mCodecList.getAdapter() != listAdapter)
             mCodecList.setAdapter(listAdapter);
-        mCodecList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
-
-            @Override
-            public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
-                listAdapter.getItem(pos).toggleState();
-                listAdapter.notifyDataSetChanged();
-                callChangeListener(getActiveCodecList());
-            }
+        mCodecList.setOnItemClickListener((arg0, arg1, pos, arg3) -> {
+            listAdapter.getItem(pos).toggleState();
+            listAdapter.notifyDataSetChanged();
+            callChangeListener(getActiveCodecList());
         });
 
         setListViewHeight(mCodecList, (LinearLayout) mCodecList.getParent());
@@ -159,9 +150,9 @@
                 rowView = inflater.inflate(R.layout.item_codec, parent, false);
 
                 entryView = new CodecView();
-                entryView.name = (TextView) rowView.findViewById(R.id.codec_name);
-                entryView.samplerate = (TextView) rowView.findViewById(R.id.codec_samplerate);
-                entryView.enabled = (CheckBox) rowView.findViewById(R.id.codec_checked);
+                entryView.name = rowView.findViewById(R.id.codec_name);
+                entryView.samplerate = rowView.findViewById(R.id.codec_samplerate);
+                entryView.enabled = rowView.findViewById(R.id.codec_checked);
                 rowView.setTag(entryView);
             } else {
                 entryView = (CodecView) rowView.getTag();
@@ -208,8 +199,7 @@
 
         void setDataset(ArrayList<Codec> codecs) {
             items = new ArrayList<>(codecs.size());
-            for (Codec c : codecs)
-                items.add(c);
+            items.addAll(codecs);
         }
 
         class CodecView {
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
index 5210c7c..9fe0e9b 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
@@ -18,10 +18,8 @@
 package cx.ring.fragments;
 
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.res.Configuration;
-import android.graphics.Bitmap;
 import android.os.Bundle;
 import android.support.design.widget.Snackbar;
 import android.support.v7.app.ActionBar;
@@ -39,8 +37,6 @@
 import android.widget.EditText;
 import android.widget.Spinner;
 
-import java.io.ByteArrayOutputStream;
-
 import butterknife.BindView;
 import butterknife.OnClick;
 import butterknife.OnEditorAction;
@@ -60,14 +56,8 @@
 import cx.ring.mvp.BaseFragment;
 import cx.ring.services.NotificationService;
 import cx.ring.utils.ActionHelper;
-import cx.ring.utils.BitmapUtils;
 import cx.ring.utils.ClipboardHelper;
 import cx.ring.utils.MediaButtonsHelper;
-import cx.ring.utils.VCardUtils;
-import ezvcard.VCard;
-import ezvcard.parameter.ImageType;
-import ezvcard.property.Photo;
-import ezvcard.property.RawProperty;
 
 public class ConversationFragment extends BaseFragment<ConversationPresenter> implements
         Conversation.ConversationActionCallback,
@@ -118,18 +108,15 @@
 
     @Override
     public void refreshView(final Conversation conversation) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mAdapter != null) {
-                    mAdapter.updateDataset(conversation.getAggregateHistory(), 0);
+        getActivity().runOnUiThread(() -> {
+            if (mAdapter != null) {
+                mAdapter.updateDataset(conversation.getAggregateHistory(), 0);
 
-                    if (mAdapter.getItemCount() > 0) {
-                        mHistList.smoothScrollToPosition(mAdapter.getItemCount() - 1);
-                    }
+                if (mAdapter.getItemCount() > 0) {
+                    mHistList.smoothScrollToPosition(mAdapter.getItemCount() - 1);
                 }
-                getActivity().invalidateOptionsMenu();
             }
+            getActivity().invalidateOptionsMenu();
         });
     }
 
@@ -178,25 +165,12 @@
 
     @Override
     public void displaySendTrustRequest(final String accountId) {
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        builder.setTitle(R.string.send_request_title);
-        builder.setMessage(R.string.send_request_msg);
-
-        builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialogInterface, int i) {
-                dialogInterface.cancel();
-            }
-        });
-
-        builder.setPositiveButton(R.string.send_request_button, new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialogInterface, int i) {
-                presenter.sendTrustRequest();
-            }
-        });
-
-        builder.show();
+        new AlertDialog.Builder(getActivity())
+                .setTitle(R.string.send_request_title)
+                .setMessage(R.string.send_request_msg)
+                .setNegativeButton(android.R.string.cancel, (dialogInterface, i) -> dialogInterface.cancel())
+                .setPositiveButton(R.string.send_request_button, (dialogInterface, i) -> presenter.sendTrustRequest())
+                .show();
     }
 
     @OnClick(R.id.msg_send)
@@ -320,21 +294,18 @@
 
     @Override
     public void updateView(final String address, final String name, final int state) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (state != 0 || mNumberAdapter == null || mNumberAdapter.isEmpty()) {
-                    return;
-                }
+        getActivity().runOnUiThread(() -> {
+            if (state != 0 || mNumberAdapter == null || mNumberAdapter.isEmpty()) {
+                return;
+            }
 
-                for (int i = 0; i < mNumberAdapter.getCount(); i++) {
-                    Phone phone = (Phone) mNumberAdapter.getItem(i);
-                    if (phone.getNumber() != null) {
-                        String ringID = phone.getNumber().getRawUriString();
-                        if (address.equals(ringID)) {
-                            phone.getNumber().setUsername(name);
-                            mNumberAdapter.notifyDataSetChanged();
-                        }
+            for (int i = 0; i < mNumberAdapter.getCount(); i++) {
+                Phone phone = (Phone) mNumberAdapter.getItem(i);
+                if (phone.getNumber() != null) {
+                    String ringID = phone.getNumber().getRawUriString();
+                    if (address.equals(ringID)) {
+                        phone.getNumber().setUsername(name);
+                        mNumberAdapter.notifyDataSetChanged();
                     }
                 }
             }
@@ -343,80 +314,56 @@
 
     @Override
     public void displayContactName(final CallContact contact) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
-                if (actionBar == null) {
-                    return;
-                }
-                String displayName = contact.getDisplayName();
-                actionBar.setTitle(displayName);
-                String identity = contact.getRingUsername();
-                if (identity != null && !identity.equals(displayName)) {
-                    actionBar.setSubtitle(identity);
-                }
+        getActivity().runOnUiThread(() -> {
+            ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
+            if (actionBar == null) {
+                return;
+            }
+            String displayName = contact.getDisplayName();
+            actionBar.setTitle(displayName);
+            String identity = contact.getRingUsername();
+            if (identity != null && !identity.equals(displayName)) {
+                actionBar.setSubtitle(identity);
             }
         });
     }
 
     @Override
     public void displayOnGoingCallPane(final boolean display) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mTopPane.setVisibility(display ? View.VISIBLE : View.GONE);
-            }
-        });
+        getActivity().runOnUiThread(() -> mTopPane.setVisibility(display ? View.VISIBLE : View.GONE));
     }
 
     @Override
     public void displayContactPhoto(final byte[] photo) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mAdapter.setPhoto(photo);
-            }
-        });
+        getActivity().runOnUiThread(() -> mAdapter.setPhoto(photo));
     }
 
     @Override
     public void displayNumberSpinner(final Conversation conversation, final Uri number) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mNumberSpinner.setVisibility(View.VISIBLE);
-                mNumberAdapter = new NumberAdapter(getActivity(),
-                        conversation.getContact(),
-                        false);
-                mNumberSpinner.setAdapter(mNumberAdapter);
-                mNumberSpinner.setSelection(getIndex(mNumberSpinner, number));
-            }
+        getActivity().runOnUiThread(() -> {
+            mNumberSpinner.setVisibility(View.VISIBLE);
+            mNumberAdapter = new NumberAdapter(getActivity(),
+                    conversation.getContact(),
+                    false);
+            mNumberSpinner.setAdapter(mNumberAdapter);
+            mNumberSpinner.setSelection(getIndex(mNumberSpinner, number));
         });
     }
 
     @Override
     public void displayAddContact(final boolean display) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mAddContactBtn != null) {
-                    mAddContactBtn.setVisible(display);
-                }
+        getActivity().runOnUiThread(() -> {
+            if (mAddContactBtn != null) {
+                mAddContactBtn.setVisible(display);
             }
         });
     }
 
     @Override
     public void displayDeleteDialog(final Conversation conversation) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mDeleteDialog = ActionHelper.launchDeleteAction(getActivity(),
-                        conversation.getContact(),
-                        ConversationFragment.this);
-            }
-        });
+        getActivity().runOnUiThread(() -> mDeleteDialog = ActionHelper.launchDeleteAction(getActivity(),
+                conversation.getContact(),
+                ConversationFragment.this));
     }
 
     @Override
@@ -428,12 +375,7 @@
 
     @Override
     public void hideNumberSpinner() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mNumberSpinner.setVisibility(View.GONE);
-            }
-        });
+        getActivity().runOnUiThread(() -> mNumberSpinner.setVisibility(View.GONE));
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountFragment.java
index c3823b6..92a4671 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/GeneralAccountFragment.java
@@ -43,37 +43,30 @@
 
     private static final String TAG = GeneralAccountFragment.class.getSimpleName();
     private static final String DIALOG_FRAGMENT_TAG = "android.support.v14.preference.PreferenceFragment.DIALOG";
-    private final Preference.OnPreferenceChangeListener changeAccountStatusListener = new Preference.OnPreferenceChangeListener() {
-
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object newValue) {
-            presenter.accountChanged(newValue);
-            return false;
-        }
+    private final Preference.OnPreferenceChangeListener changeAccountStatusListener = (preference, newValue) -> {
+        presenter.accountChanged(newValue);
+        return false;
     };
-    private final Preference.OnPreferenceChangeListener changeBasicPreferenceListener = new Preference.OnPreferenceChangeListener() {
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object newValue) {
-            Log.i(TAG, "Changing preference " + preference.getKey() + " to value:" + newValue);
-            final ConfigKey key = ConfigKey.fromString(preference.getKey());
-            if (preference instanceof TwoStatePreference) {
-                presenter.twoStatePreferenceChanged(key, newValue);
-            } else if (preference instanceof PasswordPreference) {
-                String tmp = "";
-                for (int i = 0; i < ((String) newValue).length(); ++i) {
-                    tmp += "*";
-                }
-                preference.setSummary(tmp);
-                presenter.passwordPreferenceChanged(key, newValue);
-            } else if (key == ConfigKey.ACCOUNT_USERNAME) {
-                presenter.userNameChanged(key, newValue);
-                preference.setSummary((CharSequence) newValue);
-            } else {
-                preference.setSummary((CharSequence) newValue);
-                presenter.preferenceChanged(key, newValue);
+    private final Preference.OnPreferenceChangeListener changeBasicPreferenceListener = (preference, newValue) -> {
+        Log.i(TAG, "Changing preference " + preference.getKey() + " to value:" + newValue);
+        final ConfigKey key = ConfigKey.fromString(preference.getKey());
+        if (preference instanceof TwoStatePreference) {
+            presenter.twoStatePreferenceChanged(key, newValue);
+        } else if (preference instanceof PasswordPreference) {
+            StringBuilder tmp = new StringBuilder();
+            for (int i = 0; i < ((String) newValue).length(); ++i) {
+                tmp.append("*");
             }
-            return true;
+            preference.setSummary(tmp.toString());
+            presenter.passwordPreferenceChanged(key, newValue);
+        } else if (key == ConfigKey.ACCOUNT_USERNAME) {
+            presenter.userNameChanged(key, newValue);
+            preference.setSummary((CharSequence) newValue);
+        } else {
+            preference.setSummary((CharSequence) newValue);
+            presenter.preferenceChanged(key, newValue);
         }
+        return true;
     };
 
     public static GeneralAccountFragment newInstance(@NonNull String accountId) {
@@ -161,11 +154,11 @@
                 String val = details.get(confKey);
                 ((EditTextPreference) pref).setText(val);
                 if (pref instanceof PasswordPreference) {
-                    String tmp = "";
+                    StringBuilder tmp = new StringBuilder();
                     for (int i = 0; i < val.length(); ++i) {
-                        tmp += "*";
+                        tmp.append("*");
                     }
-                    pref.setSummary(tmp);
+                    pref.setSummary(tmp.toString());
                 } else {
                     pref.setSummary(val);
                 }
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceFragment.java
index 6f0995b..31fe45d 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/MediaPreferenceFragment.java
@@ -23,7 +23,6 @@
 
 import android.Manifest;
 import android.app.Activity;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.Build;
@@ -53,62 +52,50 @@
 
     public static final String TAG = MediaPreferenceFragment.class.getSimpleName();
     private static final int SELECT_RINGTONE_PATH = 40;
-    private final Preference.OnPreferenceChangeListener changeVideoPreferenceListener = new Preference.OnPreferenceChangeListener() {
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object newValue) {
-            final ConfigKey key = ConfigKey.fromString(preference.getKey());
-            boolean versionMOrSuperior = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
-            presenter.videoPreferenceChanged(key, newValue, versionMOrSuperior);
-            return true;
-        }
+    private final Preference.OnPreferenceChangeListener changeVideoPreferenceListener = (preference, newValue) -> {
+        final ConfigKey key = ConfigKey.fromString(preference.getKey());
+        boolean versionMOrSuperior = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
+        presenter.videoPreferenceChanged(key, newValue, versionMOrSuperior);
+        return true;
     };
     private CodecPreference audioCodecsPref = null;
     private CodecPreference videoCodecsPref = null;
-    private final Preference.OnPreferenceChangeListener changeCodecListener = new Preference.OnPreferenceChangeListener() {
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object o) {
-            ArrayList<Long> audio = audioCodecsPref.getActiveCodecList();
-            ArrayList<Long> video = videoCodecsPref.getActiveCodecList();
-            ArrayList<Long> newOrder = new ArrayList<>(audio.size() + video.size());
-            newOrder.addAll(audio);
-            newOrder.addAll(video);
-            presenter.codecChanged(newOrder);
-            return true;
-        }
+    private final Preference.OnPreferenceChangeListener changeCodecListener = (preference, o) -> {
+        ArrayList<Long> audio = audioCodecsPref.getActiveCodecList();
+        ArrayList<Long> video = videoCodecsPref.getActiveCodecList();
+        ArrayList<Long> newOrder = new ArrayList<>(audio.size() + video.size());
+        newOrder.addAll(audio);
+        newOrder.addAll(video);
+        presenter.codecChanged(newOrder);
+        return true;
     };
     private SwitchPreference mRingtoneCustom = null;
-    private final Preference.OnPreferenceChangeListener changeAudioPreferenceListener = new Preference.OnPreferenceChangeListener() {
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object newValue) {
-            final ConfigKey key = ConfigKey.fromString(preference.getKey());
-            if (preference instanceof TwoStatePreference) {
-                if (key == ConfigKey.RINGTONE_ENABLED) {
-                    mRingtoneCustom.setEnabled((Boolean) newValue);
-                    Boolean isEnabled = (Boolean) newValue && mRingtoneCustom.isChecked();
-                    getPreferenceScreen().findPreference(ConfigKey.RINGTONE_PATH.key()).setEnabled(isEnabled);
-                } else if (key == ConfigKey.RINGTONE_CUSTOM) {
-                    getPreferenceScreen().findPreference(ConfigKey.RINGTONE_PATH.key()).setEnabled((Boolean) newValue);
-                    if ((Boolean) newValue) {
-                        findPreference(ConfigKey.RINGTONE_PATH.key()).setSummary(
-                                new File(FileUtils.ringtonesPath(getActivity()) + File.separator + "default.wav").getName());
-                    }
+    private final Preference.OnPreferenceChangeListener changeAudioPreferenceListener = (preference, newValue) -> {
+        final ConfigKey key = ConfigKey.fromString(preference.getKey());
+        if (preference instanceof TwoStatePreference) {
+            if (key == ConfigKey.RINGTONE_ENABLED) {
+                mRingtoneCustom.setEnabled((Boolean) newValue);
+                Boolean isEnabled = (Boolean) newValue && mRingtoneCustom.isChecked();
+                getPreferenceScreen().findPreference(ConfigKey.RINGTONE_PATH.key()).setEnabled(isEnabled);
+            } else if (key == ConfigKey.RINGTONE_CUSTOM) {
+                getPreferenceScreen().findPreference(ConfigKey.RINGTONE_PATH.key()).setEnabled((Boolean) newValue);
+                if ((Boolean) newValue) {
+                    findPreference(ConfigKey.RINGTONE_PATH.key()).setSummary(
+                            new File(FileUtils.ringtonesPath(getActivity()) + File.separator + "default.wav").getName());
                 }
-            } else if (key == ConfigKey.ACCOUNT_DTMF_TYPE) {
-                preference.setSummary(((String) newValue).contentEquals("overrtp") ? "RTP" : "SIP");
-            } else {
-                preference.setSummary((CharSequence) newValue);
             }
+        } else if (key == ConfigKey.ACCOUNT_DTMF_TYPE) {
+            preference.setSummary(((String) newValue).contentEquals("overrtp") ? "RTP" : "SIP");
+        } else {
+            preference.setSummary((CharSequence) newValue);
+        }
 
-            presenter.audioPreferenceChanged(key, newValue);
-            return true;
-        }
+        presenter.audioPreferenceChanged(key, newValue);
+        return true;
     };
-    private Preference.OnPreferenceClickListener filePickerListener = new Preference.OnPreferenceClickListener() {
-        @Override
-        public boolean onPreferenceClick(Preference preference) {
-            presenter.fileSearchClicked();
-            return true;
-        }
+    private Preference.OnPreferenceClickListener filePickerListener = preference -> {
+        presenter.fileSearchClicked();
+        return true;
     };
 
     public static MediaPreferenceFragment newInstance(@NonNull String accountId) {
@@ -153,35 +140,30 @@
 
     @Override
     public void displayWrongFileFormatDialog() {
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        builder.setTitle(R.string.ringtone_error_title);
-        builder.setMessage(R.string.ringtone_error_format_not_supported);
-        builder.setPositiveButton(android.R.string.ok, null);
-        builder.show();
+        new AlertDialog.Builder(getActivity())
+                .setTitle(R.string.ringtone_error_title)
+                .setMessage(R.string.ringtone_error_format_not_supported)
+                .setPositiveButton(android.R.string.ok, null)
+                .show();
     }
 
     @Override
     public void displayFileTooBigDialog() {
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        builder.setTitle(R.string.ringtone_error_title);
-        builder.setMessage(getString(R.string.ringtone_error_size_too_big, MediaPreferencePresenter.MAX_SIZE_RINGTONE));
-        builder.setPositiveButton(android.R.string.ok, null);
-        builder.show();
+        new AlertDialog.Builder(getActivity())
+                .setTitle(R.string.ringtone_error_title)
+                .setMessage(getString(R.string.ringtone_error_size_too_big, MediaPreferencePresenter.MAX_SIZE_RINGTONE))
+                .setPositiveButton(android.R.string.ok, null)
+                .show();
     }
 
     @Override
     public void displayPermissionCameraDenied() {
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
+        new AlertDialog.Builder(getActivity())
                 .setTitle(R.string.permission_dialog_camera_title)
                 .setMessage(R.string.permission_dialog_camera_message)
                 .setCancelable(false)
-                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        dialog.dismiss();
-                    }
-                });
-        builder.show();
+                .setPositiveButton(android.R.string.ok, (dialog, which) -> dialog.dismiss())
+                .show();
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/SIPAccountCreationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/SIPAccountCreationFragment.java
index 1cbdbf8..d50e89c 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/SIPAccountCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/SIPAccountCreationFragment.java
@@ -144,12 +144,9 @@
                 getActivity().getString(R.string.dialog_warn_ip2ip_account_message),
                 getActivity().getString(android.R.string.ok),
                 getActivity().getString(android.R.string.cancel),
-                new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        dialog.dismiss();
-                        createSIPAccount(true);
-                    }
+                (dialog, which) -> {
+                    dialog.dismiss();
+                    createSIPAccount(true);
                 },
                 null);
     }
@@ -160,17 +157,10 @@
                 getActivity().getString(R.string.account_sip_cannot_be_registered_message),
                 getActivity().getString(android.R.string.ok),
                 getActivity().getString(R.string.account_sip_register_anyway),
-                new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        presenter.removeAccount();
-                    }
-                },
-                new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialog, int id) {
-                        getActivity().setResult(Activity.RESULT_OK, new Intent());
-                        getActivity().finish();
-                    }
+                (dialog, which) -> presenter.removeAccount(),
+                (dialog, id) -> {
+                    getActivity().setResult(Activity.RESULT_OK, new Intent());
+                    getActivity().finish();
                 });
     }
 
@@ -180,17 +170,10 @@
                 getActivity().getString(R.string.account_no_network_message),
                 getActivity().getString(android.R.string.ok),
                 getActivity().getString(R.string.account_sip_register_anyway),
-                new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        presenter.removeAccount();
-                    }
-                },
-                new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialog, int id) {
-                        getActivity().setResult(Activity.RESULT_OK, new Intent());
-                        getActivity().finish();
-                    }
+                (dialog, which) -> presenter.removeAccount(),
+                (dialog, id) -> {
+                    getActivity().setResult(Activity.RESULT_OK, new Intent());
+                    getActivity().finish();
                 });
     }
 
@@ -200,12 +183,9 @@
                 getActivity().getString(R.string.account_sip_success_message),
                 getActivity().getString(android.R.string.ok),
                 null,
-                new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        getActivity().setResult(Activity.RESULT_OK, new Intent());
-                        getActivity().finish();
-                    }
+                (dialog, which) -> {
+                    getActivity().setResult(Activity.RESULT_OK, new Intent());
+                    getActivity().finish();
                 },
                 null);
     }
@@ -217,30 +197,23 @@
                            final DialogInterface.OnClickListener listenerPositive,
                            final DialogInterface.OnClickListener listenerNegative) {
 
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                if (mProgress != null && mProgress.isShowing()) {
-                    mProgress.dismiss();
-                }
+        RingApplication.uiHandler.post(() -> {
+            if (mProgress != null && mProgress.isShowing()) {
+                mProgress.dismiss();
+            }
 
-                //orientation is locked during the create of account to avoid the destruction of the thread
-                getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
+            //orientation is locked during the create of account to avoid the destruction of the thread
+            getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
 
-                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
-                dialogBuilder.setPositiveButton(positive, listenerPositive);
-                dialogBuilder.setNegativeButton(negative, listenerNegative);
-                dialogBuilder.setTitle(title).setMessage(message);
-                dialogBuilder.setOnDismissListener(new DialogInterface.OnDismissListener() {
-                    @Override
-                    public void onDismiss(DialogInterface dialog) {
+            new AlertDialog.Builder(getActivity())
+                    .setPositiveButton(positive, listenerPositive)
+                    .setNegativeButton(negative, listenerNegative)
+                    .setTitle(title).setMessage(message)
+                    .setOnDismissListener(dialog -> {
                         //unlock the screen orientation
                         getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
-                    }
-                });
-
-                dialogBuilder.show();
-            }
+                    })
+                    .show();
         });
 
     }
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountFragment.java
index 4289c0b..405583e 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/SecurityAccountFragment.java
@@ -21,6 +21,7 @@
 
 import android.app.Activity;
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 import android.support.v7.preference.EditTextPreference;
 import android.support.v7.preference.ListPreference;
@@ -51,61 +52,46 @@
 
     private PreferenceCategory credentialsCategory;
     private PreferenceCategory tlsCategory;
-    private Preference.OnPreferenceChangeListener editCredentialListener = new Preference.OnPreferenceChangeListener() {
-
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object newValue) {
-            // We need the old and new value to correctly edit the list of credentials
-            Pair<AccountCredentials, AccountCredentials> result = (Pair<AccountCredentials, AccountCredentials>) newValue;
-            presenter.credentialEdited(new Tuple<>(result.first, result.second));
-            return false;
-        }
+    private Preference.OnPreferenceChangeListener editCredentialListener = (preference, newValue) -> {
+        // We need the old and new value to correctly edit the list of credentials
+        Pair<AccountCredentials, AccountCredentials> result = (Pair<AccountCredentials, AccountCredentials>) newValue;
+        presenter.credentialEdited(new Tuple<>(result.first, result.second));
+        return false;
     };
-    private Preference.OnPreferenceChangeListener addCredentialListener = new Preference.OnPreferenceChangeListener() {
-
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object newValue) {
-            Pair<AccountCredentials, AccountCredentials> result = (Pair<AccountCredentials, AccountCredentials>) newValue;
-            presenter.credentialAdded(new Tuple<>(result.first, result.second));
-            return false;
-        }
+    private Preference.OnPreferenceChangeListener addCredentialListener = (preference, newValue) -> {
+        Pair<AccountCredentials, AccountCredentials> result = (Pair<AccountCredentials, AccountCredentials>) newValue;
+        presenter.credentialAdded(new Tuple<>(result.first, result.second));
+        return false;
     };
-    private Preference.OnPreferenceClickListener filePickerListener = new Preference.OnPreferenceClickListener() {
-        @Override
-        public boolean onPreferenceClick(Preference preference) {
-            if (preference.getKey().contentEquals(ConfigKey.TLS_CA_LIST_FILE.key())) {
-                performFileSearch(SELECT_CA_LIST_RC);
-            }
-            if (preference.getKey().contentEquals(ConfigKey.TLS_PRIVATE_KEY_FILE.key())) {
-                performFileSearch(SELECT_PRIVATE_KEY_RC);
-            }
-            if (preference.getKey().contentEquals(ConfigKey.TLS_CERTIFICATE_FILE.key())) {
-                performFileSearch(SELECT_CERTIFICATE_RC);
-            }
-            return true;
+    private Preference.OnPreferenceClickListener filePickerListener = preference -> {
+        if (preference.getKey().contentEquals(ConfigKey.TLS_CA_LIST_FILE.key())) {
+            performFileSearch(SELECT_CA_LIST_RC);
         }
+        if (preference.getKey().contentEquals(ConfigKey.TLS_PRIVATE_KEY_FILE.key())) {
+            performFileSearch(SELECT_PRIVATE_KEY_RC);
+        }
+        if (preference.getKey().contentEquals(ConfigKey.TLS_CERTIFICATE_FILE.key())) {
+            performFileSearch(SELECT_CERTIFICATE_RC);
+        }
+        return true;
     };
-    private Preference.OnPreferenceChangeListener tlsListener = new Preference.OnPreferenceChangeListener() {
+    private Preference.OnPreferenceChangeListener tlsListener = (preference, newValue) -> {
+        ConfigKey key = ConfigKey.fromString(preference.getKey());
 
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object newValue) {
-            ConfigKey key = ConfigKey.fromString(preference.getKey());
-
-            if (preference.getKey().contentEquals(ConfigKey.TLS_ENABLE.key())) {
-                if ((Boolean) newValue) {
-                    key = ConfigKey.STUN_ENABLE;
-                    newValue = false;
-                }
+        if (preference.getKey().contentEquals(ConfigKey.TLS_ENABLE.key())) {
+            if ((Boolean) newValue) {
+                key = ConfigKey.STUN_ENABLE;
+                newValue = false;
             }
-
-            if (!(preference instanceof TwoStatePreference)) {
-                preference.setSummary((String) newValue);
-            }
-
-            presenter.tlsChanged(key, newValue);
-
-            return true;
         }
+
+        if (!(preference instanceof TwoStatePreference)) {
+            preference.setSummary((String) newValue);
+        }
+
+        presenter.tlsChanged(key, newValue);
+
+        return true;
     };
 
     @Override
@@ -258,7 +244,11 @@
             return;
         }
 
-        File myFile = new File(data.getData().getEncodedPath());
+        Uri uri = data.getData();
+        if (uri == null) {
+            return;
+        }
+        File myFile = new File(uri.getEncodedPath());
         ConfigKey key = null;
         Preference preference;
         switch (requestCode) {
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java
index 0f7ef30..79d6541 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/SmartListFragment.java
@@ -21,7 +21,6 @@
 package cx.ring.fragments;
 
 import android.app.Activity;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Build;
@@ -30,7 +29,6 @@
 import android.support.annotation.Nullable;
 import android.support.design.widget.FloatingActionButton;
 import android.support.design.widget.Snackbar;
-import android.support.v4.view.MenuItemCompat;
 import android.support.v7.app.AlertDialog;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
@@ -57,7 +55,6 @@
 import butterknife.BindView;
 import butterknife.OnClick;
 import cx.ring.R;
-import cx.ring.account.AccountWizard;
 import cx.ring.adapters.SmartListAdapter;
 import cx.ring.client.CallActivity;
 import cx.ring.client.ConversationActivity;
@@ -131,7 +128,7 @@
         inflater.inflate(R.menu.smartlist_menu, menu);
         mSearchMenuItem = menu.findItem(R.id.menu_contact_search);
         mDialpadMenuItem = menu.findItem(R.id.menu_contact_dial);
-        MenuItemCompat.setOnActionExpandListener(mSearchMenuItem, new MenuItemCompat.OnActionExpandListener() {
+        mSearchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
             @Override
             public boolean onMenuItemActionCollapse(MenuItem item) {
                 mDialpadMenuItem.setVisible(false);
@@ -273,14 +270,11 @@
 
     @Override
     public void setLoading(final boolean loading) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mLoader == null) {
-                    return;
-                }
-                mLoader.setVisibility(loading ? View.VISIBLE : View.GONE);
+        getActivity().runOnUiThread(() -> {
+            if (mLoader == null) {
+                return;
             }
+            mLoader.setVisibility(loading ? View.VISIBLE : View.GONE);
         });
     }
 
@@ -309,12 +303,7 @@
     private void displayFloatingActionButtonWithDelay(boolean visible, int delay) {
         if (this.mFloatingActionButton != null) {
             final int visibility = (visible) ? View.VISIBLE : View.GONE;
-            new Handler().postDelayed(new Runnable() {
-                @Override
-                public void run() {
-                    mFloatingActionButton.setVisibility(visibility);
-                }
-            }, delay);
+            new Handler().postDelayed(() -> mFloatingActionButton.setVisibility(visibility), delay);
         }
     }
 
@@ -357,65 +346,46 @@
 
     @Override
     public void displayNetworkErrorPanel() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                showErrorPanel(R.string.error_no_network, false, 0, null);
-            }
-        });
+        getActivity().runOnUiThread(() -> showErrorPanel(R.string.error_no_network, false, 0, null));
     }
 
     @Override
     public void displayMobileDataPanel() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                showErrorPanel(R.string.error_mobile_network_available_but_disabled,
-                        true,
-                        R.drawable.ic_settings_white,
-                        new View.OnClickListener() {
-                            @Override
-                            public void onClick(View v) {
-                                Activity activity = getActivity();
-                                if (activity != null && activity instanceof HomeActivity) {
-                                    HomeActivity homeActivity = (HomeActivity) activity;
-                                    homeActivity.goToSettings();
-                                }
-                            }
-                        });
-            }
-        });
+        getActivity().runOnUiThread(() -> showErrorPanel(R.string.error_mobile_network_available_but_disabled,
+                true,
+                R.drawable.ic_settings_white,
+                v -> {
+                    Activity activity = getActivity();
+                    if (activity != null && activity instanceof HomeActivity) {
+                        HomeActivity homeActivity = (HomeActivity) activity;
+                        homeActivity.goToSettings();
+                    }
+                }));
     }
 
     @Override
     public void displayNewContactRowWithName(final String name) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mNewContact == null) {
-                    return;
-                }
-                ((TextView) mNewContact.findViewById(R.id.display_name)).setText(name);
-                mNewContact.setVisibility(View.VISIBLE);
+        getActivity().runOnUiThread(() -> {
+            if (mNewContact == null) {
+                return;
             }
+            ((TextView) mNewContact.findViewById(R.id.display_name)).setText(name);
+            mNewContact.setVisibility(View.VISIBLE);
         });
     }
 
     @Override
     public void displayChooseNumberDialog(final CharSequence[] numbers) {
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        builder.setTitle(R.string.choose_number);
-        builder.setItems(numbers, new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                CharSequence selected = numbers[which];
-                Intent intent = new Intent(CallActivity.ACTION_CALL)
-                        .setClass(getActivity(), CallActivity.class)
-                        .setData(Uri.parse(selected.toString()));
-                startActivityForResult(intent, HomeActivity.REQUEST_CODE_CALL);
-            }
-        });
-        builder.show();
+        new AlertDialog.Builder(getActivity())
+                .setTitle(R.string.choose_number)
+                .setItems(numbers, (dialog, which) -> {
+                    CharSequence selected = numbers[which];
+                    Intent intent = new Intent(CallActivity.ACTION_CALL)
+                            .setClass(getActivity(), CallActivity.class)
+                            .setData(Uri.parse(selected.toString()));
+                    startActivityForResult(intent, HomeActivity.REQUEST_CODE_CALL);
+                })
+                .show();
     }
 
     @Override
@@ -427,25 +397,21 @@
 
     @Override
     public void displayConversationDialog(final SmartListViewModel smartListViewModel) {
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        builder.setItems(R.array.conversation_actions, new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                switch (which) {
-                    case ActionHelper.ACTION_COPY:
-                        presenter.copyNumber(smartListViewModel);
-                        break;
-                    case ActionHelper.ACTION_DELETE:
-                        presenter.deleteConversation(smartListViewModel);
-                        break;
-                    case ActionHelper.ACTION_BLOCK:
-                        presenter.removeContact(smartListViewModel);
-                        break;
-                }
-            }
-        });
-        AlertDialog dialog = builder.create();
-        dialog.show();
+        new AlertDialog.Builder(getActivity())
+                .setItems(R.array.conversation_actions, (dialog, which) -> {
+                    switch (which) {
+                        case ActionHelper.ACTION_COPY:
+                            presenter.copyNumber(smartListViewModel);
+                            break;
+                        case ActionHelper.ACTION_DELETE:
+                            presenter.deleteConversation(smartListViewModel);
+                            break;
+                        case ActionHelper.ACTION_BLOCK:
+                            presenter.removeContact(smartListViewModel);
+                            break;
+                    }
+                })
+                .show();
     }
 
     @Override
@@ -467,27 +433,21 @@
 
     @Override
     public void hideSearchRow() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mNewContact == null) {
-                    return;
-                }
-                mNewContact.setVisibility(View.GONE);
+        getActivity().runOnUiThread(() -> {
+            if (mNewContact == null) {
+                return;
             }
+            mNewContact.setVisibility(View.GONE);
         });
     }
 
     @Override
     public void hideErrorPanel() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mErrorMessagePane == null) {
-                    return;
-                }
-                mErrorMessagePane.setVisibility(View.GONE);
+        getActivity().runOnUiThread(() -> {
+            if (mErrorMessagePane == null) {
+                return;
             }
+            mErrorMessagePane.setVisibility(View.GONE);
         });
     }
 
@@ -503,7 +463,6 @@
 
     @Override
     public void updateList(final ArrayList<SmartListViewModel> smartListViewModels) {
-
         if (mRecyclerView.getAdapter() == null) {
             mSmartListAdapter = new SmartListAdapter(smartListViewModels, SmartListFragment.this);
             mRecyclerView.setAdapter(mSmartListAdapter);
@@ -562,14 +521,11 @@
 
     @Override
     public void scrollToTop() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mRecyclerView == null) {
-                    return;
-                }
-                mRecyclerView.scrollToPosition(0);
+        getActivity().runOnUiThread(() -> {
+            if (mRecyclerView == null) {
+                return;
             }
+            mRecyclerView.scrollToPosition(0);
         });
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/history/DatabaseHelper.java b/ring-android/app/src/main/java/cx/ring/history/DatabaseHelper.java
index 3648e54..f323f66 100644
--- a/ring-android/app/src/main/java/cx/ring/history/DatabaseHelper.java
+++ b/ring-android/app/src/main/java/cx/ring/history/DatabaseHelper.java
@@ -36,7 +36,7 @@
 import cx.ring.model.HistoryCall;
 import cx.ring.model.HistoryText;
 
-/**
+/*
  * Database History Version
  * 7 : changing columns names. See https://gerrit-ring.savoirfairelinux.com/#/c/4297
  */
@@ -123,7 +123,7 @@
      *
      * @param fromDatabaseVersion the old version of the database
      * @param db                  the SQLiteDatabase to work with
-     * @throws SQLiteException
+     * @throws SQLiteException    database has failed to update to the last version
      */
     private void updateDatabase(int fromDatabaseVersion, SQLiteDatabase db) throws SQLiteException {
         try {
@@ -149,7 +149,7 @@
      * Executes the migration from the database version 6 to the next
      *
      * @param db the SQLiteDatabase to work with
-     * @throws SQLiteException
+     * @throws SQLiteException migration from database version 6 to next, failed
      */
     private void updateDatabaseFrom6(SQLiteDatabase db) throws SQLiteException {
         if (db != null && db.isOpen()) {
diff --git a/ring-android/app/src/main/java/cx/ring/interfaces/BackHandlerInterface.java b/ring-android/app/src/main/java/cx/ring/interfaces/BackHandlerInterface.java
index ec9791b..afd54b1 100644
--- a/ring-android/app/src/main/java/cx/ring/interfaces/BackHandlerInterface.java
+++ b/ring-android/app/src/main/java/cx/ring/interfaces/BackHandlerInterface.java
@@ -19,5 +19,5 @@
 package cx.ring.interfaces;
 
 public interface BackHandlerInterface {
-    boolean onBackPressed();
+    void onBackPressed();
 }
diff --git a/ring-android/app/src/main/java/cx/ring/launch/LaunchActivity.java b/ring-android/app/src/main/java/cx/ring/launch/LaunchActivity.java
index 78caca6..7e61788 100644
--- a/ring-android/app/src/main/java/cx/ring/launch/LaunchActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/launch/LaunchActivity.java
@@ -21,7 +21,6 @@
 
 import android.Manifest;
 import android.app.AlertDialog;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
@@ -71,29 +70,14 @@
     @Override
     public void displayAudioPermissionDialog() {
         Log.e(TAG, "Missing required permission RECORD_AUDIO");
-        AlertDialog.Builder builder = new AlertDialog.Builder(this)
+        new AlertDialog.Builder(this)
                 .setTitle(R.string.start_error_title)
                 .setMessage(R.string.start_error_mic_required)
                 .setIcon(R.drawable.ic_mic_black)
                 .setCancelable(false)
-                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        finish();
-                    }
-                }).setOnCancelListener(new DialogInterface.OnCancelListener() {
-                    @Override
-                    public void onCancel(DialogInterface dialog) {
-                        finish();
-                    }
-                });
-        builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
-            @Override
-            public void onDismiss(DialogInterface dialog) {
-                finish();
-            }
-        });
-        builder.show();
+                .setPositiveButton(android.R.string.ok, (dialog, which) -> finish()).setOnCancelListener(dialog -> finish())
+                .setOnDismissListener(dialog -> finish())
+                .show();
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/launch/LaunchPresenter.java b/ring-android/app/src/main/java/cx/ring/launch/LaunchPresenter.java
index 02392e0..00ae0d7 100644
--- a/ring-android/app/src/main/java/cx/ring/launch/LaunchPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/launch/LaunchPresenter.java
@@ -22,6 +22,7 @@
 import android.Manifest;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import javax.inject.Inject;
@@ -63,9 +64,7 @@
         String[] toRequest = buildPermissionsToAsk();
         ArrayList<String> permissionsWeCanAsk = new ArrayList<>();
 
-        for (String permission : toRequest) {
-            permissionsWeCanAsk.add(permission);
-        }
+        permissionsWeCanAsk.addAll(Arrays.asList(toRequest));
 
         if (!permissionsWeCanAsk.isEmpty()) {
             getView().askPermissions(permissionsWeCanAsk);
diff --git a/ring-android/app/src/main/java/cx/ring/mvp/BaseFragment.java b/ring-android/app/src/main/java/cx/ring/mvp/BaseFragment.java
index 053c6a1..cb16d88 100644
--- a/ring-android/app/src/main/java/cx/ring/mvp/BaseFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/mvp/BaseFragment.java
@@ -20,7 +20,6 @@
 package cx.ring.mvp;
 
 import android.app.Fragment;
-import android.app.FragmentManager;
 import android.os.Bundle;
 import android.support.annotation.IdRes;
 import android.support.annotation.LayoutRes;
@@ -103,8 +102,8 @@
     }
 
     protected void replaceFragmentWithSlide(Fragment fragment, @IdRes int content) {
-        FragmentManager fragmentManager = getFragmentManager();
-        fragmentManager.beginTransaction()
+        getFragmentManager()
+                .beginTransaction()
                 .setCustomAnimations(R.animator.slide_in_left,
                         R.animator.slide_out_right, R.animator.slide_in_right, R.animator.slide_out_left)
                 .replace(content, fragment, RingAccountCreationFragment.TAG)
@@ -113,8 +112,8 @@
     }
 
     protected void replaceFragment(Fragment fragment, @IdRes int content) {
-        FragmentManager fragmentManager = getFragmentManager();
-        fragmentManager.beginTransaction()
+        getFragmentManager()
+                .beginTransaction()
                 .replace(content, fragment, RingAccountCreationFragment.TAG)
                 .addToBackStack(RingAccountCreationFragment.TAG)
                 .commit();
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 5de682b..288868c 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
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (C) 2016-2017 by Savoir-faire Linux
  * Author : Alexandre Lision <alexandre.lision@savoirfairelinux.com>
  * <p>
@@ -63,9 +63,7 @@
 
     private void setAccounts(List<Account> results) {
         mDataset.clear();
-        for (Account account : results) {
-            mDataset.add(account);
-        }
+        mDataset.addAll(results);
     }
 
     @Override
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 cff7d45..9a01bdd 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
@@ -21,7 +21,6 @@
 
 import android.Manifest;
 import android.app.AlertDialog;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -312,47 +311,29 @@
         mProfilePhoto.setImageDrawable(mUserImage.getDrawable());
 
         ImageButton cameraView = view.findViewById(R.id.camera);
-        cameraView.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                presenter.cameraClicked();
-            }
-        });
+        cameraView.setOnClickListener(v -> presenter.cameraClicked());
 
         ImageButton gallery = view.findViewById(R.id.gallery);
-        gallery.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                presenter.galleryClicked();
-            }
-        });
+        gallery.setOnClickListener(v -> presenter.galleryClicked());
 
         builder.setView(view);
 
-        builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                dialog.cancel();
-            }
-        });
+        builder.setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.cancel());
 
-        builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
+        builder.setPositiveButton(android.R.string.ok, (dialog, which) -> {
 
-                ByteArrayOutputStream stream = new ByteArrayOutputStream();
-                if (mSourcePhoto != null && mProfilePhoto.getDrawable() != ResourcesCompat.getDrawable(getResources(), R.drawable.ic_contact_picture, null)) {
-                    //FIXME: Reduce the bitmap but not use it.
-                    BitmapUtils.reduceBitmap(mSourcePhoto, VCardUtils.VCARD_PHOTO_SIZE);
-                    mSourcePhoto.compress(Bitmap.CompressFormat.PNG, 100, stream);
-                    Photo photo = new Photo(stream.toByteArray(), ImageType.PNG);
+            ByteArrayOutputStream stream = new ByteArrayOutputStream();
+            if (mSourcePhoto != null && mProfilePhoto.getDrawable() != ResourcesCompat.getDrawable(getResources(), R.drawable.ic_contact_picture, null)) {
+                //FIXME: Reduce the bitmap but not use it.
+                BitmapUtils.reduceBitmap(mSourcePhoto, VCardUtils.VCARD_PHOTO_SIZE);
+                mSourcePhoto.compress(Bitmap.CompressFormat.PNG, 100, stream);
+                Photo photo = new Photo(stream.toByteArray(), ImageType.PNG);
 
-                    presenter.saveVCardFormattedName(editText.getText().toString().trim());
-                    presenter.saveVCardPhoto(photo);
-                    mSourcePhoto = null;
-                } else {
-                    presenter.saveVCardFormattedName(editText.getText().toString().trim());
-                }
+                presenter.saveVCardFormattedName(editText.getText().toString().trim());
+                presenter.saveVCardPhoto(photo);
+                mSourcePhoto = null;
+            } else {
+                presenter.saveVCardFormattedName(editText.getText().toString().trim());
             }
         });
 
@@ -399,20 +380,17 @@
 
     @Override
     public void showViewModel(final RingNavigationViewModel viewModel) {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mAccountAdapter.replaceAll(viewModel.getAccounts());
-                updateUserView(viewModel.getVcard(getActivity().getFilesDir()));
-                updateSelectedAccountView(viewModel.getAccount());
+        RingApplication.uiHandler.post(() -> {
+            mAccountAdapter.replaceAll(viewModel.getAccounts());
+            updateUserView(viewModel.getVcard(getActivity().getFilesDir()));
+            updateSelectedAccountView(viewModel.getAccount());
 
-                if (viewModel.getAccounts().isEmpty()) {
-                    mNewAccountBtn.setVisibility(View.VISIBLE);
-                    mSelectedAccountLayout.setVisibility(View.GONE);
-                } else {
-                    mNewAccountBtn.setVisibility(View.GONE);
-                    mSelectedAccountLayout.setVisibility(View.VISIBLE);
-                }
+            if (viewModel.getAccounts().isEmpty()) {
+                mNewAccountBtn.setVisibility(View.VISIBLE);
+                mSelectedAccountLayout.setVisibility(View.GONE);
+            } else {
+                mNewAccountBtn.setVisibility(View.GONE);
+                mSelectedAccountLayout.setVisibility(View.VISIBLE);
             }
         });
     }
diff --git a/ring-android/app/src/main/java/cx/ring/service/DRingService.java b/ring-android/app/src/main/java/cx/ring/service/DRingService.java
index a30c5fb..7919b20 100644
--- a/ring-android/app/src/main/java/cx/ring/service/DRingService.java
+++ b/ring-android/app/src/main/java/cx/ring/service/DRingService.java
@@ -597,31 +597,35 @@
     }
 
     private void parseIntent(Intent intent) {
-        Bundle extras;
-        switch (intent.getAction()) {
+        if (intent == null) {
+            return;
+        }
+        String action = intent.getAction();
+        if (action == null) {
+            return;
+        }
+        Bundle extras = intent.getExtras();
+        switch (action) {
             case ACTION_TRUST_REQUEST_ACCEPT:
             case ACTION_TRUST_REQUEST_REFUSE:
             case ACTION_TRUST_REQUEST_BLOCK:
-                extras = intent.getExtras();
                 if (extras != null) {
-                    handleTrustRequestAction(intent.getAction(), extras);
+                    handleTrustRequestAction(action, extras);
                 }
                 break;
             case ACTION_CALL_ACCEPT:
             case ACTION_CALL_REFUSE:
             case ACTION_CALL_END:
             case ACTION_CALL_VIEW:
-                extras = intent.getExtras();
                 if (extras != null) {
-                    handleCallAction(intent.getAction(), extras);
+                    handleCallAction(action, extras);
                 }
                 break;
             case ACTION_CONV_READ:
             case ACTION_CONV_ACCEPT:
             case ACTION_CONV_DISMISS:
-                extras = intent.getExtras();
                 if (extras != null) {
-                    handleConvAction(intent.getAction(), intent.getExtras());
+                    handleConvAction(action, intent.getExtras());
                 }
                 break;
             default:
@@ -723,7 +727,7 @@
 
     private boolean isTv() {
         UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
-        return (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION);
+        return (uiModeManager != null && uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION);
     }
 
     public void refreshContacts() {
diff --git a/ring-android/app/src/main/java/cx/ring/service/OpenSlParams.java b/ring-android/app/src/main/java/cx/ring/service/OpenSlParams.java
index 4148b18..2c79333 100644
--- a/ring-android/app/src/main/java/cx/ring/service/OpenSlParams.java
+++ b/ring-android/app/src/main/java/cx/ring/service/OpenSlParams.java
@@ -86,16 +86,4 @@
         }
     }
 
-    // Default factory for Jelly Bean or older.
-    private static class DefaultOpenSlParams extends OpenSlParams {
-        @Override
-        public int getSampleRate() {
-            return 44100;
-        }
-
-        @Override
-        public int getBufferSize() {
-            return 64;
-        }
-    }
 }
diff --git a/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java
index a9f0d03..1dec593 100644
--- a/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java
@@ -106,7 +106,7 @@
         });
 
         try {
-            boolean loaded = result.get();
+            result.get();
             Log.i(TAG, "Ring library has been successfully loaded");
         } catch (Exception e) {
             Log.e(TAG, "Could not load Ring library", e);
diff --git a/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java
index 66070a2..ab9c127 100644
--- a/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java
@@ -219,7 +219,7 @@
         final boolean useLargerSize = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.SUPPORTED_64_BIT_ABIS.length > 0;
         int MIN_WIDTH = useLargerSize ? VIDEO_WIDTH : MIN_VIDEO_WIDTH;
         Point size = new Point(0, 0);
-        /** {@link Camera.Parameters#getSupportedPreviewSizes} :
+        /* {@link Camera.Parameters#getSupportedPreviewSizes} :
          * "This method will always return a list with at least one element."
          * Attempt to find the size with width closest (but above) MIN_WIDTH. */
         for (Camera.Size s : param.getSupportedPreviewSizes()) {
@@ -318,7 +318,6 @@
         }
 
         try {
-            surface.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
             preview.setPreviewDisplay(surface);
         } catch (IOException e) {
             Log.e(TAG, "setPreviewDisplay: " + e.getMessage());
@@ -348,25 +347,19 @@
         final int heigth = videoParams.height;
         final int rotation = videoParams.rotation;
 
-        preview.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
-            @Override
-            public void onPreviewFrame(byte[] data, Camera camera) {
-                setVideoFrame(data, videoWidth, heigth, rotation);
-                preview.addCallbackBuffer(data);
-            }
+        preview.setPreviewCallbackWithBuffer((data, camera) -> {
+            setVideoFrame(data, videoWidth, heigth, rotation);
+            preview.addCallbackBuffer(data);
         });
 
         // enqueue first buffer
         int bufferSize = parameters.getPreviewSize().width * parameters.getPreviewSize().height * ImageFormat.getBitsPerPixel(parameters.getPreviewFormat()) / 8;
         preview.addCallbackBuffer(new byte[bufferSize]);
 
-        preview.setErrorCallback(new Camera.ErrorCallback() {
-            @Override
-            public void onError(int error, Camera cam) {
-                Log.w(TAG, "Camera onError " + error);
-                if (preview == cam) {
-                    stopCapture();
-                }
+        preview.setErrorCallback((error, cam) -> {
+            Log.w(TAG, "Camera onError " + error);
+            if (preview == cam) {
+                stopCapture();
             }
         });
         try {
diff --git a/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java
index 72b4fb8..04aa28d 100644
--- a/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java
@@ -113,7 +113,7 @@
         Set<String> requests = mNotifiedRequests.get(accountId);
         if (requests == null) {
             SharedPreferences preferences = mContext.getSharedPreferences(RING_REQUESTS, Context.MODE_PRIVATE);
-            requests = new HashSet<>(preferences.getStringSet(accountId, new HashSet<String>()));
+            requests = new HashSet<>(preferences.getStringSet(accountId, new HashSet<>()));
             mNotifiedRequests.put(accountId, requests);
         }
         return requests;
diff --git a/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java b/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java
index e05ac2e..1831c53 100644
--- a/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java
@@ -21,7 +21,6 @@
 
 import android.Manifest;
 import android.app.Activity;
-import android.content.DialogInterface;
 import android.content.pm.PackageManager;
 import android.os.Build;
 import android.os.Bundle;
@@ -153,27 +152,22 @@
 
     @OnClick(R.id.settings_clear_history)
     public void onClearHistoryClick() {
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        builder.setTitle(getString(R.string.clear_history_dialog_title))
+        new AlertDialog.Builder(getActivity())
+                .setTitle(getString(R.string.clear_history_dialog_title))
                 .setMessage(getString(R.string.clear_history_dialog_message))
-                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialog, int id) {
+                .setPositiveButton(android.R.string.ok, (dialog, id) -> {
 
-                        // ask the presenter to clear history
-                        presenter.clearHistory();
+                    // ask the presenter to clear history
+                    presenter.clearHistory();
 
-                        Snackbar.make(getView(),
-                                getString(R.string.clear_history_completed),
-                                Snackbar.LENGTH_SHORT).show();
-                    }
+                    Snackbar.make(getView(),
+                            getString(R.string.clear_history_completed),
+                            Snackbar.LENGTH_SHORT).show();
                 })
-                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialog, int id) {
-                        //~ Empty
-                    }
-                });
-        AlertDialog dialog = builder.create();
-        dialog.show();
+                .setNegativeButton(android.R.string.cancel, (dialog, id) -> {
+                    //~ Empty
+                })
+                .show();
     }
 
     @Override
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 b61ed10..0e99dd6 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
@@ -83,14 +83,11 @@
 
         setHasOptionsMenu(true);
 
-        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) {
-                mQRCodeSize = mQrImage.getMeasuredWidth();
+        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();
-            }
+            // when view is ready, we search for contact infos to display
+            presenter.loadContactInformation();
         });
     }
 
@@ -130,26 +127,23 @@
             return;
         }
 
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                if (qrCodeData == null || mQRCodeSize <= 0) {
-                    mQrImage.setVisibility(View.INVISIBLE);
-                    mShareInstruction.setText(mShareMessageNoAccount);
-                } else {
-                    Bitmap bitmap = Bitmap.createBitmap(qrCodeData.getWidth(), qrCodeData.getHeight(), Bitmap.Config.ARGB_8888);
-                    bitmap.setPixels(qrCodeData.getData(), 0, qrCodeData.getWidth(), 0, 0, qrCodeData.getWidth(), qrCodeData.getHeight());
-                    mQrImage.setImageBitmap(bitmap);
-                    mShareInstruction.setText(mShareMessage);
-                    mQrImage.setVisibility(View.VISIBLE);
-                }
+        RingApplication.uiHandler.post(() -> {
+            if (qrCodeData == null || mQRCodeSize <= 0) {
+                mQrImage.setVisibility(View.INVISIBLE);
+                mShareInstruction.setText(mShareMessageNoAccount);
+            } else {
+                Bitmap bitmap = Bitmap.createBitmap(qrCodeData.getWidth(), qrCodeData.getHeight(), Bitmap.Config.ARGB_8888);
+                bitmap.setPixels(qrCodeData.getData(), 0, qrCodeData.getWidth(), 0, 0, qrCodeData.getWidth(), qrCodeData.getHeight());
+                mQrImage.setImageBitmap(bitmap);
+                mShareInstruction.setText(mShareMessage);
+                mQrImage.setVisibility(View.VISIBLE);
+            }
 
-                mUriToShow = viewModel.getAccountShareUri();
-                if (TextUtils.isEmpty(mUriToShow)) {
-                    mShareButton.setEnabled(false);
-                } else {
-                    mShareButton.setEnabled(true);
-                }
+            mUriToShow = viewModel.getAccountShareUri();
+            if (TextUtils.isEmpty(mUriToShow)) {
+                mShareButton.setEnabled(false);
+            } else {
+                mShareButton.setEnabled(true);
             }
         });
     }
diff --git a/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java b/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java
index d711184..540023e 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/about/AboutDetailsFragment.java
@@ -42,7 +42,6 @@
     private static final String TAG = "AboutDetailsFragment";
     private final DetailsFragmentBackgroundController mDetailsBackground =
             new DetailsFragmentBackgroundController(this);
-    private ArrayObjectAdapter mRowsAdapter;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -85,7 +84,7 @@
         selector.addClassPresenter(DetailsOverviewRow.class, rowPresenter);
         selector.addClassPresenter(ListRow.class,
                 new ListRowPresenter());
-        mRowsAdapter = new ArrayObjectAdapter(selector);
+        ArrayObjectAdapter mRowsAdapter = new ArrayObjectAdapter(selector);
 
         Resources res = getActivity().getResources();
         DetailsOverviewRow detailsOverview = new DetailsOverviewRow(
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountExport.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountExport.java
index a2dc49f..7a2e5c1 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountExport.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountExport.java
@@ -20,7 +20,6 @@
 
 import android.app.AlertDialog;
 import android.app.ProgressDialog;
-import android.content.DialogInterface;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
@@ -111,71 +110,55 @@
 
     @Override
     public void showNetworkError() {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mWaitDialog.dismiss();
-                AlertDialog.Builder errorDialog = new AlertDialog.Builder(getActivity());
-                errorDialog.setTitle(R.string.account_export_end_network_title)
-                        .setMessage(R.string.account_export_end_network_message);
-                errorDialog.setPositiveButton(android.R.string.ok, null);
-                errorDialog.show();
-            }
+        RingApplication.uiHandler.post(() -> {
+            mWaitDialog.dismiss();
+            new AlertDialog.Builder(getActivity())
+                    .setTitle(R.string.account_export_end_network_title)
+                    .setMessage(R.string.account_export_end_network_message)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .show();
         });
     }
 
     @Override
     public void showPasswordError() {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mWaitDialog.dismiss();
-                AlertDialog.Builder errorDialog = new AlertDialog.Builder(getActivity());
-                errorDialog.setTitle(R.string.account_export_end_error_title)
-                        .setMessage(R.string.account_export_end_decryption_message);
-                errorDialog.setPositiveButton(android.R.string.ok, null);
-                errorDialog.show();
-            }
+        RingApplication.uiHandler.post(() -> {
+            mWaitDialog.dismiss();
+            new AlertDialog.Builder(getActivity())
+                    .setTitle(R.string.account_export_end_error_title)
+                    .setMessage(R.string.account_export_end_decryption_message)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .show();
         });
     }
 
     @Override
     public void showGenericError() {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mWaitDialog.dismiss();
-                AlertDialog.Builder errorDialog = new AlertDialog.Builder(getActivity());
-                errorDialog.setTitle(R.string.account_export_end_error_title)
-                        .setMessage(R.string.account_export_end_error_message);
-                errorDialog.setPositiveButton(android.R.string.ok, null);
-                errorDialog.show();
-            }
+        RingApplication.uiHandler.post(() -> {
+            mWaitDialog.dismiss();
+            new AlertDialog.Builder(getActivity())
+                    .setTitle(R.string.account_export_end_error_title)
+                    .setMessage(R.string.account_export_end_error_message)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .show();
         });
     }
 
     @Override
     public void showPIN(final String pin) {
-        RingApplication.uiHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                mWaitDialog.dismiss();
-                String pined = getString(R.string.account_end_export_infos).replace("%%", pin);
-                final SpannableString styledResultText = new SpannableString(pined);
-                int pos = pined.lastIndexOf(pin);
-                styledResultText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                styledResultText.setSpan(new StyleSpan(Typeface.BOLD), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                styledResultText.setSpan(new RelativeSizeSpan(2.8f), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                AlertDialog.Builder successDialog = new AlertDialog.Builder(getActivity());
-                successDialog.setMessage(styledResultText);
-                successDialog.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        getFragmentManager().popBackStack();
-                    }
-                });
-                successDialog.show();
-            }
+        RingApplication.uiHandler.post(() -> {
+            mWaitDialog.dismiss();
+            String pined = getString(R.string.account_end_export_infos).replace("%%", pin);
+            final SpannableString styledResultText = new SpannableString(pined);
+            int pos = pined.lastIndexOf(pin);
+            styledResultText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+            styledResultText.setSpan(new StyleSpan(Typeface.BOLD), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+            styledResultText.setSpan(new RelativeSizeSpan(2.8f), pos, (pos + pin.length()), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+            new AlertDialog.Builder(getActivity())
+                    .setMessage(styledResultText)
+                    .setPositiveButton(android.R.string.ok, (dialog, which) -> getFragmentManager().popBackStack())
+                    .show();
         });
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountWizard.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountWizard.java
index 46e3700..10ebb79 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountWizard.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVAccountWizard.java
@@ -21,7 +21,6 @@
 import android.app.Activity;
 import android.app.FragmentManager;
 import android.app.ProgressDialog;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
@@ -165,13 +164,7 @@
 
     @Override
     public void displayCreationError() {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                Toast.makeText(TVAccountWizard.this, "Error creating account", Toast.LENGTH_SHORT).show();
-
-            }
-        });
+        runOnUiThread(() -> Toast.makeText(TVAccountWizard.this, "Error creating account", Toast.LENGTH_SHORT).show());
     }
 
     @Override
@@ -182,126 +175,103 @@
 
     @Override
     public void finish(final boolean affinity) {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (affinity) {
-                    FragmentManager fm = getFragmentManager();
-                    if (fm.getBackStackEntryCount() >= 1) {
-                        fm.popBackStack();
-                    } else {
-                        finish();
-                    }
+        runOnUiThread(() -> {
+            if (affinity) {
+                FragmentManager fm = getFragmentManager();
+                if (fm.getBackStackEntryCount() >= 1) {
+                    fm.popBackStack();
                 } else {
-                    finishAffinity();
+                    finish();
                 }
+            } else {
+                finishAffinity();
             }
         });
     }
 
     @Override
     public void saveProfile(final String accountID, final RingAccountViewModel ringAccountViewModel) {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                RingAccountViewModelImpl ringAccountViewModelImpl = (RingAccountViewModelImpl) ringAccountViewModel;
+        runOnUiThread(() -> {
+            RingAccountViewModelImpl ringAccountViewModelImpl = (RingAccountViewModelImpl) ringAccountViewModel;
 
-                VCard vcard = new VCard();
-                vcard.setFormattedName(new FormattedName(ringAccountViewModelImpl.getFullName()));
-                vcard.setUid(new Uid(ringAccountViewModelImpl.getUsername()));
-                ByteArrayOutputStream stream = new ByteArrayOutputStream();
-                if (ringAccountViewModelImpl.getPhoto() != null) {
-                    Bitmap reduced = BitmapUtils.reduceBitmap(ringAccountViewModelImpl.getPhoto(), VCardUtils.VCARD_PHOTO_SIZE);
-                    reduced.compress(Bitmap.CompressFormat.PNG, 100, stream);
-                    Photo photoVCard = new Photo(stream.toByteArray(), ImageType.PNG);
-                    vcard.removeProperties(Photo.class);
-                    vcard.addPhoto(photoVCard);
-                }
-                vcard.removeProperties(RawProperty.class);
-                VCardUtils.saveLocalProfileToDisk(vcard, accountID, getFilesDir());
+            VCard vcard = new VCard();
+            vcard.setFormattedName(new FormattedName(ringAccountViewModelImpl.getFullName()));
+            vcard.setUid(new Uid(ringAccountViewModelImpl.getUsername()));
+            ByteArrayOutputStream stream = new ByteArrayOutputStream();
+            if (ringAccountViewModelImpl.getPhoto() != null) {
+                Bitmap reduced = BitmapUtils.reduceBitmap(ringAccountViewModelImpl.getPhoto(), VCardUtils.VCARD_PHOTO_SIZE);
+                reduced.compress(Bitmap.CompressFormat.PNG, 100, stream);
+                Photo photoVCard = new Photo(stream.toByteArray(), ImageType.PNG);
+                vcard.removeProperties(Photo.class);
+                vcard.addPhoto(photoVCard);
             }
+            vcard.removeProperties(RawProperty.class);
+            VCardUtils.saveLocalProfileToDisk(vcard, accountID, getFilesDir());
         });
     }
 
     @Override
     public void displayGenericError() {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
+        runOnUiThread(() -> {
 
-                if (mAlertDialog != null && mAlertDialog.isShowing()) {
-                    return;
-                }
-                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(TVAccountWizard.this);
-                dialogBuilder.setPositiveButton(android.R.string.ok, null);
-                dialogBuilder.setTitle(R.string.account_cannot_be_found_title)
-                        .setMessage(R.string.account_cannot_be_found_message);
-                mAlertDialog = dialogBuilder.show();
+            if (mAlertDialog != null && mAlertDialog.isShowing()) {
+                return;
             }
+            mAlertDialog = new AlertDialog.Builder(TVAccountWizard.this)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .setTitle(R.string.account_cannot_be_found_title)
+                    .setMessage(R.string.account_cannot_be_found_message)
+                    .show();
         });
     }
 
     @Override
     public void displayNetworkError() {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
+        runOnUiThread(() -> {
 
-                if (mAlertDialog != null && mAlertDialog.isShowing()) {
-                    return;
-                }
-                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(TVAccountWizard.this);
-                dialogBuilder.setPositiveButton(android.R.string.ok, null);
-                dialogBuilder.setTitle(R.string.account_no_network_title)
-                        .setMessage(R.string.account_no_network_message);
-                mAlertDialog = dialogBuilder.show();
+            if (mAlertDialog != null && mAlertDialog.isShowing()) {
+                return;
             }
+            mAlertDialog = new AlertDialog.Builder(TVAccountWizard.this)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .setTitle(R.string.account_no_network_title)
+                    .setMessage(R.string.account_no_network_message)
+                    .show();
         });
     }
 
     @Override
     public void displayCannotBeFoundError() {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mAlertDialog != null && mAlertDialog.isShowing()) {
-                    return;
-                }
-                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(TVAccountWizard.this);
-                dialogBuilder.setPositiveButton(android.R.string.ok, null);
-                dialogBuilder.setTitle(R.string.account_cannot_be_found_title)
-                        .setMessage(R.string.account_cannot_be_found_message);
-                mAlertDialog = dialogBuilder.show();
+        runOnUiThread(() -> {
+            if (mAlertDialog != null && mAlertDialog.isShowing()) {
+                return;
             }
+            mAlertDialog = new AlertDialog.Builder(TVAccountWizard.this)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .setTitle(R.string.account_cannot_be_found_title)
+                    .setMessage(R.string.account_cannot_be_found_message)
+                    .show();
         });
     }
 
     @Override
     public void displaySuccessDialog() {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (mAlertDialog != null && mAlertDialog.isShowing()) {
-                    return;
-                }
-                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(TVAccountWizard.this);
-                dialogBuilder.setPositiveButton(android.R.string.ok, null);
-                dialogBuilder.setTitle(R.string.account_device_added_title)
-                        .setMessage(R.string.account_device_added_message);
-                mAlertDialog = dialogBuilder.show();
-                mAlertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
-                    @Override
-                    public void onDismiss(DialogInterface dialogInterface) {
+        runOnUiThread(() -> {
+            if (mAlertDialog != null && mAlertDialog.isShowing()) {
+                return;
+            }
+            mAlertDialog = new AlertDialog.Builder(TVAccountWizard.this)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .setTitle(R.string.account_device_added_title)
+                    .setMessage(R.string.account_device_added_message)
+                    .setOnDismissListener(dialogInterface -> {
                         setResult(Activity.RESULT_OK, new Intent());
                         //unlock the screen orientation
                         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
                         startActivity(new Intent(TVAccountWizard.this, HomeActivity.class));
                         finish();
-                    }
-                });
-            }
+                    })
+                    .show();
         });
-
     }
-
 }
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileCreationFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileCreationFragment.java
index 45b81c5..4476c53 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileCreationFragment.java
@@ -99,7 +99,7 @@
         RingAccountViewModelImpl ringAccountViewModel = (RingAccountViewModelImpl) getArguments().get(RingAccountCreationFragment.KEY_RING_ACCOUNT);
         presenter.initPresenter(ringAccountViewModel);
 
-        if (ringAccountViewModel.getPhoto() != null) {
+        if (ringAccountViewModel != null && ringAccountViewModel.getPhoto() != null) {
             getGuidanceStylist().getIconView().setImageBitmap(ringAccountViewModel.getPhoto());
         }
     }
@@ -152,11 +152,11 @@
             Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
             startActivityForResult(intent, REQUEST_CODE_GALLERY);
         } catch (ActivityNotFoundException e) {
-            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
-            dialogBuilder.setPositiveButton(android.R.string.ok, null);
-            dialogBuilder.setTitle(R.string.gallery_error_title)
-                    .setMessage(R.string.gallery_error_message);
-            dialogBuilder.show();
+            new AlertDialog.Builder(getActivity())
+                    .setPositiveButton(android.R.string.ok, null)
+                    .setTitle(R.string.gallery_error_title)
+                    .setMessage(R.string.gallery_error_message)
+                    .show();
         }
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVRingAccountCreationFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVRingAccountCreationFragment.java
index 75ca808..fde48d2 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVRingAccountCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVRingAccountCreationFragment.java
@@ -124,7 +124,7 @@
     public void onGuidedActionFocused(GuidedAction action) {
         if (action.getId() == USERNAME) {
             ViewGroup view = (ViewGroup) getActionItemView(findActionPositionById(USERNAME));
-            EditText text = (EditText) view.findViewById(R.id.guidedactions_item_description);
+            EditText text = view.findViewById(R.id.guidedactions_item_description);
             text.removeTextChangedListener(mUsernameWatcher);
             text.addTextChangedListener(mUsernameWatcher);
         }
diff --git a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java
index a542cf3..6f36bfa 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.java
@@ -34,7 +34,6 @@
 import android.view.ViewGroup;
 import android.view.animation.AccelerateInterpolator;
 import android.view.animation.AlphaAnimation;
-import android.view.animation.Animation;
 import android.view.animation.AnimationSet;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.EditText;
@@ -167,12 +166,14 @@
         super.initPresenter(presenter);
 
         String action = getArguments().getString(KEY_ACTION);
-        if (action.equals(ACTION_PLACE_CALL)) {
-            presenter.initOutGoing(getArguments().getString(KEY_ACCOUNT_ID),
-                    getArguments().getString(KEY_CONTACT_RING_ID),
-                    getArguments().getBoolean(KEY_AUDIO_ONLY));
-        } else if (action.equals(ACTION_GET_CALL)) {
-            presenter.initIncoming(getArguments().getString(KEY_CONF_ID));
+        if (action != null) {
+            if (action.equals(ACTION_PLACE_CALL)) {
+                presenter.initOutGoing(getArguments().getString(KEY_ACCOUNT_ID),
+                        getArguments().getString(KEY_CONTACT_RING_ID),
+                        getArguments().getBoolean(KEY_AUDIO_ONLY));
+            } else if (action.equals(ACTION_GET_CALL)) {
+                presenter.initIncoming(getArguments().getString(KEY_CONF_ID));
+            }
         }
     }
 
@@ -236,12 +237,7 @@
         mVideoPreview.setZOrderMediaOverlay(true);
 
         handler = new Handler();
-        runnable = new Runnable() {
-            @Override
-            public void run() {
-                presenter.uiVisibilityChanged(false);
-            }
-        };
+        runnable = () -> presenter.uiVisibilityChanged(false);
     }
 
     @Override
@@ -268,22 +264,14 @@
 
     @Override
     public void displayContactBubble(final boolean display) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                contactBubbleLayout.setVisibility(display ? View.VISIBLE : View.GONE);
-            }
-        });
+        getActivity().runOnUiThread(() -> contactBubbleLayout.setVisibility(display ? View.VISIBLE : View.GONE));
     }
 
     @Override
     public void displayVideoSurface(final boolean display) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mVideoSurface.setVisibility(display ? View.VISIBLE : View.GONE);
-                mVideoPreview.setVisibility(display ? View.VISIBLE : View.GONE);
-            }
+        getActivity().runOnUiThread(() -> {
+            mVideoSurface.setVisibility(display ? View.VISIBLE : View.GONE);
+            mVideoPreview.setVisibility(display ? View.VISIBLE : View.GONE);
         });
     }
 
@@ -324,66 +312,55 @@
 
     @Override
     public void updateTime(final long duration) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mCallStatusTxt.setText(String.format(Locale.getDefault(), "%d:%02d:%02d", duration / 3600, duration % 3600 / 60, duration % 60));
-            }
-        });
+        getActivity().runOnUiThread(() -> mCallStatusTxt.setText(String.format(Locale.getDefault(), "%d:%02d:%02d", duration / 3600, duration % 3600 / 60, duration % 60)));
     }
 
     @Override
     public void updateContactBubble(@NonNull final CallContact contact) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                byte[] photo = contact.getPhoto();
-                if (photo != null && photo.length > 0) {
-                    Glide.with(getActivity())
-                            .load(photo)
-                            .transform(new CircleTransform(getActivity()))
-                            .error(R.drawable.ic_contact_picture)
-                            .into(contactBubbleView);
-                } else {
-                    Glide.with(getActivity())
-                            .load(R.drawable.ic_contact_picture)
-                            .into(contactBubbleView);
-                }
+        getActivity().runOnUiThread(() -> {
+            byte[] photo = contact.getPhoto();
+            if (photo != null && photo.length > 0) {
+                Glide.with(getActivity())
+                        .load(photo)
+                        .transform(new CircleTransform(getActivity()))
+                        .error(R.drawable.ic_contact_picture)
+                        .into(contactBubbleView);
+            } else {
+                Glide.with(getActivity())
+                        .load(R.drawable.ic_contact_picture)
+                        .into(contactBubbleView);
+            }
 
-                String username = contact.getRingUsername();
-                String displayName = contact.getDisplayName();
-                boolean hasProfileName = displayName != null && !displayName.contentEquals(username);
-                boolean firstShow = contactBubbleTxt.getText() != null && contactBubbleTxt.getText().length() > 0;
+            String username = contact.getRingUsername();
+            String displayName = contact.getDisplayName();
+            boolean hasProfileName = displayName != null && !displayName.contentEquals(username);
+            boolean firstShow = contactBubbleTxt.getText() != null && contactBubbleTxt.getText().length() > 0;
 
-                if (hasProfileName) {
-                    contactBubbleNumTxt.setVisibility(View.VISIBLE);
-                    contactBubbleTxt.setText(displayName);
-                    contactBubbleNumTxt.setText(username);
-                } else {
-                    contactBubbleNumTxt.setVisibility(View.GONE);
-                    contactBubbleTxt.setText(username);
-                }
+            if (hasProfileName) {
+                contactBubbleNumTxt.setVisibility(View.VISIBLE);
+                contactBubbleTxt.setText(displayName);
+                contactBubbleNumTxt.setText(username);
+            } else {
+                contactBubbleNumTxt.setVisibility(View.GONE);
+                contactBubbleTxt.setText(username);
+            }
 
-                if (firstShow) {
-                    mPulseAnimation.startRippleAnimation();
-                }
+            if (firstShow) {
+                mPulseAnimation.startRippleAnimation();
             }
         });
     }
 
     @Override
     public void updateCallStatus(final int callState) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                switch (callState) {
-                    case SipCall.State.NONE:
-                        mCallStatusTxt.setText("");
-                        break;
-                    default:
-                        mCallStatusTxt.setText(callStateToHumanState(callState));
-                        break;
-                }
+        getActivity().runOnUiThread(() -> {
+            switch (callState) {
+                case SipCall.State.NONE:
+                    mCallStatusTxt.setText("");
+                    break;
+                default:
+                    mCallStatusTxt.setText(callStateToHumanState(callState));
+                    break;
             }
         });
     }
@@ -395,87 +372,75 @@
 
     @Override
     public void initNormalStateDisplay(final boolean audioOnly) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                acceptButton.setVisibility(View.GONE);
-                refuseButton.setVisibility(View.GONE);
-                hangupButton.setVisibility(View.VISIBLE);
+        getActivity().runOnUiThread(() -> {
+            acceptButton.setVisibility(View.GONE);
+            refuseButton.setVisibility(View.GONE);
+            hangupButton.setVisibility(View.VISIBLE);
 
-                contactBubbleLayout.setVisibility(audioOnly ? View.INVISIBLE : View.VISIBLE);
+            contactBubbleLayout.setVisibility(audioOnly ? View.INVISIBLE : View.VISIBLE);
 
-                getActivity().invalidateOptionsMenu();
+            getActivity().invalidateOptionsMenu();
 
-                handleVisibilityTimer();
-            }
+            handleVisibilityTimer();
         });
     }
 
     @Override
     public void initIncomingCallDisplay() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                acceptButton.setVisibility(View.VISIBLE);
-                refuseButton.setVisibility(View.VISIBLE);
-                hangupButton.setVisibility(View.GONE);
-            }
+        getActivity().runOnUiThread(() -> {
+            acceptButton.setVisibility(View.VISIBLE);
+            refuseButton.setVisibility(View.VISIBLE);
+            hangupButton.setVisibility(View.GONE);
         });
     }
 
     @Override
     public void initOutGoingCallDisplay() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                acceptButton.setVisibility(View.GONE);
-                refuseButton.setVisibility(View.VISIBLE);
-                hangupButton.setVisibility(View.GONE);
-            }
+        getActivity().runOnUiThread(() -> {
+            acceptButton.setVisibility(View.GONE);
+            refuseButton.setVisibility(View.VISIBLE);
+            hangupButton.setVisibility(View.GONE);
         });
     }
 
     @Override
     public void resetVideoSize(final int videoWidth, final int videoHeight, final int previewWidth, final int previewHeight) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                ViewGroup rootView = (ViewGroup) getView();
-                if (rootView == null)
-                    return;
+        getActivity().runOnUiThread(() -> {
+            ViewGroup rootView = (ViewGroup) getView();
+            if (rootView == null)
+                return;
 
-                double videoRatio = videoWidth / (double) videoHeight;
-                double screenRatio = getView().getWidth() / (double) getView().getHeight();
+            double videoRatio = videoWidth / (double) videoHeight;
+            double screenRatio = getView().getWidth() / (double) getView().getHeight();
 
-                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mVideoSurface.getLayoutParams();
-                int oldW = params.width;
-                int oldH = params.height;
-                if (videoRatio >= screenRatio) {
-                    params.width = RelativeLayout.LayoutParams.MATCH_PARENT;
-                    params.height = (int) (videoHeight * (double) rootView.getWidth() / (double) videoWidth);
-                } else {
-                    params.height = RelativeLayout.LayoutParams.MATCH_PARENT;
-                    params.width = (int) (videoWidth * (double) rootView.getHeight() / (double) videoHeight);
-                }
+            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mVideoSurface.getLayoutParams();
+            int oldW = params.width;
+            int oldH = params.height;
+            if (videoRatio >= screenRatio) {
+                params.width = RelativeLayout.LayoutParams.MATCH_PARENT;
+                params.height = (int) (videoHeight * (double) rootView.getWidth() / (double) videoWidth);
+            } else {
+                params.height = RelativeLayout.LayoutParams.MATCH_PARENT;
+                params.width = (int) (videoWidth * (double) rootView.getHeight() / (double) videoHeight);
+            }
 
-                if (oldW != params.width || oldH != params.height) {
-                    mVideoSurface.setLayoutParams(params);
-                }
+            if (oldW != params.width || oldH != params.height) {
+                mVideoSurface.setLayoutParams(params);
+            }
 
-                final int mPreviewWidth = HardwareServiceImpl.VIDEO_WIDTH;
-                final int mPreviewHeight = HardwareServiceImpl.VIDEO_HEIGHT;
+            final int mPreviewWidth = HardwareServiceImpl.VIDEO_WIDTH;
+            final int mPreviewHeight = HardwareServiceImpl.VIDEO_HEIGHT;
 
-                DisplayMetrics metrics = getResources().getDisplayMetrics();
-                RelativeLayout.LayoutParams paramsPreview = (RelativeLayout.LayoutParams) mVideoPreview.getLayoutParams();
-                oldW = paramsPreview.width;
-                oldH = paramsPreview.height;
-                double previewMaxDim = Math.max(mPreviewWidth, mPreviewHeight);
-                double previewRatio = metrics.density * 160. / previewMaxDim;
-                paramsPreview.width = (int) (mPreviewWidth * previewRatio);
-                paramsPreview.height = (int) (mPreviewHeight * previewRatio);
-                if (oldW != paramsPreview.width || oldH != paramsPreview.height) {
-                    mVideoPreview.setLayoutParams(paramsPreview);
-                }
+            DisplayMetrics metrics = getResources().getDisplayMetrics();
+            RelativeLayout.LayoutParams paramsPreview = (RelativeLayout.LayoutParams) mVideoPreview.getLayoutParams();
+            oldW = paramsPreview.width;
+            oldH = paramsPreview.height;
+            double previewMaxDim = Math.max(mPreviewWidth, mPreviewHeight);
+            double previewRatio = metrics.density * 160. / previewMaxDim;
+            paramsPreview.width = (int) (mPreviewWidth * previewRatio);
+            paramsPreview.height = (int) (mPreviewHeight * previewRatio);
+            if (oldW != paramsPreview.width || oldH != paramsPreview.height) {
+                mVideoPreview.setLayoutParams(paramsPreview);
             }
         });
     }
diff --git a/ring-android/app/src/main/java/cx/ring/tv/camera/CustomCameraActivity.java b/ring-android/app/src/main/java/cx/ring/tv/camera/CustomCameraActivity.java
index a5c507c..a30703b 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/camera/CustomCameraActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/camera/CustomCameraActivity.java
@@ -33,20 +33,17 @@
     int cameraFront;
     int cameraBack;
     int currentCamera;
-    Camera.PictureCallback mPicture = new Camera.PictureCallback() {
-        @Override
-        public void onPictureTaken(byte[] input, Camera camera) {
-            Bundle conData = new Bundle();
-            conData.putByteArray("data", input);
-            Intent intent = new Intent();
-            intent.putExtras(conData);
-            if (getParent() == null) {
-                setResult(RESULT_OK, intent);
-            } else {
-                getParent().setResult(RESULT_OK, intent);
-            }
-            finish();
+    Camera.PictureCallback mPicture = (input, camera) -> {
+        Bundle conData = new Bundle();
+        conData.putByteArray("data", input);
+        Intent intent = new Intent();
+        intent.putExtras(conData);
+        if (getParent() == null) {
+            setResult(RESULT_OK, intent);
+        } else {
+            getParent().setResult(RESULT_OK, intent);
         }
+        finish();
     };
     private Camera mCamera;
     private CameraPreview mCameraPreview;
@@ -88,8 +85,6 @@
     /**
      * Helper method to access the camera returns null if it cannot get the
      * camera or does not exist
-     *
-     * @return
      */
     private Camera getCameraInstance() {
         initVideo();
diff --git a/ring-android/app/src/main/java/cx/ring/tv/cards/contactrequests/ContactRequestCardPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/cards/contactrequests/ContactRequestCardPresenter.java
index b8c13be..25b1ed8 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/cards/contactrequests/ContactRequestCardPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/cards/contactrequests/ContactRequestCardPresenter.java
@@ -38,8 +38,7 @@
 
     @Override
     protected ImageCardView onCreateView() {
-        ImageCardView imageCardView = new ImageCardView(getContext());
-        return imageCardView;
+        return new ImageCardView(getContext());
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCardPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCardPresenter.java
index 6035a2b..a374635 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCardPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/cards/contacts/ContactCardPresenter.java
@@ -38,8 +38,7 @@
 
     @Override
     protected ImageCardView onCreateView() {
-        ImageCardView imageCardView = new ImageCardView(getContext());
-        return imageCardView;
+        return new ImageCardView(getContext());
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCardPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCardPresenter.java
index d4bf362..c20facf 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCardPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/cards/iconcards/IconCardPresenter.java
@@ -25,7 +25,6 @@
 import android.support.v17.leanback.widget.ImageCardView;
 import android.support.v4.content.ContextCompat;
 import android.view.ContextThemeWrapper;
-import android.view.View;
 import android.widget.ImageView;
 
 import cx.ring.R;
@@ -46,12 +45,7 @@
         final ImageView image = imageCardView.getMainImageView();
         image.setBackgroundResource(R.drawable.icon_focused);
         image.getBackground().setAlpha(0);
-        imageCardView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
-            @Override
-            public void onFocusChange(View v, boolean hasFocus) {
-                animateIconBackground(image.getBackground(), hasFocus);
-            }
-        });
+        imageCardView.setOnFocusChangeListener((v, hasFocus) -> animateIconBackground(image.getBackground(), hasFocus));
         return imageCardView;
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/contactrequest/TVContactRequestFragment.java b/ring-android/app/src/main/java/cx/ring/tv/contactrequest/TVContactRequestFragment.java
index b6ea953..bb8676c 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/contactrequest/TVContactRequestFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/contactrequest/TVContactRequestFragment.java
@@ -33,7 +33,6 @@
 import android.support.v17.leanback.widget.FullWidthDetailsOverviewSharedElementHelper;
 import android.support.v17.leanback.widget.ListRow;
 import android.support.v17.leanback.widget.ListRowPresenter;
-import android.support.v17.leanback.widget.OnActionClickedListener;
 import android.support.v17.leanback.widget.Presenter;
 import android.support.v17.leanback.widget.SparseArrayObjectAdapter;
 import android.support.v4.content.ContextCompat;
@@ -84,12 +83,7 @@
 
         // Override down navigation as we do not use it in this screen
         // Only the detailPresenter will be displayed
-        layout.setOnDispatchKeyListener(new View.OnKeyListener() {
-            @Override
-            public boolean onKey(View v, int keyCode, KeyEvent event) {
-                return event.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN;
-            }
-        });
+        layout.setOnDispatchKeyListener((v, keyCode, event) -> event.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN);
     }
 
     private void prepareBackgroundManager() {
@@ -117,16 +111,13 @@
         detailsPresenter.setParticipatingEntranceTransition(false);
         prepareEntranceTransition();
 
-        detailsPresenter.setOnActionClickedListener(new OnActionClickedListener() {
-            @Override
-            public void onActionClicked(Action action) {
-                if (action.getId() == ACTION_ACCEPT) {
-                    presenter.acceptTrustRequest(mSelectedContactRequest);
-                } else if (action.getId() == ACTION_REFUSE) {
-                    presenter.refuseTrustRequest(mSelectedContactRequest);
-                } else if (action.getId() == ACTION_BLOCK) {
-                    presenter.blockTrustRequest(mSelectedContactRequest);
-                }
+        detailsPresenter.setOnActionClickedListener(action -> {
+            if (action.getId() == ACTION_ACCEPT) {
+                presenter.acceptTrustRequest(mSelectedContactRequest);
+            } else if (action.getId() == ACTION_REFUSE) {
+                presenter.refuseTrustRequest(mSelectedContactRequest);
+            } else if (action.getId() == ACTION_BLOCK) {
+                presenter.blockTrustRequest(mSelectedContactRequest);
             }
         });
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/launch/TVLaunchActivity.java b/ring-android/app/src/main/java/cx/ring/tv/launch/TVLaunchActivity.java
index e7c3931..b9721a8 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/launch/TVLaunchActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/launch/TVLaunchActivity.java
@@ -21,7 +21,6 @@
 
 import android.Manifest;
 import android.app.AlertDialog;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
@@ -76,30 +75,14 @@
     @Override
     public void displayAudioPermissionDialog() {
         Log.e(TAG, "Missing required permission RECORD_AUDIO");
-        AlertDialog.Builder builder = new AlertDialog.Builder(this)
+        new AlertDialog.Builder(this)
                 .setTitle(R.string.start_error_title)
                 .setMessage(R.string.start_error_mic_required)
                 .setIcon(R.drawable.ic_mic_black)
                 .setCancelable(false)
-                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        finish();
-                    }
-                }).setOnCancelListener(new DialogInterface.OnCancelListener() {
-                    @Override
-                    public void onCancel(DialogInterface dialog) {
-                        finish();
-                    }
-                });
-        builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
-            @Override
-            public void onDismiss(DialogInterface dialog) {
-                finish();
-            }
-        });
-
-        builder.show();
+                .setPositiveButton(android.R.string.ok, (dialog, which) -> finish()).setOnCancelListener(dialog -> finish())
+                .setOnDismissListener(dialog -> finish())
+                .show();
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java b/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java
index ca0b825..6f74f76 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/MainFragment.java
@@ -133,13 +133,9 @@
         setAdapter(mRowsAdapter);
 
         // listeners
-        setOnSearchClickedListener(new View.OnClickListener() {
-
-            @Override
-            public void onClick(View view) {
-                Intent intent = new Intent(getActivity(), SearchActivity.class);
-                startActivity(intent);
-            }
+        setOnSearchClickedListener(view -> {
+            Intent intent = new Intent(getActivity(), SearchActivity.class);
+            startActivity(intent);
         });
 
         setOnItemViewClickedListener(new ItemViewClickedListener());
@@ -196,43 +192,34 @@
 
     @Override
     public void showLoading(final boolean show) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (show) {
-                    mSpinnerFragment = new SpinnerFragment();
-                    getFragmentManager().beginTransaction().replace(R.id.main_browse_fragment, mSpinnerFragment).commitAllowingStateLoss();
-                } else {
-                    getFragmentManager().beginTransaction().remove(mSpinnerFragment).commitAllowingStateLoss();
-                }
+        getActivity().runOnUiThread(() -> {
+            if (show) {
+                mSpinnerFragment = new SpinnerFragment();
+                getFragmentManager().beginTransaction().replace(R.id.main_browse_fragment, mSpinnerFragment).commitAllowingStateLoss();
+            } else {
+                getFragmentManager().beginTransaction().remove(mSpinnerFragment).commitAllowingStateLoss();
             }
         });
     }
 
     @Override
     public void refreshContact(final int index, final TVListViewModel contact) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                ContactCard contactCard = (ContactCard) cardRowAdapter.get(index);
-                contactCard.setModel(contact);
-                cardRowAdapter.notifyArrayItemRangeChanged(index, 1);
-            }
+        getActivity().runOnUiThread(() -> {
+            ContactCard contactCard = (ContactCard) cardRowAdapter.get(index);
+            contactCard.setModel(contact);
+            cardRowAdapter.notifyArrayItemRangeChanged(index, 1);
         });
     }
 
     @Override
     public void showContacts(final List<TVListViewModel> contacts) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                cardRowAdapter.clear();
-                if (!contacts.isEmpty()) {
-                    for (TVListViewModel contact : contacts) {
-                        cardRowAdapter.add(new ContactCard(contact));
-                    }
-                    cardRowAdapter.notifyArrayItemRangeChanged(0, contacts.size());
+        getActivity().runOnUiThread(() -> {
+            cardRowAdapter.clear();
+            if (!contacts.isEmpty()) {
+                for (TVListViewModel contact : contacts) {
+                    cardRowAdapter.add(new ContactCard(contact));
                 }
+                cardRowAdapter.notifyArrayItemRangeChanged(0, contacts.size());
             }
         });
     }
@@ -269,35 +256,32 @@
 
     @Override
     public void displayAccountInfos(final String address, final RingNavigationViewModel viewModel) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (address != null) {
-                    setTitle(address);
-                } else {
-                    setTitle("");
-                }
+        getActivity().runOnUiThread(() -> {
+            if (address != null) {
+                setTitle(address);
+            } else {
+                setTitle("");
+            }
 
-                if (getActivity() == null) {
-                    Log.e(TAG, "displayAccountInfos: Not able to get activity");
-                    return;
-                }
+            if (getActivity() == null) {
+                Log.e(TAG, "displayAccountInfos: Not able to get activity");
+                return;
+            }
 
-                VCard vcard = viewModel.getVcard(getActivity().getFilesDir());
-                if (vcard == null) {
-                    Log.e(TAG, "displayAccountInfos: Not able to get vcard");
-                    return;
-                }
+            VCard vcard = viewModel.getVcard(getActivity().getFilesDir());
+            if (vcard == null) {
+                Log.e(TAG, "displayAccountInfos: Not able to get vcard");
+                return;
+            }
 
-                FormattedName formattedName = vcard.getFormattedName();
-                if (formattedName != null) {
-                    titleView.setAlias(formattedName.getValue());
-                }
+            FormattedName formattedName = vcard.getFormattedName();
+            if (formattedName != null) {
+                titleView.setAlias(formattedName.getValue());
+            }
 
-                List<Photo> photos = vcard.getPhotos();
-                if (!photos.isEmpty() && photos.get(0) != null) {
-                    titleView.setCurrentAccountPhoto(photos.get(0).getData());
-                }
+            List<Photo> photos = vcard.getPhotos();
+            if (!photos.isEmpty() && photos.get(0) != null) {
+                titleView.setCurrentAccountPhoto(photos.get(0).getData());
             }
         });
     }
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
index bf93f2e..2a1604f 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
@@ -22,7 +22,6 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.concurrent.Callable;
 
 import javax.inject.Inject;
 
@@ -46,8 +45,6 @@
 import io.reactivex.Scheduler;
 import io.reactivex.Single;
 import io.reactivex.annotations.NonNull;
-import io.reactivex.functions.Function;
-import io.reactivex.functions.Predicate;
 import io.reactivex.observers.DisposableSingleObserver;
 import io.reactivex.observers.ResourceSingleObserver;
 import io.reactivex.schedulers.Schedulers;
@@ -151,18 +148,8 @@
 
         //Get all non-ban contact and then get last message and last call to create a smartList entry
         mCompositeDisposable.add(io.reactivex.Observable.fromIterable(contacts)
-                .filter(new Predicate<CallContact>() {
-                    @Override
-                    public boolean test(CallContact callContact) throws Exception {
-                        return !callContact.isBanned();
-                    }
-                })
-                .map(new Function<CallContact, TVListViewModel>() {
-                    @Override
-                    public TVListViewModel apply(CallContact callContact) throws Exception {
-                        return modelToViewModel(callContact);
-                    }
-                })
+                .filter(callContact -> !callContact.isBanned())
+                .map(this::modelToViewModel)
                 .toSortedList()
                 .subscribeOn(Schedulers.computation())
                 .observeOn(mMainScheduler)
@@ -185,31 +172,28 @@
     }
 
     public void loadContactRequest() {
-        mCompositeDisposable.add(Single.fromCallable(new Callable<ArrayList<TVContactRequestViewModel>>() {
-            @Override
-            public ArrayList<TVContactRequestViewModel> call() throws Exception {
+        mCompositeDisposable.add(Single.fromCallable(() -> {
 
-                List<TrustRequest> requests = mAccountService.getCurrentAccount().getRequests();
-                ArrayList<TVContactRequestViewModel> contactRequestViewModels = new ArrayList<>();
+            List<TrustRequest> requests = mAccountService.getCurrentAccount().getRequests();
+            ArrayList<TVContactRequestViewModel> contactRequestViewModels = new ArrayList<>();
 
-                for (TrustRequest request : requests) {
+            for (TrustRequest request : requests) {
 
-                    byte[] photo;
-                    if (request.getVCard().getPhotos().isEmpty()) {
-                        photo = null;
-                    } else {
-                        photo = request.getVCard().getPhotos().get(0).getData();
-                    }
-
-                    TVContactRequestViewModel tvContactRequestVM = new TVContactRequestViewModel(request.getContactId(),
-                            request.getDisplayname(),
-                            request.getFullname(),
-                            photo,
-                            request.getMessage());
-                    contactRequestViewModels.add(tvContactRequestVM);
+                byte[] photo;
+                if (request.getVCard().getPhotos().isEmpty()) {
+                    photo = null;
+                } else {
+                    photo = request.getVCard().getPhotos().get(0).getData();
                 }
-                return contactRequestViewModels;
+
+                TVContactRequestViewModel tvContactRequestVM = new TVContactRequestViewModel(request.getContactId(),
+                        request.getDisplayname(),
+                        request.getFullname(),
+                        photo,
+                        request.getMessage());
+                contactRequestViewModels.add(tvContactRequestVM);
             }
+            return contactRequestViewModels;
         }).subscribeOn(Schedulers.computation())
                 .observeOn(mMainScheduler)
                 .subscribeWith(new ResourceSingleObserver<ArrayList<TVContactRequestViewModel>>() {
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/SpinnerFragment.java b/ring-android/app/src/main/java/cx/ring/tv/main/SpinnerFragment.java
index ae35c26..07dfcf5 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/SpinnerFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/SpinnerFragment.java
@@ -36,8 +36,6 @@
  */
 public class SpinnerFragment extends Fragment {
 
-    private static final String TAG = SpinnerFragment.class.getSimpleName();
-
     private static final int SPINNER_WIDTH = 100;
     private static final int SPINNER_HEIGHT = 100;
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchFragment.java b/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchFragment.java
index c0b7f1a..f1bd8f4 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchFragment.java
@@ -113,26 +113,18 @@
 
     @Override
     public void displayContact(final CallContact contact) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mRowsAdapter.clear();
-                ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new CardPresenterSelector(getActivity()));
-                listRowAdapter.add(new ContactCard(contact, Card.Type.SEARCH_RESULT));
-                HeaderItem header = new HeaderItem(getActivity().getResources().getString(R.string.search_results));
-                mRowsAdapter.add(new ListRow(header, listRowAdapter));
-            }
+        getActivity().runOnUiThread(() -> {
+            mRowsAdapter.clear();
+            ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new CardPresenterSelector(getActivity()));
+            listRowAdapter.add(new ContactCard(contact, Card.Type.SEARCH_RESULT));
+            HeaderItem header = new HeaderItem(getActivity().getResources().getString(R.string.search_results));
+            mRowsAdapter.add(new ListRow(header, listRowAdapter));
         });
     }
 
     @Override
     public void clearSearch() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                mRowsAdapter.clear();
-            }
-        });
+        getActivity().runOnUiThread(() -> mRowsAdapter.clear());
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchPresenter.java
index d0f8311..5d9c4af 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchPresenter.java
@@ -40,8 +40,6 @@
 
 public class RingSearchPresenter extends RootPresenter<RingSearchView> implements Observer<ServiceEvent> {
 
-    private static final String TAG = RingSearchPresenter.class.getSimpleName();
-
     private AccountService mAccountService;
     private HardwareService mHardwareService;
     private VCardService mVCardService;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchView.java b/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchView.java
index 9c8c100..4b5808d 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchView.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/search/RingSearchView.java
@@ -20,7 +20,6 @@
 package cx.ring.tv.search;
 
 import cx.ring.model.CallContact;
-import cx.ring.model.RingError;
 
 public interface RingSearchView {
 
diff --git a/ring-android/app/src/main/java/cx/ring/utils/ActionHelper.java b/ring-android/app/src/main/java/cx/ring/utils/ActionHelper.java
index 6c6aa40..4f747cb 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/ActionHelper.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/ActionHelper.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (C) 2016 by Savoir-faire Linux
  * Author : Alexandre Lision <alexandre.lision@savoirfairelinux.com>
  * <p>
@@ -20,7 +20,6 @@
 import android.content.ActivityNotFoundException;
 import android.content.ContentValues;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.provider.ContactsContract;
 import android.support.v7.app.AlertDialog;
@@ -57,27 +56,18 @@
             return null;
         }
 
-        AlertDialog.Builder builder = new AlertDialog.Builder(context);
-        builder.setTitle(R.string.conversation_action_delete_this_title)
+        return new AlertDialog.Builder(context)
+                .setTitle(R.string.conversation_action_delete_this_title)
                 .setMessage(R.string.conversation_action_delete_this_message)
-                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int whichButton) {
-                        if (callback != null) {
-                            callback.deleteConversation(callContact);
-                        }
+                .setPositiveButton(android.R.string.ok, (dialog, whichButton) -> {
+                    if (callback != null) {
+                        callback.deleteConversation(callContact);
                     }
                 })
-                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int whichButton) {
-                        /* Terminate with no action */
-                    }
-                });
-
-        AlertDialog alertDialog = builder.create();
-        alertDialog.show();
-        return alertDialog;
+                .setNegativeButton(android.R.string.cancel, (dialog, whichButton) -> {
+                    /* Terminate with no action */
+                })
+                .show();
     }
 
     public static void launchCopyNumberToClipboardFromContact(final Context context,
@@ -103,23 +93,20 @@
             callback.copyContactNumberToClipboard(number);
         } else {
             final NumberAdapter adapter = new NumberAdapter(context, callContact, true);
-            AlertDialog.Builder builder = new AlertDialog.Builder(context);
-            builder.setTitle(R.string.conversation_action_select_peer_number);
-            builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
-                @Override
-                public void onClick(DialogInterface dialog, int which) {
-                    if (callback != null) {
-                        Phone selectedPhone = (Phone) adapter.getItem(which);
-                        callback.copyContactNumberToClipboard(selectedPhone.getNumber().toString());
-                    }
-                }
-            });
-            AlertDialog dialog = builder.create();
+            AlertDialog alertDialog = new AlertDialog.Builder(context)
+                    .setTitle(R.string.conversation_action_select_peer_number)
+                    .setAdapter(adapter, (dialog, which) -> {
+                        if (callback != null) {
+                            Phone selectedPhone = (Phone) adapter.getItem(which);
+                            callback.copyContactNumberToClipboard(selectedPhone.getNumber().toString());
+                        }
+                    })
+                    .create();
             final int listViewSidePadding = (int) context
                     .getResources()
                     .getDimension(R.dimen.alert_dialog_side_padding_list_view);
-            dialog.getListView().setPadding(listViewSidePadding, 0, listViewSidePadding, 0);
-            dialog.show();
+            alertDialog.getListView().setPadding(listViewSidePadding, 0, listViewSidePadding, 0);
+            alertDialog.show();
         }
     }
 
@@ -129,26 +116,18 @@
             return;
         }
 
-        AlertDialog.Builder builder = new AlertDialog.Builder(context);
-        builder.setTitle(R.string.ab_action_contact_add_question)
+        new AlertDialog.Builder(context)
+                .setTitle(R.string.ab_action_contact_add_question)
                 .setMessage(context.getString(R.string.add_call_contact_number_to_contacts,
                         contact.getDisplayName()))
-                .setPositiveButton(R.string.ab_action_contact_add, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int whichButton) {
-                        Intent intent = getAddNumberIntentForContact(contact);
-                        context.startActivity(intent);
-                    }
+                .setPositiveButton(R.string.ab_action_contact_add, (dialog, whichButton) -> {
+                    Intent intent = getAddNumberIntentForContact(contact);
+                    context.startActivity(intent);
                 })
-                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int whichButton) {
-                        /* Terminate with no action */
-                    }
-                });
-
-        AlertDialog alertDialog = builder.create();
-        alertDialog.show();
+                .setNegativeButton(android.R.string.cancel, (dialog, whichButton) -> {
+                    /* Terminate with no action */
+                })
+                .show();
     }
 
     public static Intent getAddNumberIntentForContact(CallContact contact) {
diff --git a/ring-android/app/src/main/java/cx/ring/utils/BluetoothWrapper.java b/ring-android/app/src/main/java/cx/ring/utils/BluetoothWrapper.java
index b52b488..349e5f4 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/BluetoothWrapper.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/BluetoothWrapper.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (C) 2010-2012 Regis Montoya (aka r3gis - www.r3gis.fr)
  * This file is part of CSipSimple.
  * <p>
diff --git a/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java b/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java
index 91f6c9d..ba3dccd 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/ContentUriHandler.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (C) 2016-2017 by Savoir-faire Linux
  * Author : Alexandre Lision <alexandre.lision@savoirfairelinux.com>
  * <p>
diff --git a/ring-android/app/src/main/java/cx/ring/utils/NetworkUtils.java b/ring-android/app/src/main/java/cx/ring/utils/NetworkUtils.java
index 538a9f3..22421ae 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/NetworkUtils.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/NetworkUtils.java
@@ -26,9 +26,6 @@
 public final class NetworkUtils {
     /**
      * Get the network info
-     *
-     * @param context
-     * @return
      */
     public static NetworkInfo getNetworkInfo(Context context) {
         ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
diff --git a/ring-android/app/src/main/java/cx/ring/utils/RegisteredNameTextWatcher.java b/ring-android/app/src/main/java/cx/ring/utils/RegisteredNameTextWatcher.java
index 4ef25e0..26f1de8 100644
--- a/ring-android/app/src/main/java/cx/ring/utils/RegisteredNameTextWatcher.java
+++ b/ring-android/app/src/main/java/cx/ring/utils/RegisteredNameTextWatcher.java
@@ -32,8 +32,6 @@
 
 public class RegisteredNameTextWatcher implements TextWatcher {
 
-    private static final String TAG = RegisteredNameTextWatcher.class.getName();
-
     private WeakReference<TextInputLayout> mInputLayout;
     private WeakReference<EditText> mInputText;
     private NameLookupInputHandler mNameLookupInputHandler;
diff --git a/ring-android/app/src/main/java/cx/ring/viewholders/SmartListViewHolder.java b/ring-android/app/src/main/java/cx/ring/viewholders/SmartListViewHolder.java
index 96fab46..3a61b36 100644
--- a/ring-android/app/src/main/java/cx/ring/viewholders/SmartListViewHolder.java
+++ b/ring-android/app/src/main/java/cx/ring/viewholders/SmartListViewHolder.java
@@ -48,26 +48,12 @@
     }
 
     public void bind(final SmartListListeners clickListener, final SmartListViewModel smartListViewModel) {
-        itemView.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                clickListener.onItemClick(smartListViewModel);
-
-            }
+        itemView.setOnClickListener(v -> clickListener.onItemClick(smartListViewModel));
+        itemView.setOnLongClickListener(v -> {
+            clickListener.onItemLongClick(smartListViewModel);
+            return true;
         });
-        itemView.setOnLongClickListener(new View.OnLongClickListener() {
-            @Override
-            public boolean onLongClick(View v) {
-                clickListener.onItemLongClick(smartListViewModel);
-                return true;
-            }
-        });
-        photo.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                clickListener.onPhotoClick(smartListViewModel);
-            }
-        });
+        photo.setOnClickListener(v -> clickListener.onPhotoClick(smartListViewModel));
     }
 
     public interface SmartListListeners {
diff --git a/ring-android/app/src/main/java/cx/ring/views/BoundedLinearLayout.java b/ring-android/app/src/main/java/cx/ring/views/BoundedLinearLayout.java
index 6ca4ed1..4573044 100644
--- a/ring-android/app/src/main/java/cx/ring/views/BoundedLinearLayout.java
+++ b/ring-android/app/src/main/java/cx/ring/views/BoundedLinearLayout.java
@@ -38,10 +38,10 @@
 
     public BoundedLinearLayout(Context context, AttributeSet attrs) {
         super(context, attrs);
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BoundedScrollView);
-        mBoundedWidth = a.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_width, 0);
-        mBoundedHeight = a.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_height, 0);
-        a.recycle();
+        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.BoundedScrollView);
+        mBoundedWidth = typedArray.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_width, 0);
+        mBoundedHeight = typedArray.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_height, 0);
+        typedArray.recycle();
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/views/BoundedRelativeLayout.java b/ring-android/app/src/main/java/cx/ring/views/BoundedRelativeLayout.java
index 895b673..ae01e92 100644
--- a/ring-android/app/src/main/java/cx/ring/views/BoundedRelativeLayout.java
+++ b/ring-android/app/src/main/java/cx/ring/views/BoundedRelativeLayout.java
@@ -38,10 +38,10 @@
 
     public BoundedRelativeLayout(Context context, AttributeSet attrs) {
         super(context, attrs);
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BoundedScrollView);
-        mBoundedWidth = a.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_width, 0);
-        mBoundedHeight = a.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_height, 0);
-        a.recycle();
+        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.BoundedScrollView);
+        mBoundedWidth = typedArray.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_width, 0);
+        mBoundedHeight = typedArray.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_height, 0);
+        typedArray.recycle();
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/views/BoundedScrollView.java b/ring-android/app/src/main/java/cx/ring/views/BoundedScrollView.java
index aa0bf50..9703640 100644
--- a/ring-android/app/src/main/java/cx/ring/views/BoundedScrollView.java
+++ b/ring-android/app/src/main/java/cx/ring/views/BoundedScrollView.java
@@ -38,10 +38,10 @@
 
     public BoundedScrollView(Context context, AttributeSet attrs) {
         super(context, attrs);
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BoundedScrollView);
-        mBoundedWidth = a.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_width, 0);
-        mBoundedHeight = a.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_height, 0);
-        a.recycle();
+        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.BoundedScrollView);
+        mBoundedWidth = typedArray.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_width, 0);
+        mBoundedHeight = typedArray.getDimensionPixelSize(R.styleable.BoundedScrollView_bounded_height, 0);
+        typedArray.recycle();
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/views/CredentialPreferenceDialog.java b/ring-android/app/src/main/java/cx/ring/views/CredentialPreferenceDialog.java
index 3aa7089..268f847 100644
--- a/ring-android/app/src/main/java/cx/ring/views/CredentialPreferenceDialog.java
+++ b/ring-android/app/src/main/java/cx/ring/views/CredentialPreferenceDialog.java
@@ -65,10 +65,6 @@
 
     protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
         super.onPrepareDialogBuilder(builder);
-
-        //builder.setPositiveButton(android.R.string.ok, null);
-        //builder.setNegativeButton(android.R.string.cancel, null);
-        //builder.setMessage(R.string.account_credentials_dialog_mesage);
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/views/EditTextPreferenceDialog.java b/ring-android/app/src/main/java/cx/ring/views/EditTextPreferenceDialog.java
index c978539..8bce15f 100644
--- a/ring-android/app/src/main/java/cx/ring/views/EditTextPreferenceDialog.java
+++ b/ring-android/app/src/main/java/cx/ring/views/EditTextPreferenceDialog.java
@@ -37,7 +37,7 @@
     @Override
     protected void onBindDialogView(View view) {
         super.onBindDialogView(view);
-        EditText text = (EditText) view.findViewById(android.R.id.edit);
+        EditText text = view.findViewById(android.R.id.edit);
         text.setInputType(getArguments().getInt(ARG_TYPE));
     }
 }
diff --git a/ring-android/libringclient/src/main/java/cx/ring/facades/ConversationFacade.java b/ring-android/libringclient/src/main/java/cx/ring/facades/ConversationFacade.java
index 4d705e4..bb36cc9 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/facades/ConversationFacade.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/facades/ConversationFacade.java
@@ -120,10 +120,6 @@
         return mConversationMap;
     }
 
-    /**
-     * @param contact
-     * @return
-     */
     public Conversation getConversationByContact(CallContact contact) {
         if (contact != null) {
             ArrayList<String> keys = contact.getIds();
@@ -137,10 +133,6 @@
         return null;
     }
 
-    /**
-     * @param callId
-     * @return
-     */
     public Conversation getConversationByCallId(String callId) {
         for (Conversation conversation : mConversationMap.values()) {
             Conference conf = conversation.getConference(callId);
@@ -193,7 +185,6 @@
     }
 
     /**
-     * @param id
      * @return the conversation from the local cache
      */
     public Conversation getConversationById(String id) {
diff --git a/ring-android/libringclient/src/main/java/cx/ring/navigation/RingNavigationViewModel.java b/ring-android/libringclient/src/main/java/cx/ring/navigation/RingNavigationViewModel.java
index 7046e59..98c2803 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/navigation/RingNavigationViewModel.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/navigation/RingNavigationViewModel.java
@@ -43,7 +43,11 @@
     }
 
     public VCard getVcard(File filesDir) {
-        String accountId = isAccountValid() ? mAccount.get().getAccountID() : null;
+        Account account = mAccount.get();
+        if (account == null) {
+            return null;
+        }
+        String accountId = isAccountValid() ? account.getAccountID() : null;
         return VCardUtils.loadLocalProfileFromDisk(filesDir, accountId);
     }
 
diff --git a/ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListPresenter.java b/ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListPresenter.java
index eeb8714..7dd22fa 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListPresenter.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/smartlist/SmartListPresenter.java
@@ -651,6 +651,7 @@
                 case NEW_BUDDY_NOTIFICATION:
                     updatePresence();
                     return;
+                default:
             }
         }
     }
diff --git a/ring-android/libringclient/src/main/java/cx/ring/utils/SwigNativeConverter.java b/ring-android/libringclient/src/main/java/cx/ring/utils/SwigNativeConverter.java
index 366420f..c492d35 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/utils/SwigNativeConverter.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/utils/SwigNativeConverter.java
@@ -24,7 +24,6 @@
 import java.util.HashMap;
 import java.util.List;
 
-import cx.ring.daemon.Blob;
 import cx.ring.daemon.StringMap;
 import cx.ring.daemon.StringVect;
 import cx.ring.daemon.VectMap;
@@ -43,9 +42,7 @@
 
     public static ArrayList<String> convertSwigToNative(StringVect vector) {
         ArrayList<String> toReturn = new ArrayList<>();
-        for (int i = 0; i < vector.size(); ++i) {
-            toReturn.add(vector.get(i));
-        }
+        toReturn.addAll(vector);
         return toReturn;
     }
 }