package com.wangdaye.mysplash;
import android.app.Application;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.support.annotation.IntDef;
import android.support.annotation.IntRange;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringDef;
import android.text.TextUtils;
import com.wangdaye.mysplash.common.data.entity.unsplash.Photo;
import com.wangdaye.mysplash.common._basic.MysplashActivity;
import com.wangdaye.mysplash.common.utils.manager.CustomApiManager;
import com.wangdaye.mysplash.main.view.activity.MainActivity;
import java.util.ArrayList;
import java.util.List;
/**
* Mysplash.
*
* Application class for Mysplash.
*
* */
public class Mysplash extends Application {
private static Mysplash instance;
public static Mysplash getInstance() {
return instance;
}
private List<MysplashActivity> activityList;
private Photo photo;
public static final String UNSPLASH_API_BASE_URL = "https://api.unsplash.com/";
public static final String STREAM_API_BASE_URL = "https://api.getstream.io/";
public static final String UNSPLASH_FOLLOWING_FEED_URL = "napi/feeds/following";
public static final String UNSPLASH_NOTIFICATION_URL = "napi/feeds/enrich";
public static final String UNSPLASH_URL = "https://unsplash.com/";
public static final String UNSPLASH_JOIN_URL = "https://unsplash.com/join";
public static final String UNSPLASH_SUBMIT_URL = "https://unsplash.com/submit";
public static final String UNSPLASH_LOGIN_CALLBACK = "unsplash-auth-callback";
public static final String DATE_FORMAT = "yyyy/MM/dd";
public static final String DOWNLOAD_PATH = "/Pictures/Mysplash/";
public static final String DOWNLOAD_PHOTO_FORMAT = ".jpg";
public static final String DOWNLOAD_COLLECTION_FORMAT = ".zip";
@StringDef({DOWNLOAD_PHOTO_FORMAT, DOWNLOAD_COLLECTION_FORMAT})
public @interface DownloadFormatRule {}
public static final int DEFAULT_PER_PAGE = 15;
@IntRange(from = 1, to = 30)
public @interface PerPageRule {}
@IntRange(from = 1)
public @interface PageRule {}
public static final int CATEGORY_TOTAL_NEW = 0;
public static final int CATEGORY_TOTAL_FEATURED = 1;
public static final int CATEGORY_BUILDINGS_ID = 2;
public static final int CATEGORY_FOOD_DRINK_ID = 3;
public static final int CATEGORY_NATURE_ID = 4;
public static final int CATEGORY_OBJECTS_ID = 8;
public static final int CATEGORY_PEOPLE_ID = 6;
public static final int CATEGORY_TECHNOLOGY_ID = 7;
@IntDef({CATEGORY_TOTAL_NEW, CATEGORY_TOTAL_FEATURED})
public @interface PhotosTypeRule {}
@IntDef({
CATEGORY_BUILDINGS_ID,
CATEGORY_FOOD_DRINK_ID,
CATEGORY_NATURE_ID,
CATEGORY_OBJECTS_ID,
CATEGORY_PEOPLE_ID,
CATEGORY_TECHNOLOGY_ID})
public @interface CategoryIdRule {}
public static int TOTAL_NEW_PHOTOS_COUNT = 17444;
public static int TOTAL_FEATURED_PHOTOS_COUNT = 1192;
public static int BUILDING_PHOTOS_COUNT = 2720;
public static int FOOD_DRINK_PHOTOS_COUNT = 650;
public static int NATURE_PHOTOS_COUNT = 54208;
public static int OBJECTS_PHOTOS_COUNT = 2150;
public static int PEOPLE_PHOTOS_COUNT = 3410;
public static int TECHNOLOGY_PHOTOS_COUNT = 350;
public static final int PHOTO_ACTIVITY = 1;
public static final int COLLECTION_ACTIVITY = 2;
public static final int USER_ACTIVITY = 3;
public static final int ME_ACTIVITY = 4;
public static final int CUSTOM_API_ACTIVITY = 5;
@Override
public void onCreate() {
super.onCreate();
instance = this;
activityList = new ArrayList<>();
}
public static String getAppId(Context c, boolean auth) {
if (isDebug(c)) {
return BuildConfig.APP_ID_BETA;
} else if (TextUtils.isEmpty(CustomApiManager.getInstance(c).getCustomApiKey())
|| TextUtils.isEmpty(CustomApiManager.getInstance(c).getCustomApiSecret())) {
if (auth) {
return BuildConfig.APP_ID_RELEASE;
} else {
return BuildConfig.APP_ID_RELEASE_UNAUTH;
}
} else {
return CustomApiManager.getInstance(c).getCustomApiKey();
}
}
public static String getSecret(Context c) {
if (isDebug(c)) {
return BuildConfig.SECRET_BETA;
} else if (TextUtils.isEmpty(CustomApiManager.getInstance(c).getCustomApiKey())
|| TextUtils.isEmpty(CustomApiManager.getInstance(c).getCustomApiSecret())) {
return BuildConfig.SECRET_RELEASE;
} else {
return CustomApiManager.getInstance(c).getCustomApiSecret();
}
}
public static boolean isDebug(Context c) {
try {
return (c.getApplicationInfo().flags
& ApplicationInfo.FLAG_DEBUGGABLE) != 0;
} catch (Exception ignored) {
}
return false;
}
public static String getLoginUrl(Context c) {
return Mysplash.UNSPLASH_URL + "oauth/authorize"
+ "?client_id=" + getAppId(c, true)
+ "&redirect_uri=" + "mysplash%3A%2F%2F" + UNSPLASH_LOGIN_CALLBACK
+ "&response_type=" + "code"
+ "&scope=" + "public+read_user+write_user+read_photos+write_photos+write_likes+write_followers+read_collections+write_collections";
}
public void addActivity(@NonNull MysplashActivity a) {
for (MysplashActivity activity : activityList) {
if (activity.equals(a)) {
return;
}
}
activityList.add(a);
}
public void addActivityToFirstPosition(@NonNull MysplashActivity a) {
for (MysplashActivity activity : activityList) {
if (activity.equals(a)) {
return;
}
}
activityList.add(0, a);
}
public void removeActivity(MysplashActivity a) {
activityList.remove(a);
}
@Nullable
public MysplashActivity getTopActivity() {
if (activityList != null && activityList.size() > 0) {
return activityList.get(activityList.size() - 1);
} else {
return null;
}
}
@Nullable
public MainActivity getMainActivity() {
if (activityList != null && activityList.size() > 0) {
for (int i = 0; i < activityList.size(); i ++) {
if (activityList.get(i) instanceof MainActivity) {
return (MainActivity) activityList.get(i);
}
}
}
return null;
}
public int getActivityCount() {
if (activityList != null) {
return activityList.size();
} else {
return 0;
}
}
@Nullable
public Photo getPhoto() {
return photo;
}
public void setPhoto(Photo photo) {
this.photo = photo;
}
}