diff --git a/app/src/main/java/awais/instagrabber/utils/CubicInterpolation.kt b/app/src/main/java/awais/instagrabber/utils/CubicInterpolation.kt index ef059147..cc57a9c3 100644 --- a/app/src/main/java/awais/instagrabber/utils/CubicInterpolation.kt +++ b/app/src/main/java/awais/instagrabber/utils/CubicInterpolation.kt @@ -1,45 +1,38 @@ -package awais.instagrabber.utils; +package awais.instagrabber.utils -import java.util.Arrays; +import java.util.* -public class CubicInterpolation { - - private final float[] array; - private final int tangentFactor; - private final int length; - - public CubicInterpolation(final float[] array, final int cubicTension) { - this.array = Arrays.copyOf(array, array.length); - this.length = array.length; - tangentFactor = 1 - Math.max(0, Math.min(1, cubicTension)); - } - - public CubicInterpolation(final float[] array) { - this(array, 0); +class CubicInterpolation @JvmOverloads constructor(array: FloatArray, cubicTension: Int = 0) { + private val array: FloatArray + private val tangentFactor: Int + private val length: Int + private fun getTangent(k: Int): Float { + return tangentFactor * (getClippedInput(k + 1) - getClippedInput(k - 1)) / 2 } - private float getTangent(int k) { - return tangentFactor * (getClippedInput(k + 1) - getClippedInput(k - 1)) / 2; + fun interpolate(t: Float): Float { + val k = Math.floor(t.toDouble()).toInt() + val m = floatArrayOf(getTangent(k), getTangent(k + 1)) + val p = floatArrayOf(getClippedInput(k), getClippedInput(k + 1)) + val t1 = t - k + val t2 = t1 * t1 + val t3 = t1 * t2 + return (2 * t3 - 3 * t2 + 1) * p[0] + (t3 - 2 * t2 + t1) * m[0] + (-2 * t3 + 3 * t2) * p[1] + (t3 - t2) * m[1] } - public float interpolate(final float t) { - int k = (int) Math.floor(t); - float[] m = new float[]{getTangent(k), getTangent(k + 1)}; - float[] p = new float[]{getClippedInput(k), getClippedInput(k + 1)}; - final float t1 = t - k; - final float t2 = t1 * t1; - final float t3 = t1 * t2; - return (2 * t3 - 3 * t2 + 1) * p[0] + (t3 - 2 * t2 + t1) * m[0] + (-2 * t3 + 3 * t2) * p[1] + (t3 - t2) * m[1]; + private fun getClippedInput(i: Int): Float { + return if (i >= 0 && i < length) { + array[i] + } else array[clipClamp(i, length)] } - private float getClippedInput(int i) { - if (i >= 0 && i < length) { - return array[i]; - } - return array[clipClamp(i, length)]; + private fun clipClamp(i: Int, n: Int): Int { + return Math.max(0, Math.min(i, n - 1)) } - private int clipClamp(int i, int n) { - return Math.max(0, Math.min(i, n - 1)); + init { + this.array = Arrays.copyOf(array, array.size) + length = array.size + tangentFactor = 1 - Math.max(0, Math.min(1, cubicTension)) } -} +} \ No newline at end of file diff --git a/app/src/main/java/awais/instagrabber/utils/IntentUtils.kt b/app/src/main/java/awais/instagrabber/utils/IntentUtils.kt index c1d2e482..884e6085 100644 --- a/app/src/main/java/awais/instagrabber/utils/IntentUtils.kt +++ b/app/src/main/java/awais/instagrabber/utils/IntentUtils.kt @@ -1,61 +1,46 @@ -package awais.instagrabber.utils; +package awais.instagrabber.utils -import android.net.Uri; -import android.text.TextUtils; +import android.net.Uri +import android.text.TextUtils +import awais.instagrabber.models.IntentModel +import awais.instagrabber.models.enums.IntentModelType -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.util.List; - -import awais.instagrabber.models.IntentModel; -import awais.instagrabber.models.enums.IntentModelType; - -public final class IntentUtils { - - @Nullable - public static IntentModel parseUrl(@NonNull final String url) { - final Uri parsedUrl = Uri.parse(url).normalizeScheme(); +object IntentUtils { + @JvmStatic + fun parseUrl(url: String): IntentModel? { + val parsedUrl = Uri.parse(url).normalizeScheme() // final String domain = parsedUrl.getHost().replaceFirst("^www\\.", ""); // final boolean isHttpsUri = "https".equals(parsedUrl.getScheme()); - - final List paths = parsedUrl.getPathSegments(); - + val paths = parsedUrl.pathSegments if (paths.isEmpty()) { - return null; + return null } - - String path = paths.get(0); - String text = null; - IntentModelType type = IntentModelType.UNKNOWN; - if (1 == paths.size()) { - text = path; - type = IntentModelType.USERNAME; - } else if ("_u".equals(path)) { - text = paths.get(1); - type = IntentModelType.USERNAME; - } else if ("p".equals(path) || "reel".equals(path) || "tv".equals(path)) { - text = paths.get(1); - type = IntentModelType.POST; - } else if (2 < paths.size() && "explore".equals(path)) { - path = paths.get(1); - - if ("locations".equals(path)) { - text = paths.get(2); - type = IntentModelType.LOCATION; + var path = paths[0] + var text: String? = null + var type = IntentModelType.UNKNOWN + if (1 == paths.size) { + text = path + type = IntentModelType.USERNAME + } else if ("_u" == path) { + text = paths[1] + type = IntentModelType.USERNAME + } else if ("p" == path || "reel" == path || "tv" == path) { + text = paths[1] + type = IntentModelType.POST + } else if (2 < paths.size && "explore" == path) { + path = paths[1] + if ("locations" == path) { + text = paths[2] + type = IntentModelType.LOCATION } - - if ("tags".equals(path)) { - text = paths.get(2); - type = IntentModelType.HASHTAG; + if ("tags" == path) { + text = paths[2] + type = IntentModelType.HASHTAG } } - - if (TextUtils.isEmpty(text)) { - return null; - } - - return new IntentModel(type, text); + return if (TextUtils.isEmpty(text)) { + null + } else IntentModel(type, text!!) } -} +} \ No newline at end of file diff --git a/app/src/main/java/awais/instagrabber/utils/KeywordsFilterUtils.kt b/app/src/main/java/awais/instagrabber/utils/KeywordsFilterUtils.kt index f4d42ac1..1a972f8b 100644 --- a/app/src/main/java/awais/instagrabber/utils/KeywordsFilterUtils.kt +++ b/app/src/main/java/awais/instagrabber/utils/KeywordsFilterUtils.kt @@ -1,49 +1,37 @@ -package awais.instagrabber.utils; - -import java.util.ArrayList; -import java.util.List; - -import awais.instagrabber.repositories.responses.Caption; -import awais.instagrabber.repositories.responses.Media; - -public final class KeywordsFilterUtils { - - private final ArrayList keywords; - - public KeywordsFilterUtils(final ArrayList keywords){ - this.keywords = keywords; - } - - public boolean filter(final String caption){ - if(caption == null) return false; - if(keywords.isEmpty()) return false; - final String temp = caption.toLowerCase(); - for(final String s:keywords){ - if(temp.contains(s)) return true; +package awais.instagrabber.utils + +import awais.instagrabber.repositories.responses.Media +import java.util.* + +class KeywordsFilterUtils(private val keywords: ArrayList) { +// fun filter(caption: String?): Boolean { +// if (caption == null) return false +// if (keywords.isEmpty()) return false +// val temp = caption.toLowerCase() +// for (s in keywords) { +// if (temp.contains(s)) return true +// } +// return false +// } + + fun filter(media: Media?): Boolean { + if (media == null) return false + val (_, text) = media.caption ?: return false + if (keywords.isEmpty()) return false + val temp = text!!.lowercase(Locale.getDefault()) + for (s in keywords) { + if (temp.contains(s)) return true } - return false; + return false } - public boolean filter(final Media media){ - if(media == null) return false; - final Caption c = media.getCaption(); - if(c == null) return false; - if(keywords.isEmpty()) return false; - final String temp = c.getText().toLowerCase(); - for(final String s:keywords){ - if(temp.contains(s)) return true; - } - return false; - } - - public List filter(final List media){ - if(keywords.isEmpty()) return media; - if(media == null) return new ArrayList<>(); - - final List result= new ArrayList<>(); - for(final Media m:media){ - if(!filter(m)) result.add(m); + fun filter(media: List?): List? { + if (keywords.isEmpty()) return media + if (media == null) return ArrayList() + val result: MutableList = ArrayList() + for (m in media) { + if (!filter(m)) result.add(m) } - return result; + return result } -} +} \ No newline at end of file diff --git a/app/src/main/java/awais/instagrabber/utils/ThemeUtils.kt b/app/src/main/java/awais/instagrabber/utils/ThemeUtils.kt index 350e4674..a4606941 100644 --- a/app/src/main/java/awais/instagrabber/utils/ThemeUtils.kt +++ b/app/src/main/java/awais/instagrabber/utils/ThemeUtils.kt @@ -1,50 +1,44 @@ -package awais.instagrabber.utils; +@file:JvmName("ThemeUtils") -import android.content.Context; -import android.content.res.Configuration; -import android.os.Build; +package awais.instagrabber.utils -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatDelegate; - -import awais.instagrabber.R; - -import static awais.instagrabber.utils.Utils.settingsHelper; - -public final class ThemeUtils { - private static final String TAG = "ThemeUtils"; - - public static void changeTheme(@NonNull final Context context) { - int themeCode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; // this is fallback / default - - if (settingsHelper != null) themeCode = settingsHelper.getThemeCode(false); +import android.content.Context +import android.content.res.Configuration +import android.os.Build +import androidx.appcompat.app.AppCompatDelegate +import awais.instagrabber.R +object ThemeUtils { + fun changeTheme(context: Context) { + var themeCode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM // this is fallback / default + if (Utils.settingsHelper != null) themeCode = Utils.settingsHelper.getThemeCode(false) if (themeCode == AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM && Build.VERSION.SDK_INT < 29) { - themeCode = AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY; + themeCode = AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY } - final boolean isNight = isNight(context, themeCode); - final String themeResName = isNight ? settingsHelper.getString(Constants.PREF_DARK_THEME) - : settingsHelper.getString(Constants.PREF_LIGHT_THEME); - final int themeResId = context.getResources().getIdentifier(themeResName, "style", context.getPackageName()); - final int finalThemeResId; - if (themeResId <= 0) { + val isNight = isNight(context, themeCode) + val themeResName = + if (isNight) Utils.settingsHelper.getString(Constants.PREF_DARK_THEME) else Utils.settingsHelper.getString( + Constants.PREF_LIGHT_THEME + ) + val themeResId = context.resources.getIdentifier(themeResName, "style", context.packageName) + val finalThemeResId: Int + finalThemeResId = if (themeResId <= 0) { // Nothing set in settings - finalThemeResId = isNight ? R.style.AppTheme_Dark_Black - : R.style.AppTheme_Light_White; - } else finalThemeResId = themeResId; + if (isNight) R.style.AppTheme_Dark_Black else R.style.AppTheme_Light_White + } else themeResId // Log.d(TAG, "changeTheme: finalThemeResId: " + finalThemeResId); - context.setTheme(finalThemeResId); + context.setTheme(finalThemeResId) } - public static boolean isNight(final Context context, final int themeCode) { + fun isNight(context: Context, themeCode: Int): Boolean { // check if setting is set to 'Dark' - boolean isNight = themeCode == AppCompatDelegate.MODE_NIGHT_YES; + var isNight = themeCode == AppCompatDelegate.MODE_NIGHT_YES // if not dark check if themeCode is MODE_NIGHT_FOLLOW_SYSTEM or MODE_NIGHT_AUTO_BATTERY if (!isNight && (themeCode == AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM || themeCode == AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY)) { // check if resulting theme would be NIGHT - final int uiMode = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; - isNight = uiMode == Configuration.UI_MODE_NIGHT_YES; + val uiMode = context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK + isNight = uiMode == Configuration.UI_MODE_NIGHT_YES } - return isNight; + return isNight } -} +} \ No newline at end of file