/* * Copyright (c) 2016 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com> * All Rights Reserved. */ package me.zhanghai.android.douya.account.content; import android.accounts.Account; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import me.zhanghai.android.douya.account.util.AccountUtils; import me.zhanghai.android.douya.network.api.info.apiv2.SimpleUser; import me.zhanghai.android.douya.network.api.info.apiv2.User; import me.zhanghai.android.douya.user.content.UserResource; import me.zhanghai.android.douya.util.FragmentUtils; public class AccountUserResource extends UserResource { private static final String KEY_PREFIX = AccountUserResource.class.getName() + '.'; private final String EXTRA_ACCOUNT = KEY_PREFIX + "account"; private Account mAccount; private static final String FRAGMENT_TAG_DEFAULT = AccountUserResource.class.getName(); private static AccountUserResource newInstance(Account account) { //noinspection deprecation return new AccountUserResource().setArguments(account); } public static AccountUserResource attachTo(Account account, Fragment fragment, String tag, int requestCode) { FragmentActivity activity = fragment.getActivity(); AccountUserResource instance = FragmentUtils.findByTag(activity, tag); if (instance == null) { instance = newInstance(account); instance.targetAt(fragment, requestCode); FragmentUtils.add(instance, activity, tag); } return instance; } public static AccountUserResource attachTo(Account account, Fragment fragment) { return attachTo(account, fragment, FRAGMENT_TAG_DEFAULT, REQUEST_CODE_INVALID); } /** * @deprecated Use {@code attachTo()} instead. */ @SuppressWarnings("deprecation") public AccountUserResource() {} protected AccountUserResource setArguments(Account account) { SimpleUser partialUser = makePartialUser(account); super.setArguments(partialUser.getIdOrUid(), partialUser, AccountUtils.getUser(account)); FragmentUtils.ensureArguments(this) .putParcelable(EXTRA_ACCOUNT, account); return this; } private SimpleUser makePartialUser(Account account) { SimpleUser partialUser = new SimpleUser(); //noinspection deprecation partialUser.id = AccountUtils.getUserId(account); //noinspection deprecation partialUser.uid = String.valueOf(partialUser.id); partialUser.name = AccountUtils.getUserName(account); return partialUser; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAccount = getArguments().getParcelable(EXTRA_ACCOUNT); } @Override protected void loadOnStart() { // Always load, so that we can ever get refreshed. onLoadOnStart(); } @Override protected void onLoadSuccess(User user) { super.onLoadSuccess(user); AccountUtils.setUserName(mAccount, user.name); AccountUtils.setUser(mAccount, user); } @Deprecated @Override public boolean hasSimpleUser() { throw new IllegalStateException("We always have a (partial) user"); } @Deprecated @Override public SimpleUser getSimpleUser() { throw new IllegalStateException("Use getPartialUser() instead"); } public SimpleUser getPartialUser() { return super.getSimpleUser(); } }