diff --git a/ring-android/app/src/main/java/cx/ring/client/AccountEditionActivity.java b/ring-android/app/src/main/java/cx/ring/client/AccountEditionActivity.java index 5e12fbf370a7648c81ab643224807f50637a8412..a412bc20051b0ce83698cfb678fdccdf124651e2 100644 --- a/ring-android/app/src/main/java/cx/ring/client/AccountEditionActivity.java +++ b/ring-android/app/src/main/java/cx/ring/client/AccountEditionActivity.java @@ -94,7 +94,31 @@ public class AccountEditionActivity extends AppCompatActivity implements LocalSe @Override public void update(Observable observable, Object data) { - processAccount(); + if (mAccSelected == null || mService == null) { + return; + } + + final Account acc = mAccSelected; + if (getSupportActionBar() != null) { + getSupportActionBar().setTitle(acc.getAlias()); + } + + final IDRingService remote = getRemoteService(); + if (remote == null) { + Log.w(TAG, "Error updating account, remote service is null"); + return; + } + mService.getThreadPool().submit(new Runnable() { + @Override + public void run() { + try { + remote.setCredentials(acc.getAccountID(), acc.getCredentialsHashMapList()); + remote.setAccountDetails(acc.getAccountID(), acc.getDetails()); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + }); } }; @@ -106,12 +130,13 @@ public class AccountEditionActivity extends AppCompatActivity implements LocalSe mService = binder.getService(); mBound = true; - String account_id = getIntent().getData().getLastPathSegment(); + String accountId = getIntent().getData().getLastPathSegment(); Log.i(TAG, "Service connected " + className.getClassName() + " " + getIntent().getData().toString()); - mAccSelected = mService.getAccount(account_id); - if (mAccSelected == null) + mAccSelected = mService.getAccount(accountId); + if (mAccSelected == null) { finish(); + } mAccSelected.addObserver(mAccountObserver); getSupportActionBar().setTitle(mAccSelected.getAlias()); @@ -134,6 +159,7 @@ public class AccountEditionActivity extends AppCompatActivity implements LocalSe @Override public void onServiceDisconnected(ComponentName arg0) { + // Called in case of service crashing or getting killed mAccSelected.deleteObserver(mAccountObserver); mBound = false; } @@ -167,6 +193,9 @@ public class AccountEditionActivity extends AppCompatActivity implements LocalSe if (mBound) { unbindService(mConnection); + if (mAccSelected != null) { + mAccSelected.deleteObserver(mAccountObserver); + } mBound = false; } } @@ -184,33 +213,13 @@ public class AccountEditionActivity extends AppCompatActivity implements LocalSe case R.id.menuitem_export: startExport(); break; + default: + break; } return true; } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - } - - private void processAccount() { - final Account acc = mAccSelected; - final IDRingService remote = getRemoteService(); - getSupportActionBar().setTitle(acc.getAlias()); - mService.getThreadPool().submit(new Runnable() { - @Override - public void run() { - try { - remote.setCredentials(acc.getAccountID(), acc.getCredentialsHashMapList()); - remote.setAccountDetails(acc.getAccountID(), acc.getDetails()); - } catch (RemoteException e) { - e.printStackTrace(); - } - } - }); - } - private AlertDialog createDeleteDialog() { Activity ownerActivity = this; AlertDialog.Builder builder = new AlertDialog.Builder(ownerActivity); @@ -268,7 +277,7 @@ public class AccountEditionActivity extends AppCompatActivity implements LocalSe } private void startExport() { - boolean hasPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED); + boolean hasPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; if (hasPermission) { showExportDialog(); } else { @@ -297,7 +306,7 @@ public class AccountEditionActivity extends AppCompatActivity implements LocalSe LayoutInflater inflater = getLayoutInflater(); ViewGroup v = (ViewGroup) inflater.inflate(R.layout.dialog_account_export, null); final TextView pwd = (TextView) v.findViewById(R.id.newpwd_txt); - final TextView pwd_confirm = (TextView) v.findViewById(R.id.newpwd_confirm_txt); + final TextView pwdConfirm = (TextView) v.findViewById(R.id.newpwd_confirm_txt); builder.setMessage(R.string.account_export_message) .setTitle(R.string.account_export_title) .setPositiveButton(R.string.account_export, null) @@ -313,10 +322,8 @@ public class AccountEditionActivity extends AppCompatActivity implements LocalSe pwd.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { - Log.w(TAG, "onEditorAction " + actionId + " " + (event == null ? null : event.toString())); - if (actionId == EditorInfo.IME_ACTION_NEXT) - return checkPassword(v, null); - return false; + Log.i(TAG, "onEditorAction " + actionId + " " + (event == null ? null : event.toString())); + return actionId == EditorInfo.IME_ACTION_NEXT && checkPassword(v, null); } }); pwd.setOnFocusChangeListener(new View.OnFocusChangeListener() { @@ -329,15 +336,13 @@ public class AccountEditionActivity extends AppCompatActivity implements LocalSe } } }); - pwd_confirm.setOnEditorActionListener(new TextView.OnEditorActionListener() { + pwdConfirm.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { Log.w(TAG, "onEditorAction " + actionId + " " + (event == null ? null : event.toString())); - if (actionId == EditorInfo.IME_ACTION_DONE) { - if (!checkPassword(pwd, v)) { - alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).callOnClick(); - return true; - } + if (actionId == EditorInfo.IME_ACTION_DONE && !checkPassword(pwd, v)) { + alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).callOnClick(); + return true; } return false; } @@ -349,7 +354,7 @@ public class AccountEditionActivity extends AppCompatActivity implements LocalSe alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (!checkPassword(pwd, pwd_confirm)) { + if (!checkPassword(pwd, pwdConfirm)) { final String pwd_txt = pwd.getText().toString(); alertDialog.dismiss(); @@ -409,7 +414,7 @@ public class AccountEditionActivity extends AppCompatActivity implements LocalSe } protected void onPostExecute(Integer ret) { - if (exportDialog != null){ + if (exportDialog != null) { exportDialog.dismiss(); }