blob: 07cef0f70ab2f4a2d7cc5f3705d5c51d2f663c25 [file] [log] [blame]
// Copyright (C) 2016 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.reviewit.app;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import com.google.gerrit.extensions.api.GerritApi;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.reviewit.ErrorFragment;
import com.google.reviewit.R;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ReviewItApp extends Application {
private static final String TAG = ReviewItApp.class.getName();
private QueryHandler queryHandler;
private SortActionHandler sortActionHandler;
private AvatarCache avatarCache;
private ConfigManager cfgManager;
private ExecutorService executor;
private Gerrit gerrit;
private PreferenceManager prefManager;
private AccountInfo self;
private FragmentActivity currentActivity;
@Override
public void onCreate() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(
Activity activity, Bundle savedInstanceState) {
currentActivity = (FragmentActivity) activity;
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(
Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
currentActivity = null;
}
});
Thread.setDefaultUncaughtExceptionHandler(
new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable t) {
Log.e(TAG, "Application failure", t);
if (currentActivity != null) {
FragmentManager fragmentManager =
currentActivity.getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.mainFrame, ErrorFragment.create(t))
.commit();
}
}
});
super.onCreate();
}
public QueryHandler getQueryHandler() {
if (queryHandler == null) {
queryHandler = new QueryHandler(getConfigManager(), getGerrit());
}
return queryHandler;
}
public SortActionHandler getSortActionHandler() {
if (sortActionHandler == null) {
sortActionHandler = new SortActionHandler(getConfigManager(), getGerrit());
}
return sortActionHandler;
}
public AvatarCache getAvatarCache() {
if (avatarCache == null) {
avatarCache = new AvatarCache(this);
}
return avatarCache;
}
public ConfigManager getConfigManager() {
if (cfgManager == null) {
cfgManager = new ConfigManager(this);
}
return cfgManager;
}
public GerritApi getApi() {
return getGerrit().api();
}
private Gerrit getGerrit() {
if (gerrit == null) {
gerrit = new Gerrit(this, getConfigManager());
}
return gerrit;
}
public ExecutorService getExecutor() {
if (executor == null) {
executor = Executors.newFixedThreadPool(10);
}
return executor;
}
public Preferences getPrefs() {
return getPrefManager().getPreferences();
}
public PreferenceManager getPrefManager() {
if (prefManager == null) {
prefManager = new PreferenceManager(this);
}
return prefManager;
}
public AccountInfo getSelf() {
if (self == null) {
try {
self = getApi().accounts().self().get();
} catch (RestApiException e) {
Log.e(TAG, "Failed to get self", e);
}
}
return self;
}
public Change getCurrentChange() {
switch (getPrefs().startScreen) {
case REVIEW_SCREEN:
return getQueryHandler().getCurrentChange();
case SORT_SCREEN:
default:
return getSortActionHandler().getCurrentChange();
}
}
}