]> git.ktnx.net Git - mobile-ledger.git/blob - app/src/main/java/net/ktnx/mobileledger/utils/Misc.java
more pronounced day/month delimiters in the transaction list
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / utils / Misc.java
1 /*
2  * Copyright © 2021 Damyan Ivanov.
3  * This file is part of MoLe.
4  * MoLe is free software: you can distribute it and/or modify it
5  * under the term of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your opinion), any later version.
8  *
9  * MoLe is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License terms for details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with MoLe. If not, see <https://www.gnu.org/licenses/>.
16  */
17
18 package net.ktnx.mobileledger.utils;
19
20 import android.app.Activity;
21 import android.content.res.Configuration;
22 import android.os.Handler;
23 import android.os.Looper;
24 import android.text.Editable;
25 import android.view.WindowManager;
26
27 import androidx.annotation.Nullable;
28 import androidx.fragment.app.Fragment;
29 import androidx.fragment.app.FragmentActivity;
30
31 import org.jetbrains.annotations.Contract;
32
33 public class Misc {
34     public static final char ZERO_WIDTH_SPACE = '\u200B';
35     public static boolean isZero(float f) {
36         return (f < 0.005) && (f > -0.005);
37     }
38     public static boolean equalFloats(float a, float b) { return isZero(a - b); }
39     public static void showSoftKeyboard(Activity activity) {
40         // make the keyboard appear
41         Configuration cf = activity.getResources()
42                                    .getConfiguration();
43         if (cf.keyboard == Configuration.KEYBOARD_NOKEYS ||
44             cf.keyboardHidden == Configuration.KEYBOARDHIDDEN_YES)
45             activity.getWindow()
46                     .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
47     }
48     public static void showSoftKeyboard(Fragment fragment) {
49         final FragmentActivity activity = fragment.getActivity();
50         if (activity != null)
51             showSoftKeyboard(activity);
52     }
53     public static void hideSoftKeyboard(Fragment fragment) {
54         final FragmentActivity activity = fragment.getActivity();
55         if (activity != null)
56             hideSoftKeyboard(activity);
57     }
58     public static void hideSoftKeyboard(Activity activity) {
59         Configuration cf = activity.getResources()
60                                    .getConfiguration();
61         if (cf.keyboard == Configuration.KEYBOARD_NOKEYS ||
62             cf.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO)
63             activity.getWindow()
64                     .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
65
66     }
67     public static String emptyIsNull(String str) {
68         return str != null && str.isEmpty() ? null : str;
69     }
70     public static String nullIsEmpty(String str) {
71         return (str == null) ? "" : str;
72     }
73     public static String nullIsEmpty(Editable e) {
74         if (e == null)
75             return "";
76         return e.toString();
77     }
78     public static boolean equalStrings(String u, CharSequence text) {
79         return nullIsEmpty(u).equals(text.toString());
80     }
81     public static boolean equalStrings(String a, String b) {
82         return nullIsEmpty(a).equals(nullIsEmpty(b));
83     }
84     public static String trim(@Nullable String string) {
85         if (string == null)
86             return null;
87
88         return string.trim();
89     }
90     @Contract(value = "null, null -> true; null, !null -> false; !null, null -> false", pure = true)
91     public static boolean equalIntegers(Integer a, Integer b) {
92         if (a == null && b == null)
93             return true;
94         if (a == null || b == null)
95             return false;
96
97         return a.equals(b);
98     }
99     @Contract(value = "null, null -> true; null, !null -> false; !null, null -> false", pure = true)
100     public static boolean equalLongs(Long a, Long b) {
101         if (a == null && b == null)
102             return true;
103         if (a == null || b == null)
104             return false;
105
106         return a.equals(b);
107     }
108     public static void onMainThread(Runnable r) {
109         new Handler(Looper.getMainLooper()).post(r);
110     }
111     public static String addWrapHints(String input) {
112         if (input == null)
113             return null;
114         StringBuilder result = new StringBuilder();
115         int lastPos = 0;
116         int pos = input.indexOf(':');
117
118         while (pos >= 0) {
119             result.append(input.substring(lastPos, pos + 1))
120                   .append(ZERO_WIDTH_SPACE);
121             lastPos = pos + 1;
122             pos = input.indexOf(':', lastPos + 1);
123         }
124         if (lastPos > 0)
125             result.append(input.substring(lastPos));
126
127         return result.toString();
128     }
129 }