From 5c8c4032e969d5ba8699ff0c21d1e7bb60ebf890 Mon Sep 17 00:00:00 2001 From: Saifuddin Adenwala Date: Sun, 17 Nov 2024 19:05:25 +0530 Subject: [PATCH] Migrated util module files from java to kotlin (#5935) * Rename .java to .kt * Migrated the following files in util module to Kotlin - AbstractTextWatcher - ActivityUtils - CommonsDateUtil - DateUtil * Rename .java to .kt * Migrated the following files in util module to Kotlin - DeviceInfoUtil - ExecutorUtils - FragmentUtils --- .../nrw/commons/campaigns/CampaignView.java | 4 +- .../commons/campaigns/CampaignsPresenter.java | 2 +- .../nrw/commons/delete/ReasonBuilder.java | 1 - .../nrw/commons/explore/ExploreFragment.java | 1 - .../commons/media/MediaDetailFragment.java | 1 - .../upload/UploadMediaDetailAdapter.java | 1 - .../UploadMediaDetailFragment.java | 4 +- .../commons/utils/AbstractTextWatcher.java | 31 ------- .../nrw/commons/utils/AbstractTextWatcher.kt | 25 +++++ .../free/nrw/commons/utils/ActivityUtils.java | 15 --- .../free/nrw/commons/utils/ActivityUtils.kt | 16 ++++ .../nrw/commons/utils/CommonsDateUtil.java | 44 --------- .../free/nrw/commons/utils/CommonsDateUtil.kt | 46 ++++++++++ .../fr/free/nrw/commons/utils/DateUtil.java | 53 ----------- .../fr/free/nrw/commons/utils/DateUtil.kt | 62 +++++++++++++ .../nrw/commons/utils/DeviceInfoUtil.java | 91 ------------------- .../free/nrw/commons/utils/DeviceInfoUtil.kt | 80 ++++++++++++++++ .../free/nrw/commons/utils/ExecutorUtils.java | 31 ------- .../free/nrw/commons/utils/ExecutorUtils.kt | 33 +++++++ .../free/nrw/commons/utils/FragmentUtils.java | 15 --- .../free/nrw/commons/utils/FragmentUtils.kt | 20 ++++ .../model/notifications/Notification.java | 2 +- 22 files changed, 288 insertions(+), 290 deletions(-) delete mode 100644 app/src/main/java/fr/free/nrw/commons/utils/AbstractTextWatcher.java create mode 100644 app/src/main/java/fr/free/nrw/commons/utils/AbstractTextWatcher.kt delete mode 100644 app/src/main/java/fr/free/nrw/commons/utils/ActivityUtils.java create mode 100644 app/src/main/java/fr/free/nrw/commons/utils/ActivityUtils.kt delete mode 100644 app/src/main/java/fr/free/nrw/commons/utils/CommonsDateUtil.java create mode 100644 app/src/main/java/fr/free/nrw/commons/utils/CommonsDateUtil.kt delete mode 100644 app/src/main/java/fr/free/nrw/commons/utils/DateUtil.java create mode 100644 app/src/main/java/fr/free/nrw/commons/utils/DateUtil.kt delete mode 100644 app/src/main/java/fr/free/nrw/commons/utils/DeviceInfoUtil.java create mode 100644 app/src/main/java/fr/free/nrw/commons/utils/DeviceInfoUtil.kt delete mode 100644 app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.java create mode 100644 app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.kt delete mode 100644 app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.java create mode 100644 app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.kt diff --git a/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignView.java b/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignView.java index 4d1eb33ce..d1ee4c8b0 100644 --- a/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignView.java +++ b/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignView.java @@ -12,15 +12,15 @@ import androidx.annotation.Nullable; import fr.free.nrw.commons.campaigns.models.Campaign; import fr.free.nrw.commons.databinding.LayoutCampaginBinding; import fr.free.nrw.commons.theme.BaseActivity; -import fr.free.nrw.commons.utils.DateUtil; +import fr.free.nrw.commons.utils.CommonsDateUtil; +import fr.free.nrw.commons.utils.DateUtil; import java.text.ParseException; import java.util.Date; import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.contributions.MainActivity; -import fr.free.nrw.commons.utils.CommonsDateUtil; import fr.free.nrw.commons.utils.SwipableCardView; import fr.free.nrw.commons.utils.ViewUtil; diff --git a/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignsPresenter.java b/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignsPresenter.java index 51c841451..157047774 100644 --- a/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignsPresenter.java +++ b/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignsPresenter.java @@ -3,6 +3,7 @@ package fr.free.nrw.commons.campaigns; import android.annotation.SuppressLint; import fr.free.nrw.commons.campaigns.models.Campaign; +import fr.free.nrw.commons.utils.CommonsDateUtil; import java.text.ParseException; import java.util.Collections; import java.util.Date; @@ -14,7 +15,6 @@ import javax.inject.Singleton; import fr.free.nrw.commons.BasePresenter; import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient; -import fr.free.nrw.commons.utils.CommonsDateUtil; import io.reactivex.Scheduler; import io.reactivex.Single; import io.reactivex.SingleObserver; diff --git a/app/src/main/java/fr/free/nrw/commons/delete/ReasonBuilder.java b/app/src/main/java/fr/free/nrw/commons/delete/ReasonBuilder.java index 35d682248..7912375a4 100644 --- a/app/src/main/java/fr/free/nrw/commons/delete/ReasonBuilder.java +++ b/app/src/main/java/fr/free/nrw/commons/delete/ReasonBuilder.java @@ -3,7 +3,6 @@ package fr.free.nrw.commons.delete; import android.content.Context; import fr.free.nrw.commons.utils.DateUtil; - import java.util.Date; import java.util.Locale; diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java index 26c8dd82b..d444148d4 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java @@ -11,7 +11,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager.OnPageChangeListener; -import com.google.android.material.tabs.TabLayout; import fr.free.nrw.commons.R; import fr.free.nrw.commons.ViewPagerAdapter; import fr.free.nrw.commons.contributions.MainActivity; diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index ee905a5c5..edfa874fc 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -55,7 +55,6 @@ import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.actions.ThanksClient; import fr.free.nrw.commons.auth.AccountUtil; import fr.free.nrw.commons.auth.SessionManager; -import fr.free.nrw.commons.auth.csrf.CsrfTokenClient; import fr.free.nrw.commons.auth.csrf.InvalidLoginTokenException; import fr.free.nrw.commons.category.CategoryClient; import fr.free.nrw.commons.category.CategoryDetailsActivity; diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java index 6fc8b3266..a1a639a59 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java @@ -22,7 +22,6 @@ import android.widget.ListView; import android.widget.TextView; import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.RecyclerView; diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java index 5581cfeb1..fb836445a 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java @@ -1,7 +1,6 @@ package fr.free.nrw.commons.upload.mediaDetails; import static android.app.Activity.RESULT_OK; -import static fr.free.nrw.commons.utils.ActivityUtils.startActivityWithFlags; import android.annotation.SuppressLint; import android.app.Activity; @@ -45,6 +44,7 @@ import fr.free.nrw.commons.upload.UploadBaseFragment; import fr.free.nrw.commons.upload.UploadItem; import fr.free.nrw.commons.upload.UploadMediaDetail; import fr.free.nrw.commons.upload.UploadMediaDetailAdapter; +import fr.free.nrw.commons.utils.ActivityUtils; import fr.free.nrw.commons.utils.DialogUtil; import fr.free.nrw.commons.utils.ImageUtils; import fr.free.nrw.commons.utils.NetworkUtils; @@ -208,7 +208,7 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements try { if(!presenter.getImageQuality(indexOfFragment, inAppPictureLocation, getActivity())) { - startActivityWithFlags( + ActivityUtils.startActivityWithFlags( getActivity(), MainActivity.class, Intent.FLAG_ACTIVITY_CLEAR_TOP, Intent.FLAG_ACTIVITY_SINGLE_TOP); } diff --git a/app/src/main/java/fr/free/nrw/commons/utils/AbstractTextWatcher.java b/app/src/main/java/fr/free/nrw/commons/utils/AbstractTextWatcher.java deleted file mode 100644 index d5188027d..000000000 --- a/app/src/main/java/fr/free/nrw/commons/utils/AbstractTextWatcher.java +++ /dev/null @@ -1,31 +0,0 @@ -package fr.free.nrw.commons.utils; - -import android.text.Editable; -import android.text.TextWatcher; - -import androidx.annotation.NonNull; - -public class AbstractTextWatcher implements TextWatcher { - private final TextChange textChange; - - public AbstractTextWatcher(@NonNull TextChange textChange) { - this.textChange = textChange; - } - - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - textChange.onTextChanged(s.toString()); - } - - @Override - public void afterTextChanged(Editable s) { - } - - public interface TextChange { - void onTextChanged(String value); - } -} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/AbstractTextWatcher.kt b/app/src/main/java/fr/free/nrw/commons/utils/AbstractTextWatcher.kt new file mode 100644 index 000000000..dd06452f9 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/AbstractTextWatcher.kt @@ -0,0 +1,25 @@ +package fr.free.nrw.commons.utils + +import android.text.Editable +import android.text.TextWatcher + +class AbstractTextWatcher( + private val textChange: TextChange +) : TextWatcher { + + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + // No-op + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + textChange.onTextChanged(s.toString()) + } + + override fun afterTextChanged(s: Editable?) { + // No-op + } + + interface TextChange { + fun onTextChanged(value: String) + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/ActivityUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/ActivityUtils.java deleted file mode 100644 index 4806585dc..000000000 --- a/app/src/main/java/fr/free/nrw/commons/utils/ActivityUtils.java +++ /dev/null @@ -1,15 +0,0 @@ -package fr.free.nrw.commons.utils; - -import android.content.Context; -import android.content.Intent; - -public class ActivityUtils { - - public static void startActivityWithFlags(Context context, Class cls, int... flags) { - Intent intent = new Intent(context, cls); - for (int flag : flags) { - intent.addFlags(flag); - } - context.startActivity(intent); - } -} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/ActivityUtils.kt b/app/src/main/java/fr/free/nrw/commons/utils/ActivityUtils.kt new file mode 100644 index 000000000..899daaf6b --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/ActivityUtils.kt @@ -0,0 +1,16 @@ +package fr.free.nrw.commons.utils + +import android.content.Context +import android.content.Intent + +object ActivityUtils { + + @JvmStatic + fun startActivityWithFlags(context: Context, cls: Class, vararg flags: Int) { + val intent = Intent(context, cls) + for (flag in flags) { + intent.addFlags(flag) + } + context.startActivity(intent) + } +} \ No newline at end of file diff --git a/app/src/main/java/fr/free/nrw/commons/utils/CommonsDateUtil.java b/app/src/main/java/fr/free/nrw/commons/utils/CommonsDateUtil.java deleted file mode 100644 index 39ddca683..000000000 --- a/app/src/main/java/fr/free/nrw/commons/utils/CommonsDateUtil.java +++ /dev/null @@ -1,44 +0,0 @@ -package fr.free.nrw.commons.utils; - -import java.text.SimpleDateFormat; -import java.util.Locale; -import java.util.TimeZone; - -/** - * Provides util functions for formatting date time - * Most of our formatting needs are addressed by the data library's DateUtil class - * Methods should be added here only if DateUtil class doesn't provide for it already - */ -public class CommonsDateUtil { - - /** - * Gets SimpleDateFormat for short date pattern - * @return simpledateformat - */ - public static SimpleDateFormat getIso8601DateFormatShort() { - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ROOT); - simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); - return simpleDateFormat; - } - - /** - * Gets SimpleDateFormat for date pattern returned by Media object - * @return simpledateformat - */ - public static SimpleDateFormat getMediaSimpleDateFormat() { - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ROOT); - simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); - return simpleDateFormat; - } - - /** - * Gets the timestamp pattern for a date - * @return timestamp - */ - public static SimpleDateFormat getIso8601DateFormatTimestamp() { - final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", - Locale.ROOT); - simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); - return simpleDateFormat; - } -} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/CommonsDateUtil.kt b/app/src/main/java/fr/free/nrw/commons/utils/CommonsDateUtil.kt new file mode 100644 index 000000000..c076e19ce --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/CommonsDateUtil.kt @@ -0,0 +1,46 @@ +package fr.free.nrw.commons.utils + +import java.text.SimpleDateFormat +import java.util.Locale +import java.util.TimeZone + +/** + * Provides util functions for formatting date time. + * Most of our formatting needs are addressed by the data library's DateUtil class. + * Methods should be added here only if DateUtil class doesn't provide for it already. + */ +object CommonsDateUtil { + + /** + * Gets SimpleDateFormat for short date pattern. + * @return simpleDateFormat + */ + @JvmStatic + fun getIso8601DateFormatShort(): SimpleDateFormat { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.ROOT) + simpleDateFormat.timeZone = TimeZone.getTimeZone("UTC") + return simpleDateFormat + } + + /** + * Gets SimpleDateFormat for date pattern returned by Media object. + * @return simpleDateFormat + */ + @JvmStatic + fun getMediaSimpleDateFormat(): SimpleDateFormat { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ROOT) + simpleDateFormat.timeZone = TimeZone.getTimeZone("UTC") + return simpleDateFormat + } + + /** + * Gets the timestamp pattern for a date. + * @return timestamp + */ + @JvmStatic + fun getIso8601DateFormatTimestamp(): SimpleDateFormat { + val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ROOT) + simpleDateFormat.timeZone = TimeZone.getTimeZone("UTC") + return simpleDateFormat + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/DateUtil.java b/app/src/main/java/fr/free/nrw/commons/utils/DateUtil.java deleted file mode 100644 index 1d2a8fdf7..000000000 --- a/app/src/main/java/fr/free/nrw/commons/utils/DateUtil.java +++ /dev/null @@ -1,53 +0,0 @@ -package fr.free.nrw.commons.utils; - -import static android.text.format.DateFormat.getBestDateTimePattern; - -import androidx.annotation.NonNull; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.TimeZone; - -public final class DateUtil { - private static Map DATE_FORMATS = new HashMap<>(); - - // TODO: Switch to DateTimeFormatter when minSdk = 26. - - public static synchronized String iso8601DateFormat(Date date) { - return getCachedDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ROOT, true).format(date); - } - - public static synchronized Date iso8601DateParse(String date) throws ParseException { - return getCachedDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ROOT, true).parse(date); - } - - public static String getMonthOnlyDateString(@NonNull Date date) { - return getDateStringWithSkeletonPattern(date, "MMMM d"); - } - - public static String getExtraShortDateString(@NonNull Date date) { - return getDateStringWithSkeletonPattern(date, "MMM d"); - } - - public static synchronized String getDateStringWithSkeletonPattern(@NonNull Date date, @NonNull String pattern) { - return getCachedDateFormat(getBestDateTimePattern(Locale.getDefault(), pattern), Locale.getDefault(), false).format(date); - } - - private static SimpleDateFormat getCachedDateFormat(String pattern, Locale locale, boolean utc) { - if (!DATE_FORMATS.containsKey(pattern)) { - SimpleDateFormat df = new SimpleDateFormat(pattern, locale); - if (utc) { - df.setTimeZone(TimeZone.getTimeZone("UTC")); - } - DATE_FORMATS.put(pattern, df); - } - return DATE_FORMATS.get(pattern); - } - - private DateUtil() { - } -} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/DateUtil.kt b/app/src/main/java/fr/free/nrw/commons/utils/DateUtil.kt new file mode 100644 index 000000000..bc33a1ede --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/DateUtil.kt @@ -0,0 +1,62 @@ +package fr.free.nrw.commons.utils + +import android.text.format.DateFormat.getBestDateTimePattern +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.Date +import java.util.HashMap +import java.util.Locale +import java.util.TimeZone + +/** + * Utility class for date formatting and parsing. + * TODO: Switch to DateTimeFormatter when minSdk = 26. + */ +object DateUtil { + + private val DATE_FORMATS: MutableMap = HashMap() + + @JvmStatic + @Synchronized + fun iso8601DateFormat(date: Date): String { + return getCachedDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ROOT, true).format(date) + } + + @JvmStatic + @Synchronized + @Throws(ParseException::class) + fun iso8601DateParse(date: String): Date { + return getCachedDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ROOT, true).parse(date) + } + + @JvmStatic + fun getMonthOnlyDateString(date: Date): String { + return getDateStringWithSkeletonPattern(date, "MMMM d") + } + + @JvmStatic + fun getExtraShortDateString(date: Date): String { + return getDateStringWithSkeletonPattern(date, "MMM d") + } + + @JvmStatic + @Synchronized + fun getDateStringWithSkeletonPattern(date: Date, pattern: String): String { + return getCachedDateFormat( + getBestDateTimePattern(Locale.getDefault(), pattern), + Locale.getDefault(), false + ).format(date) + } + + @JvmStatic + private fun getCachedDateFormat(pattern: String, locale: Locale, utc: Boolean): SimpleDateFormat { + if (!DATE_FORMATS.containsKey(pattern)) { + val df = SimpleDateFormat(pattern, locale) + if (utc) { + df.timeZone = TimeZone.getTimeZone("UTC") + } + DATE_FORMATS[pattern] = df + } + return DATE_FORMATS[pattern]!! + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/DeviceInfoUtil.java b/app/src/main/java/fr/free/nrw/commons/utils/DeviceInfoUtil.java deleted file mode 100644 index 5e01cc606..000000000 --- a/app/src/main/java/fr/free/nrw/commons/utils/DeviceInfoUtil.java +++ /dev/null @@ -1,91 +0,0 @@ -package fr.free.nrw.commons.utils; - -import android.content.Context; -import android.os.Build; - -import java.util.HashMap; -import java.util.Map; - -import fr.free.nrw.commons.utils.model.ConnectionType; -import fr.free.nrw.commons.utils.model.NetworkConnectionType; - -import static fr.free.nrw.commons.utils.model.ConnectionType.CELLULAR; -import static fr.free.nrw.commons.utils.model.ConnectionType.CELLULAR_3G; -import static fr.free.nrw.commons.utils.model.ConnectionType.CELLULAR_4G; -import static fr.free.nrw.commons.utils.model.ConnectionType.NO_INTERNET; -import static fr.free.nrw.commons.utils.model.ConnectionType.WIFI_NETWORK; -import static fr.free.nrw.commons.utils.model.NetworkConnectionType.FOUR_G; -import static fr.free.nrw.commons.utils.model.NetworkConnectionType.THREE_G; -import static fr.free.nrw.commons.utils.model.NetworkConnectionType.TWO_G; -import static fr.free.nrw.commons.utils.model.NetworkConnectionType.UNKNOWN; -import static fr.free.nrw.commons.utils.model.NetworkConnectionType.WIFI; - -/** - * Util class to get any information about the user's device - * Ensure that any sensitive information like IMEI is not fetched/shared without user's consent - */ -public class DeviceInfoUtil { - private static final Map TYPE_MAPPING = new HashMap<>(); - - static { - TYPE_MAPPING.put(TWO_G, CELLULAR); - TYPE_MAPPING.put(THREE_G, CELLULAR_3G); - TYPE_MAPPING.put(FOUR_G, CELLULAR_4G); - TYPE_MAPPING.put(WIFI, WIFI_NETWORK); - TYPE_MAPPING.put(UNKNOWN, CELLULAR); - } - - /** - * Get network connection type - * @param context - * @return wifi/cellular-4g/cellular-3g/cellular-2g/no-internet - */ - public static ConnectionType getConnectionType(Context context) { - if (!NetworkUtils.isInternetConnectionEstablished(context)) { - return NO_INTERNET; - } - NetworkConnectionType networkType = NetworkUtils.getNetworkType(context); - ConnectionType deviceNetworkType = TYPE_MAPPING.get(networkType); - return deviceNetworkType == null ? CELLULAR : deviceNetworkType; - } - - /** - * Get Device manufacturer - * @return - */ - public static String getDeviceManufacturer() { - return Build.MANUFACTURER; - } - - /** - * Get Device model name - * @return - */ - public static String getDeviceModel() { - return Build.MODEL; - } - - /** - * Get Android version. Eg. 4.4.2 - * @return - */ - public static String getAndroidVersion() { - return Build.VERSION.RELEASE; - } - - /** - * Get API Level. Eg. 26 - * @return - */ - public static String getAPILevel() { - return Build.VERSION.SDK; - } - - /** - * Get Device. - * @return - */ - public static String getDevice() { - return Build.DEVICE; - } -} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/DeviceInfoUtil.kt b/app/src/main/java/fr/free/nrw/commons/utils/DeviceInfoUtil.kt new file mode 100644 index 000000000..05d71c7e1 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/DeviceInfoUtil.kt @@ -0,0 +1,80 @@ +package fr.free.nrw.commons.utils + +import android.content.Context +import android.os.Build +import fr.free.nrw.commons.utils.model.ConnectionType +import fr.free.nrw.commons.utils.model.NetworkConnectionType + +/** + * Util class to get any information about the user's device + * Ensure that any sensitive information like IMEI is not fetched/shared without user's consent + */ +object DeviceInfoUtil { + private val TYPE_MAPPING = mapOf( + NetworkConnectionType.TWO_G to ConnectionType.CELLULAR, + NetworkConnectionType.THREE_G to ConnectionType.CELLULAR_3G, + NetworkConnectionType.FOUR_G to ConnectionType.CELLULAR_4G, + NetworkConnectionType.WIFI to ConnectionType.WIFI_NETWORK, + NetworkConnectionType.UNKNOWN to ConnectionType.CELLULAR + ) + + /** + * Get network connection type + * @param context + * @return wifi/cellular-4g/cellular-3g/cellular-2g/no-internet + */ + @JvmStatic + fun getConnectionType(context: Context): ConnectionType { + return if (!NetworkUtils.isInternetConnectionEstablished(context)) { + ConnectionType.NO_INTERNET + } else { + val networkType = NetworkUtils.getNetworkType(context) + TYPE_MAPPING[networkType] ?: ConnectionType.CELLULAR + } + } + + /** + * Get Device manufacturer + * @return + */ + @JvmStatic + fun getDeviceManufacturer(): String { + return Build.MANUFACTURER + } + + /** + * Get Device model name + * @return + */ + @JvmStatic + fun getDeviceModel(): String { + return Build.MODEL + } + + /** + * Get Android version. Eg. 4.4.2 + * @return + */ + @JvmStatic + fun getAndroidVersion(): String { + return Build.VERSION.RELEASE + } + + /** + * Get API Level. Eg. 26 + * @return + */ + @JvmStatic + fun getAPILevel(): String { + return Build.VERSION.SDK + } + + /** + * Get Device. + * @return + */ + @JvmStatic + fun getDevice(): String { + return Build.DEVICE + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.java deleted file mode 100644 index 889b31f2d..000000000 --- a/app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.java +++ /dev/null @@ -1,31 +0,0 @@ -package fr.free.nrw.commons.utils; - -import android.os.Handler; -import android.os.Looper; - -import java.util.concurrent.Executor; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -public class ExecutorUtils { - - private static final Executor uiExecutor = command -> { - if (Looper.myLooper() == Looper.getMainLooper()) { - command.run(); - } else { - new Handler(Looper.getMainLooper()).post(command); - } - }; - - public static Executor uiExecutor() { - return uiExecutor; - } - - - private static final ExecutorService executor = Executors.newFixedThreadPool(3); - - public static ExecutorService get() { - return executor; - } - -} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.kt b/app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.kt new file mode 100644 index 000000000..981b19355 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.kt @@ -0,0 +1,33 @@ +package fr.free.nrw.commons.utils + +import android.os.Handler +import android.os.Looper + +import java.util.concurrent.Executor +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors + +object ExecutorUtils { + + @JvmStatic + private val uiExecutor: Executor = Executor { command -> + if (Looper.myLooper() == Looper.getMainLooper()) { + command.run() + } else { + Handler(Looper.getMainLooper()).post(command) + } + } + + @JvmStatic + fun uiExecutor(): Executor { + return uiExecutor + } + + @JvmStatic + private val executor: ExecutorService = Executors.newFixedThreadPool(3) + + @JvmStatic + fun get(): ExecutorService { + return executor + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.java deleted file mode 100644 index a01ff9251..000000000 --- a/app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.java +++ /dev/null @@ -1,15 +0,0 @@ -package fr.free.nrw.commons.utils; - -import androidx.fragment.app.Fragment; - -public class FragmentUtils { - - /** - * Utility function to check whether the fragment UI is still active or not - * @param fragment - * @return - */ - public static boolean isFragmentUIActive(Fragment fragment) { - return fragment!=null && fragment.getActivity() != null && fragment.isAdded() && !fragment.isDetached() && !fragment.isRemoving(); - } -} diff --git a/app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.kt b/app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.kt new file mode 100644 index 000000000..4cdeecda2 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/FragmentUtils.kt @@ -0,0 +1,20 @@ +package fr.free.nrw.commons.utils + +import androidx.fragment.app.Fragment + +object FragmentUtils { + + /** + * Utility function to check whether the fragment UI is still active or not + * @param fragment + * @return Boolean + */ + @JvmStatic + fun isFragmentUIActive(fragment: Fragment?): Boolean { + return fragment != null && + fragment.activity != null && + fragment.isAdded && + !fragment.isDetached && + !fragment.isRemoving + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/wikidata/model/notifications/Notification.java b/app/src/main/java/fr/free/nrw/commons/wikidata/model/notifications/Notification.java index 2b18669a4..2d1dbdf28 100644 --- a/app/src/main/java/fr/free/nrw/commons/wikidata/model/notifications/Notification.java +++ b/app/src/main/java/fr/free/nrw/commons/wikidata/model/notifications/Notification.java @@ -7,8 +7,8 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.annotations.SerializedName; -import org.apache.commons.lang3.StringUtils; import fr.free.nrw.commons.utils.DateUtil; +import org.apache.commons.lang3.StringUtils; import fr.free.nrw.commons.wikidata.GsonUtil; import java.text.ParseException;