diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-06-28 11:06:50 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-06-28 11:06:50 +0300 |
commit | 9fe1b079efa58a822c3432859abbc9565739543b (patch) | |
tree | 7dd87a5a9b838832374084d20770d20b2d4ff3d5 /app/src/main/java/it/niedermann/owncloud/notes/shared | |
parent | 0d1136aad3cae384e7a9c636f79e4d121b28dd89 (diff) | |
parent | 7c5cb1b2552ee711eeaec98e3e8928e8e033cb0a (diff) |
Merge branch 'master' into 916-settings
# Conflicts:
# app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java
# app/src/main/java/it/niedermann/owncloud/notes/shared/model/ApiVersion.java
# app/src/main/res/values/strings.xml
Diffstat (limited to 'app/src/main/java/it/niedermann/owncloud/notes/shared')
16 files changed, 224 insertions, 153 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/account/AccountChooserViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/account/AccountChooserViewHolder.java index 7688b1b1..5d3d2963 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/account/AccountChooserViewHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/account/AccountChooserViewHolder.java @@ -31,7 +31,7 @@ public class AccountChooserViewHolder extends RecyclerView.ViewHolder { .into(binding.accountItemAvatar); binding.accountLayout.setOnClickListener((v) -> targetAccountConsumer.accept(localAccount)); - binding.accountName.setText(localAccount.getUserName()); + binding.accountName.setText(localAccount.getDisplayName()); binding.accountHost.setText(Uri.parse(localAccount.getUrl()).getHost()); } }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/ApiVersion.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/ApiVersion.java index ee2fdc3a..589f2571 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/ApiVersion.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/ApiVersion.java @@ -42,10 +42,6 @@ public class ApiVersion implements Comparable<ApiVersion> { return minor; } - public String getOriginalVersion() { - return originalVersion; - } - public static ApiVersion of(String versionString) { int major = 0, minor = 0; if (versionString != null) { @@ -90,6 +86,9 @@ public class ApiVersion implements Comparable<ApiVersion> { // return getMajor() >= 1 && getMinor() >= 2; } + /** + * Checks only the <strong>{@link #major}</strong> version. + */ @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/Capabilities.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/Capabilities.java index 5514a91b..06bd867d 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/Capabilities.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/Capabilities.java @@ -1,103 +1,21 @@ package it.niedermann.owncloud.notes.shared.model; import android.graphics.Color; -import android.util.Log; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; -import com.bumptech.glide.load.HttpException; -import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; - -import org.json.JSONException; -import org.json.JSONObject; - -import it.niedermann.android.util.ColorUtil; - -import static java.net.HttpURLConnection.HTTP_UNAVAILABLE; - -/** - * This entity class is used to return relevant data of the HTTP response. - */ public class Capabilities { - private static final String TAG = Capabilities.class.getSimpleName(); - - private static final String JSON_OCS = "ocs"; - private static final String JSON_OCS_META = "meta"; - private static final String JSON_OCS_META_STATUSCODE = "statuscode"; - private static final String JSON_OCS_DATA = "data"; - private static final String JSON_OCS_DATA_CAPABILITIES = "capabilities"; - private static final String JSON_OCS_DATA_CAPABILITIES_NOTES = "notes"; - private static final String JSON_OCS_DATA_CAPABILITIES_NOTES_API_VERSION = "api_version"; - private static final String JSON_OCS_DATA_CAPABILITIES_THEMING = "theming"; - private static final String JSON_OCS_DATA_CAPABILITIES_THEMING_COLOR = "color"; - private static final String JSON_OCS_DATA_CAPABILITIES_THEMING_COLOR_TEXT = "color-text"; - private String apiVersion = null; - @ColorInt - private int color = -16743735; + private int color = -16743735; // #0082C9 @ColorInt - private int textColor = -16777216; + private int textColor = Color.WHITE; @Nullable private String eTag; - public Capabilities() { - - } - - @VisibleForTesting - public Capabilities(@NonNull String response, @Nullable String eTag) throws NextcloudHttpRequestFailedException { - this.eTag = eTag; - final JSONObject ocs; - try { - ocs = new JSONObject(response).getJSONObject(JSON_OCS); - if (ocs.has(JSON_OCS_META)) { - final JSONObject meta = ocs.getJSONObject(JSON_OCS_META); - if (meta.has(JSON_OCS_META_STATUSCODE)) { - if (meta.getInt(JSON_OCS_META_STATUSCODE) == HTTP_UNAVAILABLE) { - Log.i(TAG, "Capabilities Endpoint: This instance is currently in maintenance mode."); - throw new NextcloudHttpRequestFailedException(HTTP_UNAVAILABLE, new HttpException(HTTP_UNAVAILABLE)); - } - } - } - if (ocs.has(JSON_OCS_DATA)) { - final JSONObject data = ocs.getJSONObject(JSON_OCS_DATA); - if (data.has(JSON_OCS_DATA_CAPABILITIES)) { - final JSONObject capabilities = data.getJSONObject(JSON_OCS_DATA_CAPABILITIES); - if (capabilities.has(JSON_OCS_DATA_CAPABILITIES_NOTES)) { - final JSONObject notes = capabilities.getJSONObject(JSON_OCS_DATA_CAPABILITIES_NOTES); - if (notes.has(JSON_OCS_DATA_CAPABILITIES_NOTES_API_VERSION)) { - this.apiVersion = notes.getString(JSON_OCS_DATA_CAPABILITIES_NOTES_API_VERSION); - } - } - if (capabilities.has(JSON_OCS_DATA_CAPABILITIES_THEMING)) { - final JSONObject theming = capabilities.getJSONObject(JSON_OCS_DATA_CAPABILITIES_THEMING); - if (theming.has(JSON_OCS_DATA_CAPABILITIES_THEMING_COLOR)) { - try { - this.color = Color.parseColor(ColorUtil.INSTANCE.formatColorToParsableHexString(theming.getString(JSON_OCS_DATA_CAPABILITIES_THEMING_COLOR))); - } catch (Exception e) { - e.printStackTrace(); - } - } - if (theming.has(JSON_OCS_DATA_CAPABILITIES_THEMING_COLOR_TEXT)) { - try { - this.textColor = Color.parseColor(ColorUtil.INSTANCE.formatColorToParsableHexString(theming.getString(JSON_OCS_DATA_CAPABILITIES_THEMING_COLOR_TEXT))); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - } - } catch (JSONException e) { - e.printStackTrace(); - } - } - public void setApiVersion(String apiVersion) { this.apiVersion = apiVersion; } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/CategorySortingMethod.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/CategorySortingMethod.java index 94bcda38..6a36ade1 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/CategorySortingMethod.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/CategorySortingMethod.java @@ -7,7 +7,7 @@ public enum CategorySortingMethod { private final int id; private final String title; // sorting method OrderBy for SQL - /*** + /** * Constructor * @param title given sorting method OrderBy */ @@ -16,7 +16,7 @@ public enum CategorySortingMethod { this.title = title; } - /*** + /** * Retrieve the sorting method id represented in database * @return the sorting method id for the enum item */ @@ -24,7 +24,7 @@ public enum CategorySortingMethod { return this.id; } - /*** + /** * Retrieve the sorting method order for SQL * @return the sorting method order for the enum item */ @@ -32,7 +32,7 @@ public enum CategorySortingMethod { return this.title; } - /*** + /** * Retrieve the corresponding enum value with given the index (ordinal) * @param id the id of the corresponding enum value stored in DB * @return the corresponding enum item with the index (ordinal) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/OcsResponse.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/OcsResponse.java new file mode 100644 index 00000000..0fea9a92 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/OcsResponse.java @@ -0,0 +1,30 @@ +package it.niedermann.owncloud.notes.shared.model; + +import com.google.gson.annotations.Expose; + +/** + * <a href="https://www.open-collaboration-services.org/">OpenCollaborationServices</a> + * + * @param <T> defines the payload of this {@link OcsResponse}. + */ +public class OcsResponse<T> { + + @Expose + public OcsWrapper<T> ocs; + + public static class OcsWrapper<T> { + @Expose + public OcsMeta meta; + @Expose + public T data; + } + + public static class OcsMeta { + @Expose + public String status; + @Expose + public int statuscode; + @Expose + public String message; + } +}
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/OcsUser.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/OcsUser.java new file mode 100644 index 00000000..9248abdf --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/OcsUser.java @@ -0,0 +1,16 @@ +package it.niedermann.owncloud.notes.shared.model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +/** + * Equivalent of an <code><a href="https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-api-overview.html?highlight=ocs#user-metadata">OcsUser</a></code> + */ +public class OcsUser { + @Expose + @SerializedName("id") + public String userId; + @Expose + @SerializedName("displayname") + public String displayName; +}
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/ApiVersionUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/ApiVersionUtil.java new file mode 100644 index 00000000..57788472 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/ApiVersionUtil.java @@ -0,0 +1,105 @@ +package it.niedermann.owncloud.notes.shared.util; + +import android.text.TextUtils; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.json.JSONArray; +import org.json.JSONException; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Objects; +import java.util.stream.Collectors; + +import it.niedermann.owncloud.notes.shared.model.ApiVersion; + +public class ApiVersionUtil { + + private ApiVersionUtil() { + throw new UnsupportedOperationException("Do not instantiate this util class."); + } + + /** + * @return a {@link Collection} of all valid {@link ApiVersion}s which have been found in {@param raw}. + */ + @NonNull + public static Collection<ApiVersion> parse(@Nullable String raw) { + if (TextUtils.isEmpty(raw)) { + return Collections.emptyList(); + } + + JSONArray a; + try { + a = new JSONArray(raw); + } catch (JSONException e) { + try { + a = new JSONArray("[" + raw + "]"); + } catch (JSONException e1) { + return Collections.emptyList(); + } + } + + final Collection<ApiVersion> result = new ArrayList<>(); + for (int i = 0; i < a.length(); i++) { + try { + final ApiVersion version = ApiVersion.of(a.getString(i)); + if (version.getMajor() != 0 || version.getMinor() != 0) { + result.add(version); + } + } catch (Exception ignored) { + } + } + return result; + } + + /** + * @return a serialized {@link String} of the given {@param apiVersions} or <code>null</code>. + */ + @Nullable + public static String serialize(@Nullable Collection<ApiVersion> apiVersions) { + if (apiVersions == null || apiVersions.isEmpty()) { + return null; + } + return "[" + + apiVersions + .stream() + .filter(Objects::nonNull) + .map(v -> v.getMajor() + "." + v.getMinor()) + .collect(Collectors.joining(",")) + + "]"; + } + + @Nullable + public static String sanitize(@Nullable String raw) { + return serialize(parse(raw)); + } + + /** + * @return the highest {@link ApiVersion} that is supported by the server according to {@param raw}, + * whose major version is also supported by this app (see {@link ApiVersion#SUPPORTED_API_VERSIONS}). + * Returns <code>null</code> if no better version could be found. + */ + @Nullable + public static ApiVersion getPreferredApiVersion(@Nullable String raw) { + return parse(raw) + .stream() + .filter(version -> Arrays.asList(ApiVersion.SUPPORTED_API_VERSIONS).contains(version)) + .max((o1, o2) -> { + if (o2.getMajor() > o1.getMajor()) { + return -1; + } else if (o2.getMajor() < o1.getMajor()) { + return 1; + } else if (o2.getMinor() > o1.getMinor()) { + return -1; + } else if (o2.getMinor() < o1.getMinor()) { + return 1; + } + return 0; + }) + .orElse(null); + } +} diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/CustomAppGlideModule.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/CustomAppGlideModule.java index 03eb1097..35625119 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/CustomAppGlideModule.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/CustomAppGlideModule.java @@ -1,18 +1,37 @@ package it.niedermann.owncloud.notes.shared.util; import android.content.Context; +import android.util.Log; import androidx.annotation.NonNull; +import androidx.annotation.UiThread; import com.bumptech.glide.Glide; import com.bumptech.glide.Registry; import com.bumptech.glide.annotation.GlideModule; import com.bumptech.glide.module.AppGlideModule; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + @GlideModule public class CustomAppGlideModule extends AppGlideModule { + + private static final String TAG = CustomAppGlideModule.class.getSimpleName(); + private static final ExecutorService clearDiskCacheExecutor = Executors.newSingleThreadExecutor(); + @Override public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) { super.registerComponents(context, glide, registry); } + + @UiThread + public static void clearCache(@NonNull Context context) { + Log.i(TAG, "Clearing Glide memory cache"); + Glide.get(context).clearMemory(); + clearDiskCacheExecutor.submit(() -> { + Log.i(TAG, "Clearing Glide disk cache"); + Glide.get(context.getApplicationContext()).clearDiskCache(); + }); + } }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DatabaseIndexUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DatabaseIndexUtil.java deleted file mode 100644 index 8506c713..00000000 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DatabaseIndexUtil.java +++ /dev/null @@ -1,41 +0,0 @@ -package it.niedermann.owncloud.notes.shared.util; - -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.sqlite.db.SupportSQLiteDatabase; - -public class DatabaseIndexUtil { - - private static final String TAG = DatabaseIndexUtil.class.getSimpleName(); - - private DatabaseIndexUtil() { - - } - - public static void createIndex(@NonNull SupportSQLiteDatabase db, @NonNull String table, @NonNull String... columns) { - for (String column : columns) { - createIndex(db, table, column); - } - } - - public static void createIndex(@NonNull SupportSQLiteDatabase db, @NonNull String table, @NonNull String column) { - String indexName = table + "_" + column + "_idx"; - Log.v(TAG, "Creating database index: CREATE INDEX IF NOT EXISTS " + indexName + " ON " + table + "(" + column + ")"); - db.execSQL("CREATE INDEX " + indexName + " ON " + table + "(" + column + ")"); - } - - public static void dropIndexes(@NonNull SupportSQLiteDatabase db) { - try (Cursor c = db.query("SELECT name, sql FROM sqlite_master WHERE type = 'index'")) { - while (c.moveToNext()) { - // Skip automatic indexes which we can't drop manually - if (c.getString(1) != null) { - Log.v(TAG, "Deleting database index: DROP INDEX " + c.getString(0)); - db.execSQL("DROP INDEX " + c.getString(0)); - } - } - } - } -} diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DeviceCredentialUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DeviceCredentialUtil.java index 034eea5a..14163e91 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DeviceCredentialUtil.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DeviceCredentialUtil.java @@ -12,7 +12,7 @@ public class DeviceCredentialUtil { private static final String TAG = DeviceCredentialUtil.class.getSimpleName(); private DeviceCredentialUtil() { - // utility class -> private constructor + throw new UnsupportedOperationException("Do not instantiate this util class."); } public static boolean areCredentialsAvailable(Context context) { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DisplayUtils.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DisplayUtils.java index ad6b6793..06cbf57d 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DisplayUtils.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/DisplayUtils.java @@ -2,27 +2,21 @@ package it.niedermann.owncloud.notes.shared.util; import android.content.Context; import android.content.res.Resources; -import android.graphics.Color; -import android.text.Spannable; -import android.text.TextPaint; -import android.text.TextUtils; -import android.text.style.MetricAffectingSpan; +import android.graphics.Rect; +import android.os.Build; +import android.util.TypedValue; +import android.view.View; +import android.view.WindowInsets; -import androidx.annotation.ColorInt; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; import java.util.Collection; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.stream.Collectors; -import it.niedermann.android.util.ColorUtil; -import it.niedermann.owncloud.notes.NotesApplication; import it.niedermann.owncloud.notes.R; -import it.niedermann.owncloud.notes.branding.BrandingUtil; import it.niedermann.owncloud.notes.main.navigation.NavigationAdapter; import it.niedermann.owncloud.notes.main.navigation.NavigationItem; import it.niedermann.owncloud.notes.persistence.entity.CategoryWithNotesCount; @@ -30,7 +24,7 @@ import it.niedermann.owncloud.notes.persistence.entity.CategoryWithNotesCount; public class DisplayUtils { private DisplayUtils() { - + throw new UnsupportedOperationException("Do not instantiate this util class."); } public static List<NavigationItem.CategoryNavigationItem> convertToCategoryNavigationItem(@NonNull Context context, @NonNull Collection<CategoryWithNotesCount> counter) { @@ -52,4 +46,29 @@ public class DisplayUtils { } return new NavigationItem.CategoryNavigationItem("category:" + counter.getCategory(), counter.getCategory(), counter.getTotalNotes(), icon, counter.getAccountId(), counter.getCategory()); } + + /** + * Detect if the soft keyboard is open. + * On API prior to 30 we fall back to workaround which might be less reliable + * + * @param parentView View + * @return keyboardVisibility Boolean + */ + public static boolean isSoftKeyboardVisible(@NonNull View parentView) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + final WindowInsetsCompat insets = ViewCompat.getRootWindowInsets(parentView); + if (insets != null) { + return insets.isVisible(WindowInsets.Type.ime()); + } + } + + //Arbitrary keyboard height + final int defaultKeyboardHeightDP = 100; + final int EstimatedKeyboardDP = defaultKeyboardHeightDP + (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? 48 : 0); + final Rect rect = new Rect(); + final int estimatedKeyboardHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, EstimatedKeyboardDP, parentView.getResources().getDisplayMetrics()); + parentView.getWindowVisibleDisplayFrame(rect); + final int heightDiff = parentView.getRootView().getHeight() - (rect.bottom - rect.top); + return heightDiff >= estimatedKeyboardHeight; + } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java index e5b8afae..3d5a118c 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NoteUtil.java @@ -22,7 +22,7 @@ public class NoteUtil { public static final String EXCERPT_LINE_SEPARATOR = " "; private NoteUtil() { - + throw new UnsupportedOperationException("Do not instantiate this util class."); } /** @@ -117,7 +117,7 @@ public class NoteUtil { line = removeMarkdown(lines[currentLine]); } } else { - line = content; + line = removeMarkdown(content); } return line; } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NotesColorUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NotesColorUtil.java index a445208b..42aaf79d 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NotesColorUtil.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/NotesColorUtil.java @@ -14,6 +14,7 @@ public final class NotesColorUtil { private static final Map<ColorPair, Boolean> CONTRAST_RATIO_SUFFICIENT_CACHE = new HashMap<>(); private NotesColorUtil() { + throw new UnsupportedOperationException("Do not instantiate this util class."); } public static boolean contrastRatioIsSufficient(@ColorInt int colorOne, @ColorInt int colorTwo) { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SSOUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SSOUtil.java index da529136..1e2542b0 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SSOUtil.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SSOUtil.java @@ -19,7 +19,7 @@ public class SSOUtil { private static final String TAG = SSOUtil.class.getSimpleName(); private SSOUtil() { - + throw new UnsupportedOperationException("Do not instantiate this util class."); } /** diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/ShareUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/ShareUtil.java index 115d18dd..4b7aebd9 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/ShareUtil.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/ShareUtil.java @@ -14,6 +14,11 @@ import it.niedermann.android.markdown.MarkdownUtil; import static android.content.ClipDescription.MIMETYPE_TEXT_PLAIN; public class ShareUtil { + + private ShareUtil() { + throw new UnsupportedOperationException("Do not instantiate this util class."); + } + public static void openShareDialog(@NonNull Context context, @Nullable String subject, @Nullable String text) { context.startActivity(Intent.createChooser(new Intent() .setAction(Intent.ACTION_SEND) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SupportUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SupportUtil.java index 8bf80cb9..27fec716 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SupportUtil.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/SupportUtil.java @@ -13,7 +13,7 @@ import androidx.core.text.HtmlCompat; public class SupportUtil { private SupportUtil() { - + throw new UnsupportedOperationException("Do not instantiate this util class."); } /** |