@Override
    protected Void doInBackground(Void... params) {

      // Simulates a background task
      try {
        Thread.sleep(500);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }

      // load more data
      try {
        getDataForContacts(mCurNumItems, mCurNumItems + NUMBER_DATA_GET_MORE);
      } catch (IndexOutOfBoundsException ex) {
        mIsOverData = true;
        final FragmentActivity activity = getActivity();
        activity.runOnUiThread(
            new Runnable() {
              public void run() {
                Toast.makeText(activity, "No more data to load", Toast.LENGTH_SHORT).show();
              }
            });
      }

      return null;
    }
        @Override
        public void update(Observable observable, Object data) {
          Log.i(TAG, "update");
          final FragmentActivity activity = getActivity();
          if (activity == null || WalletFragment.this.isAdded() == false) return;
          activity.runOnUiThread(
              new Runnable() {
                @Override
                public void run() {
                  Log.i(
                      TAG,
                      android.os.Process.myTid()
                          + " TID UI : Refreshing wallet fragment "
                          + walletObservable);

                  final Bitmap IdenticonBitmap = walletObservable.getCurrentIdenticon();
                  if (IdenticonBitmap != null) identicon.setImageBitmap(IdenticonBitmap);
                  final String aliasName1 = walletObservable.getAliasName();
                  if (aliasName1 != null) {
                    aliasNameText.setText(aliasName1);
                    aliasNameText.setVisibility(View.VISIBLE);
                  }

                  if (walletObservable.isSyncedOrPending()) {
                    final Coin walletBalance = walletObservable.getWalletBalance();
                    final Coin walletUnconfirmedBalance =
                        walletObservable.getWalletUnconfirmedBalance();
                    long value1 = walletBalance.getValue();
                    long value2 = walletUnconfirmedBalance.getValue();
                    long value = Math.max(value1, value2); // Optimistic view
                    final String units = String.valueOf(value);
                    final Bitmap QrCodeBitmap = walletObservable.getCurrentQrCode();

                    final String aliasName = walletObservable.getAliasName();
                    final String unconfirmedAliasName = walletObservable.getUnconfirmedAliasName();

                    if (value > 0) {
                      walletWarning.setVisibility(View.GONE);
                    } else {
                      walletWarning.setVisibility(View.VISIBLE);
                    }

                    syncedLayout.setVisibility(View.VISIBLE);
                    syncingLayout.setVisibility(View.GONE);
                    Address current = walletObservable.getCurrent();
                    currentAddressText.setText(current != null ? current.toString() : "");
                    btcBalance.setUnits(units);
                    btcBalance.refreshUI();
                    if (QrCodeBitmap != null) currentQrCode.setImageBitmap(QrCodeBitmap);

                    if (aliasName == null
                        && unconfirmedAliasName == null) { // Alias still to be defined
                      setAliasButton.setVisibility(View.VISIBLE);
                      aliasNameText.setVisibility(View.GONE);
                      aliasNameUnconfirmed.setVisibility(View.GONE);
                    } else if (aliasName == null) { // unconfirmed alias defined!
                      setAliasButton.setVisibility(View.GONE);
                      aliasNameText.setVisibility(View.VISIBLE);
                      aliasNameUnconfirmed.setVisibility(View.VISIBLE);
                      aliasNameText.setText(unconfirmedAliasName);
                    } else { // alias defined and confirmed
                      setAliasButton.setVisibility(View.GONE);
                      aliasNameText.setVisibility(View.VISIBLE);
                      aliasNameUnconfirmed.setVisibility(View.GONE);
                      aliasNameText.setText(aliasName);
                    }

                    if (value1 != value2) {
                      btcBalanceUnconfirmed.setVisibility(View.VISIBLE);
                    } else {
                      btcBalanceUnconfirmed.setVisibility(View.GONE);
                    }
                    payButton.setVisibility(View.VISIBLE);

                    if (walletObservable.getMessagePending() > 0) {
                      messagePending.setVisibility(View.VISIBLE);
                      messagePending.setText(
                          walletObservable.getMessagePending()
                              + " message"
                              + (walletObservable.getMessagePending() > 1 ? "s" : "")
                              + " pending");
                    } else {
                      messagePending.setVisibility(View.GONE);
                    }

                    // refresh actionbar
                    activity.invalidateOptionsMenu();

                    // Load my messages
                    inQueue = null;
                    loadMoreData();

                  } else if (walletObservable.getState() == WalletObservable.State.SYNCING) {
                    if (activity != null && activity.isFinishing()) return;
                    syncedLayout.setVisibility(View.GONE);
                    syncingLayout.setVisibility(View.VISIBLE);
                    setAliasButton.setVisibility(View.INVISIBLE);
                    payButton.setVisibility(View.GONE);
                    if (walletObservable.getPercSync() != null)
                      syncingText.setText(
                          String.format("Syncing (%d%%)", walletObservable.getPercSync()));
                  } else {
                    payButton.setVisibility(View.GONE);
                    FragmentTransaction transaction = getFragmentManager().beginTransaction();
                    final SharedPreferences sharedPref =
                        PreferenceManager.getDefaultSharedPreferences(getActivity());
                    String passphrase = sharedPref.getString(Preferences.PASSPHRASE, null);
                    if (passphrase == null) {
                      transaction.replace(R.id.root_frame, new HelloFragment());
                      transaction.commitAllowingStateLoss();
                      getFragmentManager().executePendingTransactions();
                    } else {; // nothing = transaction.replace(R.id.root_frame, new
                              // WalletFragment());
                    }
                  }
                }
              });
        }