/*
* Copyright 2016. SHENQINCI(沈钦赐)<dev@qinc.me>
*
* 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 ren.qinc.markdowneditors.base;
import android.app.Application;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.design.widget.Snackbar;
import android.view.View;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.leakcanary.RefWatcher;
import me.drakeet.library.CrashWoodpecker;
import ren.qinc.markdowneditors.AppManager;
import ren.qinc.markdowneditors.utils.Check;
/**
* 业务无关的Application基类
* Created by 沈钦赐 on 16/21/25.
*/
public abstract class BaseApplication extends Application {
static Context context;
static Resources resource;
private RefWatcher refWatcher;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
resource = context.getResources();
if (hasMemoryLeak()) {
refWatcher = LeakCanary.install(this);//预定义的 RefWatcher,同时也会启用一个 ActivityRefWatcher
}
if (hasCrashLog()) {
CrashWoodpecker.fly().to(this);//崩溃异常捕获
}
}
public static synchronized Context context() {
return context;
}
public static RefWatcher getRefWatcher(Context context) {
if (context == null) {
return null;
}
BaseApplication application = (BaseApplication) context.getApplicationContext();
if (application.hasMemoryLeak()) {
return application.refWatcher;
}
return null;
}
protected abstract boolean hasMemoryLeak();
protected abstract boolean hasCrashLog();
@Override
public void onTerminate() {
super.onTerminate();
AppManager.getAppManager().AppExit(this);
}
/**
* 根据资源返回String值
*
* @param id 资源id
* @return String
*/
public static String string(int id) {
return resource.getString(id);
}
/**
* 根据资源返回color值
*
* @param id 资源id
* @return int类型的color
*/
public static int color(int id) {
return resource.getColor(id);
}
/**
* 根据资源翻译Drawable值
*
* @param id 资源id
* @return Drawable
*/
public static Drawable drawable(int id) {
return resource.getDrawable(id);
}
//======Snackbar
public static Snackbar showSnackbar(@NonNull View view, @NonNull String message, @Snackbar.Duration int duration, @Nullable View.OnClickListener listener, @Nullable String actionStr) {
Snackbar snackbar = Snackbar.make(view, message, duration);
if (listener != null && Check.isEmpty(actionStr)) {
snackbar.setAction(actionStr, listener);
}
snackbar.show();
return snackbar;
}
public static Snackbar showSnackbar(@NonNull View view, @NonNull int messageRes, @Snackbar.Duration int duration, @Nullable View.OnClickListener listener, @Nullable String actionStr) {
Snackbar snackbar = Snackbar.make(view, messageRes, duration);
if (listener != null && Check.isEmpty(actionStr)) {
snackbar.setAction(actionStr, listener);
}
snackbar.show();
return snackbar;
}
public static Snackbar showSnackbar(@NonNull View view, @NonNull String message) {
return showSnackbar(view, message, Snackbar.LENGTH_SHORT, null, null);
}
public static Snackbar showSnackbar(@NonNull View view, @StringRes int messageRes) {
return showSnackbar(view, messageRes, Snackbar.LENGTH_SHORT, null, null);
}
public static Snackbar showSnackbarLong(@NonNull View view, @NonNull String message) {
return showSnackbar(view, message, Snackbar.LENGTH_LONG, null, null);
}
public static Snackbar showSnackbarIndefinite(@NonNull View view, @NonNull String message) {
return showSnackbar(view, message, Snackbar.LENGTH_INDEFINITE, null, null);
}
public static Snackbar showSnackbar(@NonNull View view, @NonNull String message, @Nullable View.OnClickListener listener, @Nullable String actionStr) {
return showSnackbar(view, message, Snackbar.LENGTH_SHORT, listener, actionStr);
}
public static Snackbar showSnackbarLong(@NonNull View view, @NonNull String message, @Nullable View.OnClickListener listener, @Nullable String actionStr) {
return showSnackbar(view, message, Snackbar.LENGTH_LONG, listener, actionStr);
}
public static Snackbar showSnackbarIndefinite(@NonNull View view, @NonNull String message, @Nullable View.OnClickListener listener, @Nullable String actionStr) {
return showSnackbar(view, message, Snackbar.LENGTH_INDEFINITE, listener, actionStr);
}
public static Snackbar showSnackbar(@NonNull View view, @NonNull String message, @Nullable View.OnClickListener listener) {
return showSnackbar(view, message, Snackbar.LENGTH_SHORT, listener, "确定");
}
public static Snackbar showSnackbarLong(@NonNull View view, @NonNull String message, @Nullable View.OnClickListener listener) {
return showSnackbar(view, message, Snackbar.LENGTH_LONG, listener, "确定");
}
public static Snackbar showSnackbarIndefinite(@NonNull View view, @NonNull String message, @Nullable View.OnClickListener listener) {
return showSnackbar(view, message, Snackbar.LENGTH_INDEFINITE, listener, "确定");
}
}