IMAPSでは、クライアント内にデータをセキュアに保存するための仕組みとして、SLSを提供しています。SLSを認証モードで利用している場合、格納データはパスワードをキーにして保護されています。
そのためパスワードが変更された場合、格納された暗号化データを引き継ぐ(暗号化データを新しいパスワードで再暗号化する)必要があります。
@Override protected Boolean doInBackground(String... params) { boolean result = true; try { // オンラインでのログイン mLoginManager.loginOnline(mLoginURL, mUserId, mPasswd); } catch (Exception e) { exception = e; result = false; } return result; } @Override protected void onPostExecute(Boolean result) { if (!result) { if (exception instanceof IMAPSSlsPasswordException) { // パスワードが異なるため、データの引き継ぎができなかった場合に例外が発生します。 // データの引き継ぎをおこなうかをユーザーに問い合わせます。 } else if (exception instanceof xxxxException) { // そのほかの例外については開発者用マニュアルを参照してください。 } } } // ダイアログで、データの引き継ぎをおこなうかをユーザーに問い合わせる場合 // データを引き継ぎます alertDialog.setPositiveButton("引き継ぎ", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // データを引き継ぐ場合は、旧パスワードをユーザーに問い合わせます。 } }); // データを削除します alertDialog.setNeutralButton("削除", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { LoginManager loginManager = new LoginManager(getApplicationContext()); try { // データを削除する場合は、deleteDataを呼び出します。 loginManager.deleteData(); } catch (例外キャッチ) { // 例外については開発者用マニュアルを参照してください。 } } }); // ダイアログで、旧パスワードをユーザーに問い合わせてデータを引き継ぐ場合 alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { EditText editText = (EditText) inputView.findViewById(R.id.old_password_inputtext); String oldPassword = editText.getText().toString(); try { // 入力された旧パスワードを引数に、transDataを呼び出します。 LoginManager loginManager = new LoginManager(getApplicationContext()); loginManager.transData(oldPassword); } catch (IMAPSSlsPasswordException e) { // 旧パスワードが異なるため、データの引き継ぎができなかった場合に例外が発生します。 } catch (例外キャッチ) { // そのほかの例外については開発者用マニュアルを参照してください。 } } });