diff --git a/app/build.gradle b/app/build.gradle index 94e725c8..91874f1c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,11 +15,11 @@ def getGitSha = { } android { - compileSdkVersion 29 + compileSdkVersion 30 defaultConfig { applicationId APP_ID minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 83 versionName "15.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt b/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt index 57f38475..a408bc43 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt @@ -34,13 +34,16 @@ import androidx.annotation.Px import androidx.appcompat.app.AlertDialog import androidx.core.app.ActivityOptionsCompat import androidx.core.content.ContextCompat +import androidx.core.view.ViewCompat +import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsCompat.Type.systemBars import androidx.emoji.text.EmojiCompat import androidx.preference.PreferenceManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.viewpager2.widget.MarginPageTransformer import com.bumptech.glide.Glide import com.google.android.material.appbar.AppBarLayout -import com.google.android.material.appbar.CollapsingToolbarLayout import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.ShapeAppearanceModel @@ -170,7 +173,6 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI binding.accountFieldList.layoutManager = LinearLayoutManager(this) binding.accountFieldList.adapter = accountFieldAdapter - val accountListClickListener = { v: View -> val type = when (v.id) { R.id.accountFollowers -> AccountListActivity.Type.FOLLOWERS @@ -237,13 +239,11 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI private fun setupToolbar() { // set toolbar top margin according to system window insets - binding.accountCoordinatorLayout.setOnApplyWindowInsetsListener { _, insets -> - val top = insets.systemWindowInsetTop - - val toolbarParams = binding.accountToolbar.layoutParams as CollapsingToolbarLayout.LayoutParams + ViewCompat.setOnApplyWindowInsetsListener(binding.accountCoordinatorLayout) { _, insets -> + val top = insets.getInsets(systemBars()).top + val toolbarParams = binding.accountToolbar.layoutParams as ViewGroup.MarginLayoutParams toolbarParams.topMargin = top - - insets.consumeSystemWindowInsets() + WindowInsetsCompat.CONSUMED } // Setup the toolbar. @@ -318,8 +318,7 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI } private fun makeNotificationBarTransparent() { - val decorView = window.decorView - decorView.systemUiVisibility = decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + WindowCompat.setDecorFitsSystemWindows(window, false) window.statusBarColor = statusBarColorTransparent } diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt index aea0211a..972c15f3 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt @@ -614,7 +614,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje AlertDialog.Builder(this) .setTitle(R.string.action_logout) .setMessage(getString(R.string.action_logout_confirm, activeAccount.fullName)) - .setPositiveButton(android.R.string.yes) { _: DialogInterface?, _: Int -> + .setPositiveButton(android.R.string.ok) { _: DialogInterface?, _: Int -> NotificationHelper.deleteNotificationChannelsForAccount(activeAccount, this) cacheUpdater.clearForUser(activeAccount.id) conversationRepository.deleteCacheForAccount(activeAccount.id) @@ -632,7 +632,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje startActivity(intent) finishWithoutSlideOutAnimation() } - .setNegativeButton(android.R.string.no, null) + .setNegativeButton(android.R.string.cancel, null) .show() } } diff --git a/app/src/main/java/com/keylesspalace/tusky/ViewMediaActivity.kt b/app/src/main/java/com/keylesspalace/tusky/ViewMediaActivity.kt index 831d5f3f..b266444e 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ViewMediaActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/ViewMediaActivity.kt @@ -49,8 +49,8 @@ import com.keylesspalace.tusky.BuildConfig.APPLICATION_ID import com.keylesspalace.tusky.databinding.ActivityViewMediaBinding import com.keylesspalace.tusky.entity.Attachment import com.keylesspalace.tusky.fragment.ViewImageFragment -import com.keylesspalace.tusky.pager.SingleImagePagerAdapter import com.keylesspalace.tusky.pager.ImagePagerAdapter +import com.keylesspalace.tusky.pager.SingleImagePagerAdapter import com.keylesspalace.tusky.util.getTemporaryMediaFilename import com.keylesspalace.tusky.util.viewBinding import com.keylesspalace.tusky.viewdata.AttachmentViewData @@ -138,6 +138,7 @@ class ViewMediaActivity : BaseActivity(), ViewImageFragment.PhotoActionsListener } window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE + window.statusBarColor = Color.BLACK window.sharedElementEnterTransition.addListener(object : NoopTransitionListener { override fun onTransitionEnd(transition: Transition) { diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollOptionsAdapter.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollOptionsAdapter.kt index 6a0b6a87..c3da2c1c 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollOptionsAdapter.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollOptionsAdapter.kt @@ -47,7 +47,7 @@ class AddPollOptionsAdapter( binding.optionEditText.filters = arrayOf(InputFilter.LengthFilter(maxOptionLength)) binding.optionEditText.onTextChanged { s, _, _, _ -> - val pos = holder.adapterPosition + val pos = holder.bindingAdapterPosition if(pos != RecyclerView.NO_POSITION) { options[pos] = s.toString() onOptionChanged(validateInput()) @@ -68,8 +68,8 @@ class AddPollOptionsAdapter( holder.binding.deleteButton.setOnClickListener { holder.binding.optionEditText.clearFocus() - options.removeAt(holder.adapterPosition) - notifyItemRemoved(holder.adapterPosition) + options.removeAt(holder.bindingAdapterPosition) + notifyItemRemoved(holder.bindingAdapterPosition) onOptionRemoved(validateInput()) } } diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/CaptionDialog.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/CaptionDialog.kt index adc72cd3..13601c1a 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/CaptionDialog.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/CaptionDialog.kt @@ -21,7 +21,6 @@ import android.graphics.drawable.Drawable import android.net.Uri import android.text.InputFilter import android.text.InputType -import android.util.DisplayMetrics import android.view.WindowManager import android.widget.EditText import android.widget.LinearLayout @@ -54,9 +53,6 @@ fun T.makeCaptionDialog(existingDescription: String?, maximumScale = 6f } - val displayMetrics = DisplayMetrics() - windowManager.defaultDisplay.getMetrics(displayMetrics) - val margin = Utils.dpToPx(this, 4) dialogLayout.addView(imageView) (imageView.layoutParams as LinearLayout.LayoutParams).weight = 1f diff --git a/app/src/main/java/com/keylesspalace/tusky/di/AppInjector.kt b/app/src/main/java/com/keylesspalace/tusky/di/AppInjector.kt index bd06bfc1..21fd184a 100644 --- a/app/src/main/java/com/keylesspalace/tusky/di/AppInjector.kt +++ b/app/src/main/java/com/keylesspalace/tusky/di/AppInjector.kt @@ -41,22 +41,22 @@ object AppInjector { handleActivity(activity) } - override fun onActivityPaused(activity: Activity?) { + override fun onActivityPaused(activity: Activity) { } - override fun onActivityResumed(activity: Activity?) { + override fun onActivityResumed(activity: Activity) { } - override fun onActivityStarted(activity: Activity?) { + override fun onActivityStarted(activity: Activity) { } - override fun onActivityDestroyed(activity: Activity?) { + override fun onActivityDestroyed(activity: Activity) { } - override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) { + override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) { } - override fun onActivityStopped(activity: Activity?) { + override fun onActivityStopped(activity: Activity) { } }) diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java index c6bef703..deec5888 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java @@ -306,8 +306,8 @@ public class NotificationsFragment extends SFragment implements private void confirmClearNotifications() { new AlertDialog.Builder(getContext()) .setMessage(R.string.notification_clear_text) - .setPositiveButton(android.R.string.yes, (DialogInterface dia, int which) -> clearNotifications()) - .setNegativeButton(android.R.string.no, null) + .setPositiveButton(android.R.string.ok, (DialogInterface dia, int which) -> clearNotifications()) + .setNegativeButton(android.R.string.cancel, null) .show(); } diff --git a/app/src/main/java/com/keylesspalace/tusky/receiver/SendStatusBroadcastReceiver.kt b/app/src/main/java/com/keylesspalace/tusky/receiver/SendStatusBroadcastReceiver.kt index b0ecc4ad..c69de81c 100644 --- a/app/src/main/java/com/keylesspalace/tusky/receiver/SendStatusBroadcastReceiver.kt +++ b/app/src/main/java/com/keylesspalace/tusky/receiver/SendStatusBroadcastReceiver.kt @@ -51,8 +51,8 @@ class SendStatusBroadcastReceiver : BroadcastReceiver() { val senderFullName = intent.getStringExtra(NotificationHelper.KEY_SENDER_ACCOUNT_FULL_NAME) val citedStatusId = intent.getStringExtra(NotificationHelper.KEY_CITED_STATUS_ID) val visibility = intent.getSerializableExtra(NotificationHelper.KEY_VISIBILITY) as Status.Visibility - val spoiler = intent.getStringExtra(NotificationHelper.KEY_SPOILER) - val mentions = intent.getStringArrayExtra(NotificationHelper.KEY_MENTIONS) + val spoiler = intent.getStringExtra(NotificationHelper.KEY_SPOILER) ?: "" + val mentions = intent.getStringArrayExtra(NotificationHelper.KEY_MENTIONS) ?: emptyArray() val citedText = intent.getStringExtra(NotificationHelper.KEY_CITED_TEXT) val localAuthorId = intent.getStringExtra(NotificationHelper.KEY_CITED_AUTHOR_LOCAL) @@ -69,7 +69,7 @@ class SendStatusBroadcastReceiver : BroadcastReceiver() { val builder = NotificationCompat.Builder(context, NotificationHelper.CHANNEL_MENTION + senderIdentifier) .setSmallIcon(R.drawable.ic_notify) - .setColor(ContextCompat.getColor(context, (R.color.tusky_blue))) + .setColor(ContextCompat.getColor(context, R.color.tusky_blue)) .setGroup(senderFullName) .setDefaults(0) // So it doesn't ring twice, notify only in Target callback