aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2017-01-29 22:29:41 +0900
committerKazuki Yamaguchi <k@rhe.jp>2017-01-29 22:29:41 +0900
commitd8b158b4b6195711cbb7e50c90c436ae220b17cb (patch)
tree04dd919e9dcf8f163963c5b19a9675ff3298aabf
parente8a0e44c77048ea1dac96ca8dff1f4fb2650a88f (diff)
downloadSmileEssence-d8b158b4b6195711cbb7e50c90c436ae220b17cb.tar.gz
Account belongs to MainActivity (again)
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/Application.java65
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.java40
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/ManageAccountsActivity.java2
3 files changed, 77 insertions, 30 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/Application.java b/app/src/main/java/net/lacolaco/smileessence/Application.java
index e5563706..0b2b07ab 100644
--- a/app/src/main/java/net/lacolaco/smileessence/Application.java
+++ b/app/src/main/java/net/lacolaco/smileessence/Application.java
@@ -24,11 +24,15 @@
package net.lacolaco.smileessence;
+import android.app.Activity;
+import android.os.Bundle;
import com.crashlytics.android.Crashlytics;
import com.crashlytics.android.core.CrashlyticsCore;
+import com.squareup.haha.perflib.Main;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.leakcanary.RefWatcher;
import io.fabric.sdk.android.Fabric;
+import net.lacolaco.smileessence.activity.MainActivity;
import net.lacolaco.smileessence.data.Account;
import net.lacolaco.smileessence.data.OrmaHolder;
import net.lacolaco.smileessence.logging.Logger;
@@ -46,8 +50,7 @@ import java.util.WeakHashMap;
*/
public class Application extends android.app.Application {
private static Application instance;
- private Account currentAccount;
- private final Set<OnCurrentAccountChangedListener> currentAccountChangedListeners = Collections.newSetFromMap(new WeakHashMap<>());
+ private MainActivity lastUsedMainActivity;
private int resId;
private RefWatcher refWatcher;
@@ -58,13 +61,13 @@ public class Application extends android.app.Application {
OrmaHolder.initialize(this);
instance = this; // プロセスの寿命の間 1 度しか呼ばれないので安全
refWatcher = LeakCanary.install(this);
+ registerActivityLifecycleCallbacks(new ActivityLifeCycleListener());
Logger.debug("onCreate");
}
// --------------------- reset ---------------------
public void resetState() {
- currentAccount = null;
- currentAccountChangedListeners.clear();
+ lastUsedMainActivity = null;
resId = -1;
}
@@ -79,6 +82,10 @@ public class Application extends android.app.Application {
}
}
+ public MainActivity getLastUsedMainActivity() {
+ return lastUsedMainActivity;
+ }
+
// --------------------- theme ---------------------
public int getThemeResId() {
if (resId == -1) {
@@ -90,22 +97,10 @@ public class Application extends android.app.Application {
// --------------------- current account ---------------------
public Account getCurrentAccount() {
- return currentAccount;
- }
-
- public void setCurrentAccount(Account val) {
- Logger.debug(String.format("setCurrentAccount: %s", val.getUser().getScreenName()));
- currentAccount = val;
- for (OnCurrentAccountChangedListener listener : currentAccountChangedListeners) {
- new UIHandler().post(() -> listener.onCurrentAccountChanged(val));
- }
+ return lastUsedMainActivity != null ? lastUsedMainActivity.getCurrentAccount() : null;
}
- public void addOnCurrentAccountChangedListener(OnCurrentAccountChangedListener listener) {
- currentAccountChangedListeners.add(listener);
- }
-
- public interface OnCurrentAccountChangedListener {
+ public interface OnCurrentAccountChangedListener { // will be removed
void onCurrentAccountChanged(Account newAccount);
}
@@ -113,4 +108,38 @@ public class Application extends android.app.Application {
public RefWatcher getRefWatcher() {
return refWatcher;
}
+
+ private class ActivityLifeCycleListener implements ActivityLifecycleCallbacks {
+ @Override
+ public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
+ }
+
+ @Override
+ public void onActivityStarted(Activity activity) {
+ }
+
+ @Override
+ public void onActivityResumed(Activity activity) {
+ if (activity instanceof MainActivity)
+ lastUsedMainActivity = (MainActivity) activity;
+ }
+
+ @Override
+ public void onActivityPaused(Activity activity) {
+ if (activity instanceof MainActivity)
+ lastUsedMainActivity = null;
+ }
+
+ @Override
+ public void onActivityStopped(Activity activity) {
+ }
+
+ @Override
+ public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
+ }
+
+ @Override
+ public void onActivityDestroyed(Activity activity) {
+ }
+ }
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.java b/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.java
index e2871e17..fef4e7e2 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.java
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.java
@@ -57,16 +57,16 @@ import net.lacolaco.smileessence.notification.Notificator;
import net.lacolaco.smileessence.preference.InternalPreferenceHelper;
import net.lacolaco.smileessence.twitter.UserStreamListener;
import net.lacolaco.smileessence.twitter.task.Users;
-import net.lacolaco.smileessence.util.BitmapOptimizer;
-import net.lacolaco.smileessence.util.BitmapURLTask;
-import net.lacolaco.smileessence.util.IntentUtils;
-import net.lacolaco.smileessence.util.UIObserverBundle;
+import net.lacolaco.smileessence.util.*;
import net.lacolaco.smileessence.view.adapter.PageListAdapter;
import net.lacolaco.smileessence.view.dialog.ConfirmDialogFragment;
import net.lacolaco.smileessence.view.page.*;
import twitter4j.TwitterStream;
import java.lang.reflect.Field;
+import java.util.Collections;
+import java.util.Set;
+import java.util.WeakHashMap;
public class MainActivity extends Activity implements Application.OnCurrentAccountChangedListener, ViewPager.OnPageChangeListener {
// ------------------------------ FIELDS ------------------------------
@@ -74,6 +74,8 @@ public class MainActivity extends Activity implements Application.OnCurrentAccou
public static final int REQUEST_GET_PICTURE_FROM_GALLERY = 11;
private static final int REQUEST_MANAGE_ACCOUNT = 13;
private static final int REQUEST_WRITE_EXTERNAL_STORAGE_PERMISSION = 14;
+ private Account currentAccount;
+ private final Set<Application.OnCurrentAccountChangedListener> currentAccountChangedListeners = Collections.newSetFromMap(new WeakHashMap<>()); /* will be removed eventually */
private ViewPager viewPager;
private ImageView currentAccountIconImageView;
private PageListAdapter pagerAdapter;
@@ -81,6 +83,22 @@ public class MainActivity extends Activity implements Application.OnCurrentAccou
private UserStreamListener userStreamListener;
private final UIObserverBundle currentUserBundle = new UIObserverBundle();
+ public Account getCurrentAccount() {
+ return currentAccount;
+ }
+
+ public void setCurrentAccount(Account val) {
+ Logger.debug(String.format("setCurrentAccount: %s", val.getUser().getScreenName()));
+ currentAccount = val;
+ for (Application.OnCurrentAccountChangedListener listener : currentAccountChangedListeners) {
+ new UIHandler().post(() -> listener.onCurrentAccountChanged(val));
+ }
+ }
+
+ public void addOnCurrentAccountChangedListener(Application.OnCurrentAccountChangedListener listener) {
+ currentAccountChangedListeners.add(listener);
+ }
+
public boolean isStreaming() {
return userStreamListener != null && userStreamListener.isConnected();
}
@@ -172,7 +190,7 @@ public class MainActivity extends Activity implements Application.OnCurrentAccou
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_MANAGE_ACCOUNT:
- if (resultCode == RESULT_CANCELED && Application.getInstance().getCurrentAccount() == null) {
+ if (resultCode == RESULT_CANCELED && getCurrentAccount() == null) {
forceFinish();
}
break;
@@ -201,7 +219,7 @@ public class MainActivity extends Activity implements Application.OnCurrentAccou
Account.load();
ExtractionWord.load();
initializePages();
- app.addOnCurrentAccountChangedListener(this);
+ addOnCurrentAccountChangedListener(this);
int wextPermission = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (wextPermission == PackageManager.PERMISSION_GRANTED) {
@@ -235,7 +253,7 @@ public class MainActivity extends Activity implements Application.OnCurrentAccou
private void startMainLogic() {
Account account = getLastUsedAccount();
if (account != null) {
- ((Application) getApplication()).setCurrentAccount(account);
+ setCurrentAccount(account);
IntentRouter.onNewIntent(this, getIntent());
} else {
startActivityForResult(new Intent(this, ManageAccountsActivity.class), REQUEST_MANAGE_ACCOUNT);
@@ -320,7 +338,7 @@ public class MainActivity extends Activity implements Application.OnCurrentAccou
return true;
}
case R.id.actionbar_aclog: {
- IntentUtils.openUri(this, Application.getInstance().getCurrentAccount().getUser().getAclogTimelineURL());
+ IntentUtils.openUri(this, getCurrentAccount().getUser().getAclogTimelineURL());
return true;
}
case R.id.actionbar_report: {
@@ -383,8 +401,8 @@ public class MainActivity extends Activity implements Application.OnCurrentAccou
if (stream != null) {
new Thread(stream::cleanUp).start();
}
- stream = Application.getInstance().getCurrentAccount().getTwitterStream();
- userStreamListener = new UserStreamListener(Application.getInstance().getCurrentAccount());
+ stream = getCurrentAccount().getTwitterStream();
+ userStreamListener = new UserStreamListener(getCurrentAccount());
stream.addListener(userStreamListener);
stream.addConnectionLifeCycleListener(userStreamListener);
stream.user();
@@ -430,7 +448,7 @@ public class MainActivity extends Activity implements Application.OnCurrentAccou
private void updateActionBarTitle() {
ActionBar actionBar = getActionBar();
- Account currentAccount = Application.getInstance().getCurrentAccount();
+ Account currentAccount = getCurrentAccount();
if (actionBar != null && currentAccount != null) {
String screenName = currentAccount.getUser().getScreenName();
String pageTitle = pagerAdapter.getName(viewPager.getCurrentItem());
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/ManageAccountsActivity.java b/app/src/main/java/net/lacolaco/smileessence/activity/ManageAccountsActivity.java
index d88a1a9e..e95e9dd9 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/ManageAccountsActivity.java
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/ManageAccountsActivity.java
@@ -127,7 +127,7 @@ public class ManageAccountsActivity extends Activity implements AdapterView.OnIt
private void safeFinish() {
if (newAccount != null) {
if (newAccount != Application.getInstance().getCurrentAccount()) {
- Application.getInstance().setCurrentAccount(newAccount);
+ Application.getInstance().getLastUsedMainActivity().setCurrentAccount(newAccount);
InternalPreferenceHelper.getInstance().set(R.string.key_last_used_account_id, newAccount.getUserId());
}
setResult(RESULT_OK);