Skip to content

Commit ed18a37

Browse files
authored
Migrated ui and theme modules from Java to Kotlin (commons-app#5942)
* Rename .java to .kt * Migrated ui and theme module to Kotlin
1 parent cb4ffd8 commit ed18a37

File tree

13 files changed

+230
-245
lines changed

13 files changed

+230
-245
lines changed

app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ private void onClickRemoveLocation() {
367367
*/
368368
private void removeLocationFromImage() {
369369
if (media != null) {
370-
compositeDisposable.add(coordinateEditHelper.makeCoordinatesEdit(getApplicationContext()
370+
getCompositeDisposable().add(coordinateEditHelper.makeCoordinatesEdit(getApplicationContext()
371371
, media, "0.0", "0.0", "0.0f")
372372
.subscribeOn(Schedulers.io())
373373
.observeOn(AndroidSchedulers.mainThread())
@@ -479,7 +479,7 @@ public void updateCoordinates(final String Latitude, final String Longitude,
479479
}
480480

481481
try {
482-
compositeDisposable.add(
482+
getCompositeDisposable().add(
483483
coordinateEditHelper.makeCoordinatesEdit(getApplicationContext(), media,
484484
Latitude, Longitude, Accuracy)
485485
.subscribeOn(Schedulers.io())

app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package fr.free.nrw.commons.customselector.ui.selector
22

33
import android.app.Activity
4+
import android.content.Context
45
import android.content.Context.MODE_PRIVATE
56
import android.content.SharedPreferences
67
import android.os.Bundle
@@ -346,7 +347,7 @@ class ImageFragment :
346347
context
347348
.getSharedPreferences(
348349
"CustomSelector",
349-
BaseActivity.MODE_PRIVATE,
350+
MODE_PRIVATE,
350351
)?.let { prefs ->
351352
prefs.edit()?.let { editor ->
352353
editor.putLong("ItemId", imageAdapter.getImageIdAt(position))?.apply()

app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public void setTabs() {
104104

105105
viewPagerAdapter.setTabData(fragmentList, titleList);
106106
viewPagerAdapter.notifyDataSetChanged();
107-
compositeDisposable.add(RxSearchView.queryTextChanges(binding.searchBox)
107+
getCompositeDisposable().add(RxSearchView.queryTextChanges(binding.searchBox)
108108
.takeUntil(RxView.detaches(binding.searchBox))
109109
.debounce(500, TimeUnit.MILLISECONDS)
110110
.observeOn(AndroidSchedulers.mainThread())
@@ -284,7 +284,7 @@ public void updateText(String query) {
284284
@Override protected void onDestroy() {
285285
super.onDestroy();
286286
//Dispose the disposables when the activity is destroyed
287-
compositeDisposable.dispose();
287+
getCompositeDisposable().dispose();
288288
binding = null;
289289
}
290290
}

app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public void removeNotification(Notification notification) {
133133
}
134134
binding.progressBar.setVisibility(View.GONE);
135135
});
136-
compositeDisposable.add(disposable);
136+
getCompositeDisposable().add(disposable);
137137
}
138138

139139

@@ -178,7 +178,7 @@ private void addNotifications(boolean archived) {
178178
Timber.d("Add notifications");
179179
if (mNotificationWorkerFragment == null) {
180180
binding.progressBar.setVisibility(View.VISIBLE);
181-
compositeDisposable.add(controller.getNotifications(archived)
181+
getCompositeDisposable().add(controller.getNotifications(archived)
182182
.subscribeOn(Schedulers.io())
183183
.observeOn(AndroidSchedulers.mainThread())
184184
.subscribe(notificationList -> {

app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ private void setTabs() {
157157
@Override
158158
public void onDestroy() {
159159
super.onDestroy();
160-
compositeDisposable.clear();
160+
getCompositeDisposable().clear();
161161
}
162162

163163
/**

app/src/main/java/fr/free/nrw/commons/theme/BaseActivity.java

Lines changed: 0 additions & 66 deletions
This file was deleted.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package fr.free.nrw.commons.theme
2+
3+
import android.content.res.Configuration
4+
import android.os.Bundle
5+
import android.util.DisplayMetrics
6+
import android.view.WindowManager
7+
import javax.inject.Inject
8+
import javax.inject.Named
9+
import fr.free.nrw.commons.R
10+
import fr.free.nrw.commons.di.CommonsDaggerAppCompatActivity
11+
import fr.free.nrw.commons.kvstore.JsonKvStore
12+
import fr.free.nrw.commons.utils.SystemThemeUtils
13+
import io.reactivex.disposables.CompositeDisposable
14+
15+
16+
abstract class BaseActivity : CommonsDaggerAppCompatActivity() {
17+
18+
@Inject
19+
@field:Named("default_preferences")
20+
lateinit var defaultKvStore: JsonKvStore
21+
22+
@Inject
23+
lateinit var systemThemeUtils: SystemThemeUtils
24+
25+
protected val compositeDisposable = CompositeDisposable()
26+
protected var wasPreviouslyDarkTheme: Boolean = false
27+
28+
override fun onCreate(savedInstanceState: Bundle?) {
29+
super.onCreate(savedInstanceState)
30+
wasPreviouslyDarkTheme = systemThemeUtils.isDeviceInNightMode()
31+
setTheme(if (wasPreviouslyDarkTheme) R.style.DarkAppTheme else R.style.LightAppTheme)
32+
33+
val fontScale = android.provider.Settings.System.getFloat(
34+
baseContext.contentResolver,
35+
android.provider.Settings.System.FONT_SCALE,
36+
1f
37+
)
38+
adjustFontScale(resources.configuration, fontScale)
39+
}
40+
41+
override fun onResume() {
42+
// Restart activity if theme is changed
43+
if (wasPreviouslyDarkTheme != systemThemeUtils.isDeviceInNightMode()) {
44+
recreate()
45+
}
46+
super.onResume()
47+
}
48+
49+
override fun onDestroy() {
50+
super.onDestroy()
51+
compositeDisposable.clear()
52+
}
53+
54+
/**
55+
* Apply fontScale on device
56+
*/
57+
fun adjustFontScale(configuration: Configuration, scale: Float) {
58+
configuration.fontScale = scale
59+
val metrics = resources.displayMetrics
60+
val wm = getSystemService(WINDOW_SERVICE) as WindowManager
61+
wm.defaultDisplay.getMetrics(metrics)
62+
metrics.scaledDensity = configuration.fontScale * metrics.density
63+
baseContext.resources.updateConfiguration(configuration, metrics)
64+
}
65+
}

app/src/main/java/fr/free/nrw/commons/ui/PasteSensitiveTextInputEditText.java

Lines changed: 0 additions & 65 deletions
This file was deleted.
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package fr.free.nrw.commons.ui
2+
3+
import android.content.Context
4+
import android.content.res.TypedArray
5+
import android.os.Build
6+
import android.os.Build.VERSION
7+
import android.util.AttributeSet
8+
import com.google.android.material.textfield.TextInputEditText
9+
import fr.free.nrw.commons.R
10+
11+
12+
class PasteSensitiveTextInputEditText @JvmOverloads constructor(
13+
context: Context,
14+
attrs: AttributeSet? = null
15+
) : TextInputEditText(context, attrs) {
16+
17+
private var formattingAllowed: Boolean = true
18+
19+
init {
20+
if (attrs != null) {
21+
formattingAllowed = extractFormattingAttribute(context, attrs)
22+
}
23+
}
24+
25+
override fun onTextContextMenuItem(id: Int): Boolean {
26+
// if not paste command, or formatting is allowed, return default
27+
if (id != android.R.id.paste || formattingAllowed) {
28+
return super.onTextContextMenuItem(id)
29+
}
30+
31+
// if it's paste and formatting not allowed
32+
val proceeded: Boolean = if (VERSION.SDK_INT >= 23) {
33+
super.onTextContextMenuItem(android.R.id.pasteAsPlainText)
34+
} else {
35+
val success = super.onTextContextMenuItem(id)
36+
if (success && text != null) {
37+
// rewrite with plain text so formatting is lost
38+
setText(text.toString())
39+
setSelection(text?.length ?: 0)
40+
}
41+
success
42+
}
43+
return proceeded
44+
}
45+
46+
private fun extractFormattingAttribute(context: Context, attrs: AttributeSet): Boolean {
47+
val a = context.theme.obtainStyledAttributes(
48+
attrs, R.styleable.PasteSensitiveTextInputEditText, 0, 0
49+
)
50+
return try {
51+
a.getBoolean(R.styleable.PasteSensitiveTextInputEditText_allowFormatting, true)
52+
} finally {
53+
a.recycle()
54+
}
55+
}
56+
57+
fun setFormattingAllowed(formattingAllowed: Boolean) {
58+
this.formattingAllowed = formattingAllowed
59+
}
60+
}

app/src/main/java/fr/free/nrw/commons/ui/widget/HtmlTextView.java

Lines changed: 0 additions & 36 deletions
This file was deleted.

0 commit comments

Comments
 (0)