Start on theme choose
This commit is contained in:
parent
29abb422bf
commit
326d744925
@ -110,30 +110,30 @@ dependencies {
|
||||
implementation 'androidx.core:core-ktx:1.8.0'
|
||||
implementation 'androidx.preference:preference-ktx:1.2.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
|
||||
implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
|
||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.0'
|
||||
implementation 'androidx.navigation:navigation-ui-ktx:2.5.0'
|
||||
implementation "androidx.browser:browser:1.4.0"
|
||||
implementation 'androidx.recyclerview:recyclerview:1.2.1'
|
||||
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
|
||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
|
||||
implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
|
||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.0'
|
||||
implementation 'androidx.navigation:navigation-ui-ktx:2.5.0'
|
||||
implementation 'androidx.paging:paging-runtime-ktx:3.1.1'
|
||||
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1'
|
||||
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1'
|
||||
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.4.1'
|
||||
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.4.1"
|
||||
implementation "androidx.lifecycle:lifecycle-common-java8:2.4.1"
|
||||
implementation "androidx.annotation:annotation:1.3.0"
|
||||
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.0'
|
||||
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0'
|
||||
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.0'
|
||||
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.5.0"
|
||||
implementation "androidx.lifecycle:lifecycle-common-java8:2.5.0"
|
||||
implementation "androidx.annotation:annotation:1.4.0"
|
||||
implementation 'androidx.gridlayout:gridlayout:1.0.0'
|
||||
implementation "androidx.activity:activity-ktx:1.4.0"
|
||||
implementation 'androidx.fragment:fragment-ktx:1.4.1'
|
||||
implementation "androidx.activity:activity-ktx:1.5.0"
|
||||
implementation 'androidx.fragment:fragment-ktx:1.5.0'
|
||||
implementation 'androidx.work:work-runtime-ktx:2.7.1'
|
||||
implementation 'androidx.media2:media2-widget:1.2.1'
|
||||
implementation 'androidx.media2:media2-player:1.2.1'
|
||||
|
||||
|
||||
// Use the most recent version of CameraX
|
||||
def cameraX_version = '1.1.0-rc02'
|
||||
def cameraX_version = '1.1.0'
|
||||
implementation "androidx.camera:camera-core:$cameraX_version"
|
||||
implementation "androidx.camera:camera-camera2:$cameraX_version"
|
||||
// CameraX Lifecycle library
|
||||
@ -159,17 +159,17 @@ dependencies {
|
||||
implementation 'com.google.android.material:material:1.6.1'
|
||||
|
||||
//Dagger (dependency injection)
|
||||
implementation 'com.google.dagger:dagger-android:2.40.5'
|
||||
implementation 'com.google.dagger:dagger-android-support:2.40.5'
|
||||
implementation 'com.google.dagger:dagger-android:2.42'
|
||||
implementation 'com.google.dagger:dagger-android-support:2.42'
|
||||
// if you use the support libraries
|
||||
kapt 'com.google.dagger:dagger-android-processor:2.40.5'
|
||||
kapt 'com.google.dagger:dagger-compiler:2.40.5'
|
||||
kapt 'com.google.dagger:dagger-android-processor:2.42'
|
||||
kapt 'com.google.dagger:dagger-compiler:2.42'
|
||||
|
||||
implementation 'com.squareup.okhttp3:okhttp:4.9.2'
|
||||
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
|
||||
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
|
||||
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
|
||||
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
|
||||
implementation 'io.reactivex.rxjava3:rxjava:3.1.3'
|
||||
implementation 'io.reactivex.rxjava3:rxjava:3.1.5'
|
||||
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
|
||||
implementation 'com.github.connyduck:sparkbutton:4.1.0'
|
||||
|
||||
@ -177,27 +177,27 @@ dependencies {
|
||||
implementation 'info.androidhive:imagefilters:1.0.7'
|
||||
implementation 'com.github.yalantis:ucrop:2.2.6-native'
|
||||
|
||||
implementation('com.github.bumptech.glide:glide:4.12.0') {
|
||||
implementation('com.github.bumptech.glide:glide:4.13.2') {
|
||||
exclude group: "com.android.support"
|
||||
}
|
||||
|
||||
implementation 'com.github.bumptech.glide:okhttp-integration:4.12.0'
|
||||
implementation('com.github.bumptech.glide:recyclerview-integration:4.12.0') {
|
||||
implementation 'com.github.bumptech.glide:okhttp-integration:4.13.2'
|
||||
implementation('com.github.bumptech.glide:recyclerview-integration:4.13.2') {
|
||||
// Excludes the support library because it's already included by Glide.
|
||||
transitive = false
|
||||
}
|
||||
kapt 'com.github.bumptech.glide:compiler:4.12.0'
|
||||
kapt 'com.github.bumptech.glide:compiler:4.13.2'
|
||||
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
|
||||
implementation 'com.mikepenz:materialdrawer:8.4.4'
|
||||
implementation 'com.mikepenz:materialdrawer:9.0.1'
|
||||
// Add for NavController support
|
||||
implementation 'com.mikepenz:materialdrawer-nav:8.4.4'
|
||||
implementation 'com.mikepenz:materialdrawer-nav:9.0.1'
|
||||
|
||||
//iconics
|
||||
implementation 'com.mikepenz:iconics-core:5.3.3'
|
||||
implementation 'com.mikepenz:materialdrawer-iconics:8.4.2'
|
||||
implementation 'com.mikepenz:iconics-views:5.3.3'
|
||||
implementation 'com.mikepenz:iconics-core:5.3.4'
|
||||
implementation 'com.mikepenz:materialdrawer-iconics:9.0.1'
|
||||
implementation 'com.mikepenz:iconics-views:5.3.4'
|
||||
implementation 'com.mikepenz:google-material-typeface:4.0.0.2-kotlin@aar'
|
||||
|
||||
|
||||
@ -214,7 +214,7 @@ dependencies {
|
||||
//stagingImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
|
||||
|
||||
androidTestImplementation 'androidx.work:work-testing:2.7.1'
|
||||
testImplementation 'com.github.tomakehurst:wiremock-jre8:2.32.0'
|
||||
testImplementation 'com.github.tomakehurst:wiremock-jre8:2.33.2'
|
||||
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
testImplementation "androidx.room:room-testing:$room_version"
|
||||
|
@ -41,7 +41,7 @@
|
||||
android:parentActivityName=".MainActivity">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".MainActivity " />
|
||||
android:value=".MainActivity" />
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
</intent-filter>
|
||||
|
@ -6,20 +6,23 @@ import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.GravityCompat
|
||||
import androidx.core.view.forEach
|
||||
import androidx.core.view.forEachIndexed
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.paging.ExperimentalPagingApi
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
import androidx.viewpager2.widget.ViewPager2
|
||||
import androidx.viewpager2.widget.ViewPager2.*
|
||||
import com.bumptech.glide.Glide
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
|
||||
import com.mikepenz.materialdrawer.iconics.iconicsIcon
|
||||
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
|
||||
@ -41,7 +44,6 @@ import org.pixeldroid.app.searchDiscover.SearchDiscoverFragment
|
||||
import org.pixeldroid.app.settings.SettingsActivity
|
||||
import org.pixeldroid.app.utils.BaseActivity
|
||||
import org.pixeldroid.app.utils.db.addUser
|
||||
import org.pixeldroid.app.utils.notificationsWorker.enablePullNotifications
|
||||
import org.pixeldroid.app.utils.db.entities.HomeStatusDatabaseEntity
|
||||
import org.pixeldroid.app.utils.db.entities.PublicFeedStatusDatabaseEntity
|
||||
import org.pixeldroid.app.utils.db.entities.UserDatabaseEntity
|
||||
@ -49,6 +51,7 @@ import org.pixeldroid.app.utils.hasInternet
|
||||
import org.pixeldroid.app.utils.notificationsWorker.NotificationsWorker.Companion.INSTANCE_NOTIFICATION_TAG
|
||||
import org.pixeldroid.app.utils.notificationsWorker.NotificationsWorker.Companion.SHOW_NOTIFICATION_TAG
|
||||
import org.pixeldroid.app.utils.notificationsWorker.NotificationsWorker.Companion.USER_NOTIFICATION_TAG
|
||||
import org.pixeldroid.app.utils.notificationsWorker.enablePullNotifications
|
||||
import org.pixeldroid.app.utils.notificationsWorker.removeNotificationChannelsFromAccount
|
||||
import retrofit2.HttpException
|
||||
import java.io.IOException
|
||||
@ -142,11 +145,12 @@ class MainActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
private fun setupDrawer() {
|
||||
binding.mainDrawerButton.setOnClickListener{
|
||||
binding.drawerLayout.open()
|
||||
binding.mainDrawerButton.setOnClickListener{
|
||||
binding.drawerLayout.openDrawer(binding.drawer)
|
||||
}
|
||||
|
||||
header = AccountHeaderView(this).apply {
|
||||
attachToSliderView(binding.drawer)
|
||||
headerBackgroundScaleType = ImageView.ScaleType.CENTER_CROP
|
||||
currentHiddenInList = true
|
||||
onAccountHeaderListener = { _: View?, profile: IProfile, current: Boolean ->
|
||||
@ -158,7 +162,6 @@ class MainActivity : BaseActivity() {
|
||||
descriptionRes = R.string.add_account_description
|
||||
iconicsIcon = GoogleMaterial.Icon.gmd_add
|
||||
}, 0)
|
||||
attachToSliderView(binding.drawer)
|
||||
dividerBelowHeader = false
|
||||
closeDrawerOnProfileListClick = true
|
||||
}
|
||||
@ -294,7 +297,7 @@ class MainActivity : BaseActivity() {
|
||||
isIconTinted = true
|
||||
}
|
||||
.apply(block)
|
||||
}
|
||||
}
|
||||
|
||||
private fun fillDrawerAccountInfo(account: String) {
|
||||
val users = db.userDao().getAll().toMutableList()
|
||||
@ -353,32 +356,57 @@ class MainActivity : BaseActivity() {
|
||||
return tab_array.size
|
||||
}
|
||||
}
|
||||
binding.tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
|
||||
override fun onTabSelected(tab: TabLayout.Tab?){}
|
||||
|
||||
override fun onTabUnselected(tab: TabLayout.Tab?) {}
|
||||
|
||||
override fun onTabReselected(tab: TabLayout.Tab?) {
|
||||
tab?.position?.let { position ->
|
||||
val page =
|
||||
//No clue why this works but it does. F to pay respects
|
||||
supportFragmentManager.findFragmentByTag("f$position")
|
||||
(page as? CachedFeedFragment<*>)?.onTabReClicked()
|
||||
binding.viewPager.registerOnPageChangeCallback(object : OnPageChangeCallback() {
|
||||
override fun onPageSelected(position: Int) {
|
||||
val selected = when(position){
|
||||
0 -> R.id.page_1
|
||||
1 -> R.id.page_2
|
||||
2 -> R.id.page_3
|
||||
3 -> R.id.page_4
|
||||
4 -> R.id.page_5
|
||||
else -> null
|
||||
}
|
||||
if (selected != null) {
|
||||
binding.tabs.selectedItemId = selected
|
||||
}
|
||||
super.onPageSelected(position)
|
||||
}
|
||||
})
|
||||
|
||||
TabLayoutMediator(binding.tabs, binding.viewPager) { tab, position ->
|
||||
tab.icon = ContextCompat.getDrawable(applicationContext,
|
||||
when(position){
|
||||
0 -> R.drawable.ic_home_white_24dp
|
||||
1 -> R.drawable.ic_search_white_24dp
|
||||
2 -> R.drawable.photo_camera
|
||||
3 -> R.drawable.ic_heart
|
||||
4 -> R.drawable.ic_filter_black_24dp
|
||||
else -> throw IllegalArgumentException()
|
||||
})
|
||||
}.attach()
|
||||
fun MenuItem.itemPos(): Int? {
|
||||
return when(itemId){
|
||||
R.id.page_1 -> 0
|
||||
R.id.page_2 -> 1
|
||||
R.id.page_3 -> 2
|
||||
R.id.page_4 -> 3
|
||||
R.id.page_5 -> 4
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
binding.tabs.setOnItemSelectedListener {item ->
|
||||
item.itemPos()?.let {
|
||||
binding.viewPager.currentItem = it
|
||||
true
|
||||
} ?: false
|
||||
}
|
||||
binding.tabs.setOnItemReselectedListener { item ->
|
||||
item.itemPos()?.let { position ->
|
||||
val page =
|
||||
//No clue why this works but it does. F to pay respects
|
||||
supportFragmentManager.findFragmentByTag("f$position")
|
||||
(page as? CachedFeedFragment<*>)?.onTabReClicked()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun BottomNavigationView.uncheckAllItems() {
|
||||
menu.setGroupCheckable(0, true, false)
|
||||
for (i in 0 until menu.size()) {
|
||||
menu.getItem(i).isChecked = false
|
||||
}
|
||||
menu.setGroupCheckable(0, true, true)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -56,14 +56,14 @@ class ReportActivity : BaseActivity() {
|
||||
private fun reportStatus(success: Boolean){
|
||||
if(success){
|
||||
binding.reportProgressBar.visibility = View.GONE
|
||||
binding.reportButton.isEnabled = false
|
||||
binding.reportButton.text = getString(R.string.reported)
|
||||
binding.reportButton.visibility = View.VISIBLE
|
||||
binding.reportButton.visibility = View.INVISIBLE
|
||||
binding.reportSuccess.visibility = View.VISIBLE
|
||||
} else {
|
||||
binding.textInputLayout.error = getString(R.string.report_error)
|
||||
binding.reportButton.visibility = View.VISIBLE
|
||||
binding.textInputLayout.editText?.isEnabled = true
|
||||
binding.reportProgressBar.visibility = View.GONE
|
||||
binding.reportSuccess.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import androidx.preference.PreferenceManager
|
||||
@ -79,6 +80,19 @@ class SettingsActivity : BaseActivity(), SharedPreferences.OnSharedPreferenceCha
|
||||
}
|
||||
|
||||
class SettingsFragment : PreferenceFragmentCompat() {
|
||||
override fun onDisplayPreferenceDialog(preference: Preference) {
|
||||
var dialogFragment: DialogFragment? = null
|
||||
if (preference is ColorPreference) {
|
||||
dialogFragment = ColorPreferenceDialog((preference as ColorPreference?)!!)
|
||||
}
|
||||
if (dialogFragment != null) {
|
||||
dialogFragment.setTargetFragment(this, 0)
|
||||
dialogFragment.show(parentFragmentManager, "settings_fragment")
|
||||
} else {
|
||||
super.onDisplayPreferenceDialog(preference)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
setPreferencesFromResource(R.xml.root_preferences, rootKey)
|
||||
|
||||
|
@ -0,0 +1,186 @@
|
||||
package org.pixeldroid.app.settings
|
||||
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.content.res.TypedArray
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.util.AttributeSet
|
||||
import android.util.TypedValue
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.ImageView
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.preference.DialogPreference
|
||||
import androidx.preference.PreferenceDialogFragmentCompat
|
||||
import androidx.preference.PreferenceViewHolder
|
||||
import org.pixeldroid.app.R
|
||||
import org.pixeldroid.app.databinding.ColorDialogBinding
|
||||
import org.pixeldroid.app.databinding.ImageCarouselBinding
|
||||
|
||||
|
||||
/** AndroidX version created by yvolk@yurivolkov.com
|
||||
* based on this answer: https://stackoverflow.com/a/53290775/297710
|
||||
* and on the code of https://github.com/koji-1009/ChronoDialogPreference
|
||||
*/
|
||||
class ColorPreferenceDialog(preference: ColorPreference) :
|
||||
PreferenceDialogFragmentCompat() {
|
||||
private val preference: ColorPreference
|
||||
private var mPicker: ColorPickerView? = null
|
||||
|
||||
init {
|
||||
this.preference = preference
|
||||
val b = Bundle()
|
||||
b.putString(ARG_KEY, preference.key)
|
||||
arguments = b
|
||||
}
|
||||
|
||||
override fun onCreateDialogView(context: Context): View? {
|
||||
val picker = ColorPickerView(context)
|
||||
mPicker = picker
|
||||
return mPicker
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
val dialog: AlertDialog? = dialog as AlertDialog?
|
||||
if (preference.selectNoneButtonText != null && preference.defaultColor != null && mPicker != null && dialog != null) {
|
||||
// In order to prevent dialog from closing we setup its onLickListener this late
|
||||
dialog.getButton(DialogInterface.BUTTON_POSITIVE)?.setOnClickListener{
|
||||
mPicker?.setCurrentColor(preference.defaultColor!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPrepareDialogBuilder(builder: AlertDialog.Builder) {
|
||||
if (preference.selectNoneButtonText != null) {
|
||||
builder.setNeutralButton(preference.selectNoneButtonText, null)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDialogClosed(positiveResult: Boolean) {
|
||||
if (positiveResult) {
|
||||
val color: Int = mPicker!!.color
|
||||
if (preference.callChangeListener(color)) {
|
||||
preference.color = color
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ColorPreference constructor(context: Context, attrs: AttributeSet? = null) :
|
||||
DialogPreference(context, attrs) {
|
||||
var selectNoneButtonText: String? = null
|
||||
var defaultColor: Int? = null
|
||||
private var noneSelectedSummaryText: String? = null
|
||||
private val summaryText: CharSequence = super.getSummary()!!
|
||||
private var thumbnail: View? = null
|
||||
private val mPicker: ColorPickerView? = null
|
||||
|
||||
init {
|
||||
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(viewHolder: PreferenceViewHolder) {
|
||||
thumbnail = addThumbnail(viewHolder.itemView)
|
||||
showColor(persistedIntDefaultOrNull)
|
||||
// Only call after showColor sets any summary text:
|
||||
super.onBindViewHolder(viewHolder)
|
||||
}
|
||||
|
||||
override fun onGetDefaultValue(a: TypedArray, index: Int): Any? {
|
||||
defaultColor = readDefaultValue(a, index)
|
||||
return defaultColor
|
||||
}
|
||||
|
||||
override fun setDefaultValue(defaultValue: Any?) {
|
||||
super.setDefaultValue(defaultValue)
|
||||
defaultColor = parseDefaultValue(defaultValue)
|
||||
}
|
||||
|
||||
override fun onSetInitialValue(defaultValue: Any?) {
|
||||
color = defaultValue?.let {
|
||||
parseDefaultValue(defaultValue)
|
||||
} ?: color
|
||||
}
|
||||
|
||||
private fun addThumbnail(view: View): View {
|
||||
val widgetFrameView: LinearLayout = view.findViewById(android.R.id.widget_frame)
|
||||
widgetFrameView.visibility = View.VISIBLE
|
||||
widgetFrameView.removeAllViews()
|
||||
LayoutInflater.from(context).inflate(R.layout.color_preference_thumbnail, widgetFrameView)
|
||||
return widgetFrameView.findViewById(R.id.thumbnail)
|
||||
}
|
||||
|
||||
private val persistedIntDefaultOrNull: Int
|
||||
get() = if (shouldPersist() && sharedPreferences?.contains(key) == true)
|
||||
Integer.valueOf(getPersistedInt(Color.GRAY)) else defaultColor!!
|
||||
|
||||
private fun showColor(color: Int?) {
|
||||
val thumbColor = color ?: defaultColor
|
||||
thumbnail?.visibility = if (thumbColor == null) View.GONE else View.VISIBLE
|
||||
thumbnail?.findViewById<ImageView>(R.id.colorPreview)?.setBackgroundColor(thumbColor ?: 0)
|
||||
if (noneSelectedSummaryText != null) {
|
||||
summary = if (thumbColor == null) noneSelectedSummaryText else summaryText
|
||||
}
|
||||
}
|
||||
|
||||
private fun removeSetting() {
|
||||
if (shouldPersist()) {
|
||||
sharedPreferences
|
||||
?.edit()
|
||||
?.remove(key)
|
||||
?.apply()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var color: Int?
|
||||
get() = persistedIntDefaultOrNull
|
||||
set(color) {
|
||||
if (color == null) {
|
||||
removeSetting()
|
||||
} else {
|
||||
persistInt(color)
|
||||
}
|
||||
showColor(color)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private fun readDefaultValue(a: TypedArray, index: Int): Int? {
|
||||
if (a.peekValue(index) != null) {
|
||||
val type = a.peekValue(index).type
|
||||
if (type == TypedValue.TYPE_STRING) {
|
||||
return when(a.getString(index)){
|
||||
"default" -> 0
|
||||
"second" -> 1
|
||||
"third" -> 2
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
private fun parseDefaultValue(defaultValue: Any?): Int {
|
||||
return if (defaultValue == null) 0 else if (defaultValue is Int) defaultValue else 0
|
||||
}
|
||||
}
|
||||
}
|
||||
class ColorPickerView @JvmOverloads constructor(context: Context?, attrs: AttributeSet? = null) : FrameLayout(context!!, attrs) {
|
||||
var binding: ColorDialogBinding
|
||||
|
||||
fun setCurrentColor(defaultColor: Int) {
|
||||
Toast.makeText(context, "test $defaultColor", Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
init {
|
||||
binding = ColorDialogBinding.inflate(LayoutInflater.from(context),this, true)
|
||||
}
|
||||
/** Returns the color selected by the user */
|
||||
/** Sets the original color swatch and the current color to the specified value. */
|
||||
var color: Int = 1
|
||||
}
|
@ -2,6 +2,7 @@ package org.pixeldroid.app.utils
|
||||
|
||||
import android.app.Application
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.google.android.material.color.DynamicColors
|
||||
import org.pixeldroid.app.utils.di.*
|
||||
import com.mikepenz.iconics.Iconics
|
||||
import org.ligi.tracedroid.TraceDroid
|
||||
@ -26,6 +27,9 @@ class PixelDroidApplication: Application() {
|
||||
.aPIModule(APIModule())
|
||||
.build()
|
||||
mApplicationComponent.inject(this)
|
||||
|
||||
//TODO put condition depending on setting
|
||||
if(false) DynamicColors.applyToActivitiesIfAvailable(this)
|
||||
}
|
||||
|
||||
fun getAppComponent(): ApplicationComponent {
|
||||
|
5
app/src/main/res/drawable/notifications.xml
Normal file
5
app/src/main/res/drawable/notifications.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z"/>
|
||||
</vector>
|
5
app/src/main/res/drawable/outline_home.xml
Normal file
5
app/src/main/res/drawable/outline_home.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,5.69l5,4.5V18h-2v-6H9v6H7v-7.81l5,-4.5M12,3L2,12h3v8h6v-6h2v6h6v-8h3L12,3z"/>
|
||||
</vector>
|
5
app/src/main/res/drawable/outline_notifications.xml
Normal file
5
app/src/main/res/drawable/outline_notifications.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.9,2 2,2zM18,16v-5c0,-3.07 -1.63,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.64,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2zM16,17L8,17v-6c0,-2.48 1.51,-4.5 4,-4.5s4,2.02 4,4.5v6z"/>
|
||||
</vector>
|
5
app/src/main/res/drawable/outline_photo_camera.xml
Normal file
5
app/src/main/res/drawable/outline_photo_camera.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M14.12,4l1.83,2L20,6v12L4,18L4,6h4.05l1.83,-2h4.24M15,2L9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2zM12,9c1.65,0 3,1.35 3,3s-1.35,3 -3,3 -3,-1.35 -3,-3 1.35,-3 3,-3m0,-2c-2.76,0 -5,2.24 -5,5s2.24,5 5,5 5,-2.24 5,-5 -2.24,-5 -5,-5z"/>
|
||||
</vector>
|
5
app/src/main/res/drawable/selector_camera.xml
Normal file
5
app/src/main/res/drawable/selector_camera.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/photo_camera" android:state_checked="true"/>
|
||||
<item android:drawable="@drawable/outline_photo_camera" android:state_checked="false"/>
|
||||
</selector>
|
5
app/src/main/res/drawable/selector_home_feed.xml
Normal file
5
app/src/main/res/drawable/selector_home_feed.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/ic_home_white_24dp" android:state_checked="true"/>
|
||||
<item android:drawable="@drawable/outline_home" android:state_checked="false"/>
|
||||
</selector>
|
5
app/src/main/res/drawable/selector_notifications.xml
Normal file
5
app/src/main/res/drawable/selector_notifications.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/notifications" android:state_checked="true"/>
|
||||
<item android:drawable="@drawable/outline_notifications" android:state_checked="false"/>
|
||||
</selector>
|
@ -17,6 +17,7 @@
|
||||
android:id="@+id/main_activity_main_linear_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:orientation="horizontal"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
@ -27,27 +28,23 @@
|
||||
android:id="@+id/main_drawer_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/colorPrimaryTab"
|
||||
android:background="?attr/colorSurface"
|
||||
android:contentDescription="@string/open_drawer_menu"
|
||||
android:padding="12dp"
|
||||
android:src="@drawable/ic_baseline_menu_24" />
|
||||
|
||||
<com.google.android.material.tabs.TabLayout
|
||||
<com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
android:id="@+id/tabs"
|
||||
app:elevation="0dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:tabBackground="@color/colorPrimaryTab"
|
||||
app:tabGravity="fill"
|
||||
app:tabMaxWidth="0dp"
|
||||
app:tabMode="fixed"
|
||||
app:tabUnboundedRipple="false" />
|
||||
app:menu="@menu/bottom_navigation_main" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.viewpager2.widget.ViewPager2
|
||||
android:id="@+id/view_pager"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
|
||||
app:layout_constraintBottom_toTopOf="@+id/main_activity_main_linear_layout"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
@ -22,24 +22,24 @@
|
||||
android:id="@+id/upload_error_text_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#90000000"
|
||||
android:background="?attr/colorError"
|
||||
android:text="@string/media_upload_failed"
|
||||
android:textColor="@color/colorPrimaryError"
|
||||
android:textColor="?attr/colorOnError"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:drawableStartCompat="@drawable/cloud_off_24"
|
||||
app:drawableTint="@color/colorPrimaryError" />
|
||||
app:drawableTint="?attr/colorOnError" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/upload_error_text_explanation"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#90000000"
|
||||
android:background="?attr/colorError"
|
||||
tools:text="Error code returned by server: 413"
|
||||
android:textColor="@color/colorPrimaryError"
|
||||
android:textColor="?attr/colorOnError"
|
||||
android:textSize="20sp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
@ -96,10 +96,8 @@
|
||||
android:id="@+id/post_creation_send_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:backgroundTint="@color/colorButtonBg"
|
||||
android:enabled="true"
|
||||
android:text="@string/post"
|
||||
android:textColor="@color/colorButtonText"
|
||||
android:visibility="visible"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
@ -138,7 +136,7 @@
|
||||
android:paddingEnd="15dp"
|
||||
android:textColorHint="@color/colorPrimaryTab"
|
||||
app:errorEnabled="true"
|
||||
app:errorTextColor="@color/colorPrimaryError"
|
||||
app:errorTextColor="?attr/colorOnError"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/buttonConstraints"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
@ -40,20 +40,49 @@
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
|
||||
<com.mikepenz.iconics.view.IconicsButton
|
||||
<Button
|
||||
android:id="@+id/reportButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/report"
|
||||
android:textColor="@color/colorText"
|
||||
android:backgroundTint="@color/colorPrimary"
|
||||
app:iconGravity="end"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.75" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:id="@+id/reportSuccess"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.75"
|
||||
tools:visibility="visible">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/reportSuccessText"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:src="@drawable/check_circle_24"
|
||||
android:contentDescription="@string/reported" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/reportSuccessText"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:text="@string/reported"/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/reportProgressBar"
|
||||
style="?android:attr/progressBarStyle"
|
||||
|
68
app/src/main/res/layout/color_dialog.xml
Normal file
68
app/src/main/res/layout/color_dialog.xml
Normal file
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/theme1"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:scaleX="2"
|
||||
android:scaleY="2"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/theme2"
|
||||
app:srcCompat="@drawable/circle_black_24dp"
|
||||
app:tint="@color/seed" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/theme2"
|
||||
android:scaleX="2"
|
||||
android:scaleY="2"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
app:layout_constraintStart_toEndOf="@+id/theme1"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/theme3"
|
||||
app:srcCompat="@drawable/circle_black_24dp"
|
||||
app:tint="@color/seed2" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/theme3"
|
||||
android:scaleX="2"
|
||||
android:scaleY="2"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
app:layout_constraintStart_toEndOf="@+id/theme2"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/theme4"
|
||||
app:srcCompat="@drawable/circle_black_24dp"
|
||||
app:tint="@color/seed" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/theme4"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:scaleX="2"
|
||||
android:scaleY="2"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/theme3"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:srcCompat="@drawable/circle_black_24dp"
|
||||
app:tint="@color/seed" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
16
app/src/main/res/layout/color_preference_thumbnail.xml
Normal file
16
app/src/main/res/layout/color_preference_thumbnail.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout android:id="@+id/thumbnail"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="42dp"
|
||||
android:layout_height="42dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/colorPreview"
|
||||
android:layout_margin="1dp"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:src="@drawable/circle_black_24dp"
|
||||
app:tint="@color/seed" />
|
||||
|
||||
</FrameLayout>
|
28
app/src/main/res/menu/bottom_navigation_main.xml
Normal file
28
app/src/main/res/menu/bottom_navigation_main.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@+id/page_1"
|
||||
android:enabled="true"
|
||||
android:icon="@drawable/selector_home_feed"
|
||||
android:title="@string/home_feed"/>
|
||||
<item
|
||||
android:id="@+id/page_2"
|
||||
android:enabled="true"
|
||||
android:icon="@drawable/ic_search_white_24dp"
|
||||
android:title="@string/search_discover_feed"/>
|
||||
<item
|
||||
android:id="@+id/page_3"
|
||||
android:enabled="true"
|
||||
android:icon="@drawable/selector_camera"
|
||||
android:title="@string/create_feed"/>
|
||||
<item
|
||||
android:id="@+id/page_4"
|
||||
android:enabled="true"
|
||||
android:icon="@drawable/selector_notifications"
|
||||
android:title="@string/notifications_feed"/>
|
||||
<item
|
||||
android:id="@+id/page_5"
|
||||
android:enabled="true"
|
||||
android:icon="@drawable/ic_filter_black_24dp"
|
||||
android:title="@string/public_feed"/>
|
||||
</menu>
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#FFFFFF</color>
|
||||
<color name="colorPrimaryTab">#6200EE</color>
|
||||
<color name="colorPrimaryTab">#f4a261</color>
|
||||
|
||||
<color name="colorText">#000000</color>
|
||||
<color name="colorDrawing">#FFFFFF</color>
|
||||
|
62
app/src/main/res/values-night/styles.xml
Normal file
62
app/src/main/res/values-night/styles.xml
Normal file
@ -0,0 +1,62 @@
|
||||
|
||||
<resources>
|
||||
<style name="AppTheme" parent="Theme.Material3.Dark">
|
||||
<item name="colorPrimary">@color/md_theme_dark_primary</item>
|
||||
<item name="colorOnPrimary">@color/md_theme_dark_onPrimary</item>
|
||||
<item name="colorPrimaryContainer">@color/md_theme_dark_primaryContainer</item>
|
||||
<item name="colorOnPrimaryContainer">@color/md_theme_dark_onPrimaryContainer</item>
|
||||
<item name="colorSecondary">@color/md_theme_dark_secondary</item>
|
||||
<item name="colorOnSecondary">@color/md_theme_dark_onSecondary</item>
|
||||
<item name="colorSecondaryContainer">@color/md_theme_dark_secondaryContainer</item>
|
||||
<item name="colorOnSecondaryContainer">@color/md_theme_dark_onSecondaryContainer</item>
|
||||
<item name="colorTertiary">@color/md_theme_dark_tertiary</item>
|
||||
<item name="colorOnTertiary">@color/md_theme_dark_onTertiary</item>
|
||||
<item name="colorTertiaryContainer">@color/md_theme_dark_tertiaryContainer</item>
|
||||
<item name="colorOnTertiaryContainer">@color/md_theme_dark_onTertiaryContainer</item>
|
||||
<item name="colorError">@color/md_theme_dark_error</item>
|
||||
<item name="colorErrorContainer">@color/md_theme_dark_errorContainer</item>
|
||||
<item name="colorOnError">@color/md_theme_dark_onError</item>
|
||||
<item name="colorOnErrorContainer">@color/md_theme_dark_onErrorContainer</item>
|
||||
<item name="android:colorBackground">@color/md_theme_dark_background</item>
|
||||
<item name="colorOnBackground">@color/md_theme_dark_onBackground</item>
|
||||
<item name="colorSurface">@color/md_theme_dark_surface</item>
|
||||
<item name="colorOnSurface">@color/md_theme_dark_onSurface</item>
|
||||
<item name="colorSurfaceVariant">@color/md_theme_dark_surfaceVariant</item>
|
||||
<item name="colorOnSurfaceVariant">@color/md_theme_dark_onSurfaceVariant</item>
|
||||
<item name="colorOutline">@color/md_theme_dark_outline</item>
|
||||
<item name="colorOnSurfaceInverse">@color/md_theme_dark_inverseOnSurface</item>
|
||||
<item name="colorSurfaceInverse">@color/md_theme_dark_inverseSurface</item>
|
||||
<item name="elevationOverlayColor">@color/md_theme_dark_surfaceTint</item>
|
||||
<item name="colorPrimaryInverse">@color/md_theme_dark_inversePrimary</item>
|
||||
</style>
|
||||
<style name="AppTheme2" parent="Theme.Material3.Dark.NoActionBar">
|
||||
<item name="colorPrimary">@color/md_theme_dark_primary2</item>
|
||||
<item name="colorOnPrimary">@color/md_theme_dark_onPrimary2</item>
|
||||
<item name="colorPrimaryContainer">@color/md_theme_dark_primaryContainer2</item>
|
||||
<item name="colorOnPrimaryContainer">@color/md_theme_dark_onPrimaryContainer2</item>
|
||||
<item name="colorSecondary">@color/md_theme_dark_secondary2</item>
|
||||
<item name="colorOnSecondary">@color/md_theme_dark_onSecondary2</item>
|
||||
<item name="colorSecondaryContainer">@color/md_theme_dark_secondaryContainer2</item>
|
||||
<item name="colorOnSecondaryContainer">@color/md_theme_dark_onSecondaryContainer2</item>
|
||||
<item name="colorTertiary">@color/md_theme_dark_tertiary2</item>
|
||||
<item name="colorOnTertiary">@color/md_theme_dark_onTertiary2</item>
|
||||
<item name="colorTertiaryContainer">@color/md_theme_dark_tertiaryContainer2</item>
|
||||
<item name="colorOnTertiaryContainer">@color/md_theme_dark_onTertiaryContainer2</item>
|
||||
<item name="colorError">@color/md_theme_dark_error2</item>
|
||||
<item name="colorOnError">@color/md_theme_dark_onError2</item>
|
||||
<item name="colorErrorContainer">@color/md_theme_dark_errorContainer2</item>
|
||||
<item name="colorOnErrorContainer">@color/md_theme_dark_onErrorContainer2</item>
|
||||
<item name="android:colorBackground">@color/md_theme_dark_background2</item>
|
||||
<item name="colorOnBackground">@color/md_theme_dark_onBackground2</item>
|
||||
<item name="colorSurface">@color/md_theme_dark_surface2</item>
|
||||
<item name="colorOnSurface">@color/md_theme_dark_onSurface2</item>
|
||||
<item name="colorSurfaceVariant">@color/md_theme_dark_surfaceVariant2</item>
|
||||
<item name="colorOnSurfaceVariant">@color/md_theme_dark_onSurfaceVariant2</item>
|
||||
<item name="colorOutline">@color/md_theme_dark_outline2</item>
|
||||
<item name="colorSurfaceInverse">@color/md_theme_dark_inverseSurface2</item>
|
||||
<item name="colorOnSurfaceInverse">@color/md_theme_dark_inverseOnSurface2</item>
|
||||
<item name="elevationOverlayColor">@color/md_theme_dark_surfaceTint2</item>
|
||||
<item name="colorPrimaryInverse">@color/md_theme_dark_inversePrimary2</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
@ -1,14 +1,140 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#6200EE</color>
|
||||
<color name="seed">#f4a261</color>
|
||||
<color name="md_theme_light_primary">#924C00</color>
|
||||
<color name="md_theme_light_onPrimary">#FFFFFF</color>
|
||||
<color name="md_theme_light_primaryContainer">#FFDCC4</color>
|
||||
<color name="md_theme_light_onPrimaryContainer">#2F1400</color>
|
||||
<color name="md_theme_light_secondary">#745945</color>
|
||||
<color name="md_theme_light_onSecondary">#FFFFFF</color>
|
||||
<color name="md_theme_light_secondaryContainer">#FFDCC4</color>
|
||||
<color name="md_theme_light_onSecondaryContainer">#2A1707</color>
|
||||
<color name="md_theme_light_tertiary">#5D6136</color>
|
||||
<color name="md_theme_light_onTertiary">#FFFFFF</color>
|
||||
<color name="md_theme_light_tertiaryContainer">#E3E7AF</color>
|
||||
<color name="md_theme_light_onTertiaryContainer">#1A1D00</color>
|
||||
<color name="md_theme_light_error">#BA1A1A</color>
|
||||
<color name="md_theme_light_errorContainer">#FFDAD6</color>
|
||||
<color name="md_theme_light_onError">#FFFFFF</color>
|
||||
<color name="md_theme_light_onErrorContainer">#410002</color>
|
||||
<color name="md_theme_light_background">#FFFBFF</color>
|
||||
<color name="md_theme_light_onBackground">#201A17</color>
|
||||
<color name="md_theme_light_surface">#FFFBFF</color>
|
||||
<color name="md_theme_light_onSurface">#201A17</color>
|
||||
<color name="md_theme_light_surfaceVariant">#F3DFD2</color>
|
||||
<color name="md_theme_light_onSurfaceVariant">#52443B</color>
|
||||
<color name="md_theme_light_outline">#84746A</color>
|
||||
<color name="md_theme_light_inverseOnSurface">#FBEEE8</color>
|
||||
<color name="md_theme_light_inverseSurface">#362F2B</color>
|
||||
<color name="md_theme_light_inversePrimary">#FFB780</color>
|
||||
<color name="md_theme_light_shadow">#000000</color>
|
||||
<color name="md_theme_light_surfaceTint">#924C00</color>
|
||||
<color name="md_theme_light_surfaceTintColor">#924C00</color>
|
||||
|
||||
<color name="md_theme_dark_primary">#FFB780</color>
|
||||
<color name="md_theme_dark_onPrimary">#4E2600</color>
|
||||
<color name="md_theme_dark_primaryContainer">#6F3800</color>
|
||||
<color name="md_theme_dark_onPrimaryContainer">#FFDCC4</color>
|
||||
<color name="md_theme_dark_secondary">#E4BFA7</color>
|
||||
<color name="md_theme_dark_onSecondary">#422B1A</color>
|
||||
<color name="md_theme_dark_secondaryContainer">#5B412F</color>
|
||||
<color name="md_theme_dark_onSecondaryContainer">#FFDCC4</color>
|
||||
<color name="md_theme_dark_tertiary">#C6CA95</color>
|
||||
<color name="md_theme_dark_onTertiary">#2F330C</color>
|
||||
<color name="md_theme_dark_tertiaryContainer">#464A20</color>
|
||||
<color name="md_theme_dark_onTertiaryContainer">#E3E7AF</color>
|
||||
<color name="md_theme_dark_error">#FFB4AB</color>
|
||||
<color name="md_theme_dark_errorContainer">#93000A</color>
|
||||
<color name="md_theme_dark_onError">#690005</color>
|
||||
<color name="md_theme_dark_onErrorContainer">#FFDAD6</color>
|
||||
<color name="md_theme_dark_background">#201A17</color>
|
||||
<color name="md_theme_dark_onBackground">#ECE0DA</color>
|
||||
<color name="md_theme_dark_surface">#201A17</color>
|
||||
<color name="md_theme_dark_onSurface">#ECE0DA</color>
|
||||
<color name="md_theme_dark_surfaceVariant">#52443B</color>
|
||||
<color name="md_theme_dark_onSurfaceVariant">#D6C3B7</color>
|
||||
<color name="md_theme_dark_outline">#9F8D82</color>
|
||||
<color name="md_theme_dark_inverseOnSurface">#201A17</color>
|
||||
<color name="md_theme_dark_inverseSurface">#ECE0DA</color>
|
||||
<color name="md_theme_dark_inversePrimary">#924C00</color>
|
||||
<color name="md_theme_dark_shadow">#000000</color>
|
||||
<color name="md_theme_dark_surfaceTint">#FFB780</color>
|
||||
<color name="md_theme_dark_surfaceTintColor">#FFB780</color>
|
||||
|
||||
|
||||
<color name="seed2">#4285F4</color>
|
||||
<color name="md_theme_light_primary2">#005AC1</color>
|
||||
<color name="md_theme_light_onPrimary2">#FFFFFF</color>
|
||||
<color name="md_theme_light_primaryContainer2">#D8E2FF</color>
|
||||
<color name="md_theme_light_onPrimaryContainer2">#001A41</color>
|
||||
<color name="md_theme_light_secondary2">#535E78</color>
|
||||
<color name="md_theme_light_onSecondary2">#FFFFFF</color>
|
||||
<color name="md_theme_light_secondaryContainer2">#D8E2FF</color>
|
||||
<color name="md_theme_light_onSecondaryContainer2">#0F1B32</color>
|
||||
<color name="md_theme_light_tertiary2">#76517B</color>
|
||||
<color name="md_theme_light_onTertiary2">#FFFFFF</color>
|
||||
<color name="md_theme_light_tertiaryContainer2">#FED6FF</color>
|
||||
<color name="md_theme_light_onTertiaryContainer2">#2D0E34</color>
|
||||
<color name="md_theme_light_error2">#BA1A1A</color>
|
||||
<color name="md_theme_light_onError2">#FFFFFF</color>
|
||||
<color name="md_theme_light_errorContainer2">#FFDAD6</color>
|
||||
<color name="md_theme_light_onErrorContainer2">#410002</color>
|
||||
<color name="md_theme_light_background2">#FEFBFF</color>
|
||||
<color name="md_theme_light_onBackground2">#1B1B1F</color>
|
||||
<color name="md_theme_light_surface2">#FEFBFF</color>
|
||||
<color name="md_theme_light_onSurface2">#1B1B1F</color>
|
||||
<color name="md_theme_light_surfaceVariant2">#E1E2EC</color>
|
||||
<color name="md_theme_light_onSurfaceVariant2">#44474F</color>
|
||||
<color name="md_theme_light_outline2">#74777F</color>
|
||||
<color name="md_theme_light_shadow2">#000000</color>
|
||||
<color name="md_theme_light_inverseSurface2">#303033</color>
|
||||
<color name="md_theme_light_inverseOnSurface2">#F2F0F4</color>
|
||||
<color name="md_theme_light_inversePrimary2">#ADC6FF</color>
|
||||
<color name="md_theme_light_surfaceTint2">#005AC1</color>
|
||||
<color name="md_theme_light_surfaceTintColor2">#005AC1</color>
|
||||
<color name="md_theme_dark_primary2">#ADC6FF</color>
|
||||
<color name="md_theme_dark_onPrimary2">#002E69</color>
|
||||
<color name="md_theme_dark_primaryContainer2">#004494</color>
|
||||
<color name="md_theme_dark_onPrimaryContainer2">#D8E2FF</color>
|
||||
<color name="md_theme_dark_secondary2">#BBC6E4</color>
|
||||
<color name="md_theme_dark_onSecondary2">#253048</color>
|
||||
<color name="md_theme_dark_secondaryContainer2">#3B475F</color>
|
||||
<color name="md_theme_dark_onSecondaryContainer2">#D8E2FF</color>
|
||||
<color name="md_theme_dark_tertiary2">#E5B8E8</color>
|
||||
<color name="md_theme_dark_onTertiary2">#44244A</color>
|
||||
<color name="md_theme_dark_tertiaryContainer2">#5D3A62</color>
|
||||
<color name="md_theme_dark_onTertiaryContainer2">#FED6FF</color>
|
||||
<color name="md_theme_dark_error2">#FFB4AB</color>
|
||||
<color name="md_theme_dark_onError2">#690005</color>
|
||||
<color name="md_theme_dark_errorContainer2">#93000A</color>
|
||||
<color name="md_theme_dark_onErrorContainer2">#FFB4AB</color>
|
||||
<color name="md_theme_dark_background2">#1B1B1F</color>
|
||||
<color name="md_theme_dark_onBackground2">#E3E2E6</color>
|
||||
<color name="md_theme_dark_surface2">#1B1B1F</color>
|
||||
<color name="md_theme_dark_onSurface2">#E3E2E6</color>
|
||||
<color name="md_theme_dark_surfaceVariant2">#44474F</color>
|
||||
<color name="md_theme_dark_onSurfaceVariant2">#C4C6D0</color>
|
||||
<color name="md_theme_dark_outline2">#8E9099</color>
|
||||
<color name="md_theme_dark_shadow2">#000000</color>
|
||||
<color name="md_theme_dark_inverseSurface2">#E3E2E6</color>
|
||||
<color name="md_theme_dark_inverseOnSurface2">#303033</color>
|
||||
<color name="md_theme_dark_inversePrimary2">#005AC1</color>
|
||||
<color name="md_theme_dark_surfaceTint2">#ADC6FF</color>
|
||||
<color name="md_theme_dark_surfaceTintColor2">#ADC6FF</color>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<color name="colorPrimary">#2a9d8f</color>
|
||||
<color name="colorPrimaryTab">#FFFFFF</color>
|
||||
<color name="colorPrimaryActionBar">#6200EE</color>
|
||||
<color name="colorPrimaryDark">#3700B3</color>
|
||||
<color name="colorAccent">#03DAC5</color>
|
||||
<color name="colorPrimaryActionBar">#e9c46a</color>
|
||||
<color name="colorPrimaryDark">#264653</color>
|
||||
<color name="colorAccent">#e9c46a</color>
|
||||
<color name="icActive">#FFFFFFFF</color>
|
||||
<color name="icFocused">#DDFFFFFF</color>
|
||||
<color name="icPressed">#AAFFFFFF</color>
|
||||
<color name="colorButtonBg">#6200EE</color>
|
||||
<color name="colorButtonBg">#f4a261</color>
|
||||
<color name="colorButtonText">#FFFFFF</color>
|
||||
<color name="filterLabelNormal">#8A8889</color>
|
||||
<color name="filterLabelSelected">#221F20</color>
|
||||
|
@ -212,9 +212,9 @@ For more info about Pixelfed, you can check here: https://pixelfed.org"</string>
|
||||
<string name="hashtags">HASHTAGS</string>
|
||||
<!-- Sensitive media -->
|
||||
<string name="cw_nsfw_hidden_media_n_click_to_show">CW / NSFW / Hidden Media\n (click to show)</string>
|
||||
<!-- Shown when image has finished uploading. {gmd_cloud_done} is an icon, position it as is appropriate in target language -->
|
||||
<!-- Shown when image has finished uploading.-->
|
||||
<string name="media_upload_completed">Media upload completed</string>
|
||||
<!-- Shown when image uploading has failed. {gmd_cloud_off} is an icon, position it as is appropriate in target language -->
|
||||
<!-- Shown when image uploading has failed.-->
|
||||
<string name="media_upload_failed">Media upload failed, try again or check network conditions</string>
|
||||
<string name="posting_image_accessibility_hint">Image that is being posted</string>
|
||||
<string name="retry">Retry</string>
|
||||
@ -234,8 +234,7 @@ For more info about Pixelfed, you can check here: https://pixelfed.org"</string>
|
||||
<string name="share_link">Share Link</string>
|
||||
<string name="optional_report_comment">Optional message for mods/admins</string>
|
||||
<string name="report_target">Report @%1$s\'s post</string>
|
||||
<!-- Text on button, shown when report was successful. {gmd_check_circle} is an icon, position it as is appropriate in target language -->
|
||||
<string name="reported">Reported {gmd_check_circle}</string>
|
||||
<string name="reported">Post reported</string>
|
||||
<string name="report_error">Could not send report</string>
|
||||
<string name="toolbar_title_edit">Edit</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
@ -274,4 +273,9 @@ For more info about Pixelfed, you can check here: https://pixelfed.org"</string>
|
||||
<string name="new_post_shortcut_short">New post</string>
|
||||
<string name="follow_request">%1$s requests to follow you</string>
|
||||
<string name="status_notification">%1$s created a post</string>
|
||||
<string name="home_feed">Home</string>
|
||||
<string name="search_discover_feed">Search</string>
|
||||
<string name="create_feed">Create</string>
|
||||
<string name="notifications_feed">Updates</string>
|
||||
<string name="public_feed">Public</string>
|
||||
</resources>
|
@ -1,25 +1,11 @@
|
||||
<resources>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
<item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
|
||||
</style>
|
||||
<style name="AppTheme.Launcher">
|
||||
<item name="android:windowBackground">@drawable/theme</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
|
||||
|
||||
<style name="posts_title">
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_marginBottom">8dp</item>
|
||||
<item name="android:paddingLeft">8dp</item>
|
||||
<item name="android:background">@android:color/holo_orange_light</item>
|
||||
<item name="android:textAppearance">@android:style/TextAppearance.Large</item>
|
||||
</style>
|
||||
<style name="AppTheme.PopupOverlay" parent="Theme.Material3.Light" />
|
||||
|
||||
<style name="AppTheme.ActionBar.Transparent" parent="AppTheme">
|
||||
<item name="colorPrimary">@android:color/transparent</item>
|
||||
@ -38,4 +24,67 @@
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
</style>
|
||||
|
||||
|
||||
<style name="AppTheme" parent="Theme.Material3.Light">
|
||||
<item name="materialDrawerStyle">@style/Widget.MaterialDrawerStyle</item>
|
||||
<item name="materialDrawerHeaderStyle">@style/Widget.MaterialDrawerHeaderStyle</item>
|
||||
<item name="colorPrimary">@color/md_theme_light_primary</item>
|
||||
<item name="colorOnPrimary">@color/md_theme_light_onPrimary</item>
|
||||
<item name="colorPrimaryContainer">@color/md_theme_light_primaryContainer</item>
|
||||
<item name="colorOnPrimaryContainer">@color/md_theme_light_onPrimaryContainer</item>
|
||||
<item name="colorSecondary">@color/md_theme_light_secondary</item>
|
||||
<item name="colorOnSecondary">@color/md_theme_light_onSecondary</item>
|
||||
<item name="colorSecondaryContainer">@color/md_theme_light_secondaryContainer</item>
|
||||
<item name="colorOnSecondaryContainer">@color/md_theme_light_onSecondaryContainer</item>
|
||||
<item name="colorTertiary">@color/md_theme_light_tertiary</item>
|
||||
<item name="colorOnTertiary">@color/md_theme_light_onTertiary</item>
|
||||
<item name="colorTertiaryContainer">@color/md_theme_light_tertiaryContainer</item>
|
||||
<item name="colorOnTertiaryContainer">@color/md_theme_light_onTertiaryContainer</item>
|
||||
<item name="colorError">@color/md_theme_light_error</item>
|
||||
<item name="colorErrorContainer">@color/md_theme_light_errorContainer</item>
|
||||
<item name="colorOnError">@color/md_theme_light_onError</item>
|
||||
<item name="colorOnErrorContainer">@color/md_theme_light_onErrorContainer</item>
|
||||
<item name="android:colorBackground">@color/md_theme_light_background</item>
|
||||
<item name="colorOnBackground">@color/md_theme_light_onBackground</item>
|
||||
<item name="colorSurface">@color/md_theme_light_surface</item>
|
||||
<item name="colorOnSurface">@color/md_theme_light_onSurface</item>
|
||||
<item name="colorSurfaceVariant">@color/md_theme_light_surfaceVariant</item>
|
||||
<item name="colorOnSurfaceVariant">@color/md_theme_light_onSurfaceVariant</item>
|
||||
<item name="colorOutline">@color/md_theme_light_outline</item>
|
||||
<item name="colorOnSurfaceInverse">@color/md_theme_light_inverseOnSurface</item>
|
||||
<item name="colorSurfaceInverse">@color/md_theme_light_inverseSurface</item>
|
||||
<item name="elevationOverlayColor">@color/md_theme_light_surfaceTint</item>
|
||||
<item name="colorPrimaryInverse">@color/md_theme_light_inversePrimary</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme2" parent="Theme.Material3.Light.NoActionBar">
|
||||
<item name="colorPrimary">@color/md_theme_light_primary2</item>
|
||||
<item name="colorOnPrimary">@color/md_theme_light_onPrimary2</item>
|
||||
<item name="colorPrimaryContainer">@color/md_theme_light_primaryContainer2</item>
|
||||
<item name="colorOnPrimaryContainer">@color/md_theme_light_onPrimaryContainer2</item>
|
||||
<item name="colorSecondary">@color/md_theme_light_secondary2</item>
|
||||
<item name="colorOnSecondary">@color/md_theme_light_onSecondary2</item>
|
||||
<item name="colorSecondaryContainer">@color/md_theme_light_secondaryContainer2</item>
|
||||
<item name="colorOnSecondaryContainer">@color/md_theme_light_onSecondaryContainer2</item>
|
||||
<item name="colorTertiary">@color/md_theme_light_tertiary2</item>
|
||||
<item name="colorOnTertiary">@color/md_theme_light_onTertiary2</item>
|
||||
<item name="colorTertiaryContainer">@color/md_theme_light_tertiaryContainer2</item>
|
||||
<item name="colorOnTertiaryContainer">@color/md_theme_light_onTertiaryContainer2</item>
|
||||
<item name="colorError">@color/md_theme_light_error2</item>
|
||||
<item name="colorOnError">@color/md_theme_light_onError2</item>
|
||||
<item name="colorErrorContainer">@color/md_theme_light_errorContainer2</item>
|
||||
<item name="colorOnErrorContainer">@color/md_theme_light_onErrorContainer2</item>
|
||||
<item name="android:colorBackground">@color/md_theme_light_background2</item>
|
||||
<item name="colorOnBackground">@color/md_theme_light_onBackground2</item>
|
||||
<item name="colorSurface">@color/md_theme_light_surface2</item>
|
||||
<item name="colorOnSurface">@color/md_theme_light_onSurface2</item>
|
||||
<item name="colorSurfaceVariant">@color/md_theme_light_surfaceVariant2</item>
|
||||
<item name="colorOnSurfaceVariant">@color/md_theme_light_onSurfaceVariant2</item>
|
||||
<item name="colorOutline">@color/md_theme_light_outline2</item>
|
||||
<item name="colorSurfaceInverse">@color/md_theme_light_inverseSurface2</item>
|
||||
<item name="colorOnSurfaceInverse">@color/md_theme_light_inverseOnSurface2</item>
|
||||
<item name="elevationOverlayColor">@color/md_theme_light_surfaceTint2</item>
|
||||
<item name="colorPrimaryInverse">@color/md_theme_light_inversePrimary2</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
@ -10,6 +10,12 @@
|
||||
app:title="@string/theme_title"
|
||||
app:useSimpleSummaryProvider="true"
|
||||
app:icon="@drawable/palette_black_24dp"/>
|
||||
|
||||
<org.pixeldroid.app.settings.ColorPreference
|
||||
android:title="Color theme"
|
||||
android:key="themeColor"
|
||||
android:defaultValue="default"
|
||||
android:summary="Choose a color theme" />
|
||||
</PreferenceCategory>
|
||||
|
||||
<ListPreference
|
||||
|
@ -1,7 +1,7 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.6.21'
|
||||
ext.kotlin_version = '1.7.0'
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
|
Loading…
x
Reference in New Issue
Block a user