package com.tevinjeffrey.rutgersct.utils;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.net.Uri;
import android.os.Build;
import android.support.annotation.StyleRes;
import android.util.TypedValue;
import android.view.ContextThemeWrapper;
import android.view.Window;
import android.view.WindowManager;
import com.tevinjeffrey.rutgersct.R;
import com.tevinjeffrey.rutgersct.database.TrackedSections;
import com.tevinjeffrey.rutgersct.rutgersapi.model.Request;
import com.tevinjeffrey.rutgersct.rutgersapi.utils.SemesterUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import rx.Observable;
import rx.functions.Func1;
public class Utils {
public static void setWindowColor(int colorDark, Activity context) {
Window window = context.getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(colorDark);
window.setNavigationBarColor(colorDark);
}
}
public static int fetchPrimaryColor(Context context) {
TypedValue typedValue = new TypedValue();
TypedArray a = context.obtainStyledAttributes(typedValue.data, new int[]{R.attr.colorPrimary});
int color = a.getColor(0, 0);
a.recycle();
return color;
}
public static int fetchPrimaryDarkColor(Resources.Theme context) {
TypedValue typedValue = new TypedValue();
TypedArray a = context.obtainStyledAttributes(typedValue.data, new int[]{R.attr.colorPrimaryDark});
int color = a.getColor(0, 0);
a.recycle();
return color;
}
public static Context wrapContextTheme(Activity activity, @StyleRes int styleRes) {
ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(activity, styleRes);
setWindowColor(fetchPrimaryDarkColor(contextThemeWrapper.getTheme()), activity);
return contextThemeWrapper;
}
public static Request getRequestFromTrackedSections(TrackedSections ts) {
return new Request(ts.getSubject(), new SemesterUtils.Semester(ts.getSemester()), ts.getLocations(), ts.getLevels(), ts.getIndexNumber());
}
public static Observable<Request> createRequestObservableFromTrackedSections(Iterable<TrackedSections> allTrackedSections) {
return Observable.from(allTrackedSections)
.flatMap(new Func1<TrackedSections, Observable<Request>>() {
@Override
public Observable<Request> call(TrackedSections trackedSection) {
return createRequest(trackedSection);
}
});
}
private static Observable<Request> createRequest(TrackedSections trackedSection) {
return Observable.just(getRequestFromTrackedSections(trackedSection));
}
public static String parseResource(Context context, int resource) throws IOException {
InputStream is = context.getResources().openRawResource(resource);
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
is.close();
}
return writer.toString();
}
public static void openLink(Context context, String url) {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
i.setData(Uri.parse(url));
context.startActivity(i);
}
}