読者です 読者をやめる 読者になる 読者になる

リア充爆発日記

You don't even know what ria-ju really is.

美しくログアウトする方法

えーと、何が言いたいのかというと、ログアウトしたあとは、だいたいトップ画面とかログイン画面とかに遷移させると思うんです。
で、そのときに戻るボタン押した時にログアウトボタンがある画面に戻っちゃうとかっちょ悪いよね、という話。

Activityの流れとしては以下のような流れ

ログアウトボタンがあるActivity→SignOutActivity→TopActivity

ログアウトボタンがあるActivity

※僕の場合、ここはPreferenceActivityなんだけど、これは別でまとめようと思うのでスルー。
普通にSignOutActivityに向けてstartActivityするだけ

SignOutActivity

このテストが通るように書きなちゃい!

public class SignOutActivityTest {
    @Test
    public void testOnCreate() throws Exception {
        SignOutActivity activity = new SignOutActivity();
        TestUtil.createSession(activity);

        activity.onCreate(null);

        assertThat(SessionHandler.isSessionExist(activity), is(false));

        ShadowActivity shadowActivity = Robolectric.shadowOf(activity);
        Intent startedIntent = shadowActivity.getNextStartedActivity();
        ShadowIntent shadowIntent = Robolectric.shadowOf(startedIntent);
        assertThat(shadowIntent.getFlags(), is(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP));
        Assert.assertThat(shadowIntent.getComponent().getClassName(), equalTo(TopActivity.class.getName()));

        assertThat(shadowActivity.isFinishing(), is(true));


    }
}

ちなみにTestUtil.createSession(activity);は、お手製のユーザー名とか入ったPreferenceを仕込むテスト用のやつで、SessionHandler.isSessionExist(activity)は、お手製のユーザー名とか入ったPreferenceが消えてなくなってるか確認するだけのやつ。

TopActivity

    @Override
    public void onBackPressed() {
        moveTaskToBack(true);
    }


最後のがあんまよくわかってないんだけど、眠いからもういいや。。。活動限界です!!