diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..98b20371 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,19 @@ +If you want to contribute to PixelDroid, you can do so in several ways: + +# Translation + +You can help to translate PixelDroid to your favourite language. Please do not submit Merge Requests directly, but use our weblate at https://weblate.pixeldroid.org/projects/pixeldroid/pixeldroid/ . + +You can add a new language by using the "Start new translation" button on the bottom left of the page. + +Before translating, please take a look at the [TRANSLATION.md](TRANSLATION.md) file for details and some guidance. + +# Creating issues on the issue tracker + +If you encounter a problem or have an idea about how to make PixelDroid better, you should make an issue about it on our [GitLab project](https://gitlab.shinice.net/pixeldroid/PixelDroid/-/issues). If you encountered a problem, please make sure to document how to reproduce it, and include screenshots if possible. If you are making a suggestion, please try to be detailed in your description. + +# Contribute changes or fix bugs + +You can also help us solve one of the existing issues, or improve the application in some other way, by contributing changes yourself. To do this you can fork the project and submit a Merge Request. + +Before starting to work on an issue or an improvement, you can ask us on our Matrix channel (#pixeldroid:gnugen.ch) what we think, or make a comment on the relevant issue, so that we might point you in the right direction, and to make sure someone else is not already working on it. \ No newline at end of file diff --git a/TRANSLATION.md b/TRANSLATION.md new file mode 100644 index 00000000..db890e6e --- /dev/null +++ b/TRANSLATION.md @@ -0,0 +1,15 @@ +# Register on our Weblate instance + +Sign up on our instance and go to the PixelDroid project here: https://weblate.pixeldroid.org/projects/pixeldroid/pixeldroid/ + +No need to specify your real name, obviously, unless you want to. + +# Start translating + +Go to the project's page ( https://weblate.pixeldroid.org/projects/pixeldroid/pixeldroid ). Click on the language you want to work with (for example, Catalan would be at https://weblate.pixeldroid.org/projects/pixeldroid/pixeldroid/ca/ ). Then click the "Translate" button on the right. You can then edit the missing translations and review existing ones. + +For more details, you can check out Weblate's documentation: https://docs.weblate.org/en/latest/user/translating.html + +## Glossaries + +When translating something containing a term specific to Pixelfed, PixelDroid, or the fediverse in general, be sure to add the items to the glossary of the language you are translating to, this helps to keep translating consistent. When translating, make sure to check the glossary to use the proper terms, and if you change an entry in the glossary make sure to also edit the entries containing that term. \ No newline at end of file diff --git a/app/src/main/java/com/h/pixeldroid/AboutActivity.kt b/app/src/main/java/com/h/pixeldroid/AboutActivity.kt index 98f1268b..3ad0cd1e 100644 --- a/app/src/main/java/com/h/pixeldroid/AboutActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/AboutActivity.kt @@ -2,10 +2,9 @@ package com.h.pixeldroid import android.content.Intent import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_about.* -class AboutActivity : AppCompatActivity() { +class AboutActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_about) diff --git a/app/src/main/java/com/h/pixeldroid/BaseActivity.kt b/app/src/main/java/com/h/pixeldroid/BaseActivity.kt new file mode 100644 index 00000000..c02fc558 --- /dev/null +++ b/app/src/main/java/com/h/pixeldroid/BaseActivity.kt @@ -0,0 +1,58 @@ +package com.h.pixeldroid + +import android.content.Context +import android.content.res.Configuration +import android.content.res.Resources +import android.os.Build +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.preference.PreferenceManager +import com.h.pixeldroid.db.AppDatabase +import com.h.pixeldroid.di.PixelfedAPIHolder +import java.util.* +import javax.inject.Inject + +open class BaseActivity : AppCompatActivity() { + + @Inject + lateinit var db: AppDatabase + @Inject + lateinit var apiHolder: PixelfedAPIHolder + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (this.application as Pixeldroid).getAppComponent().inject(this) + } + + override fun attachBaseContext(base: Context) { + super.attachBaseContext(updateBaseContextLocale(base)) + } + + private fun updateBaseContextLocale(context: Context): Context { + val language = PreferenceManager.getDefaultSharedPreferences(context).getString("language", "default") ?: "default" + if(language == "default"){ + return context + } + val locale = Locale.forLanguageTag(language) + Locale.setDefault(locale) + return if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) { + updateResourcesLocale(context, locale) + } else updateResourcesLocaleLegacy(context, locale) + } + + private fun updateResourcesLocale(context: Context, locale: Locale): Context = + context.createConfigurationContext( + Configuration(context.resources.configuration) + .apply { setLocale(locale) } + ) + + @Suppress("DEPRECATION") + private fun updateResourcesLocaleLegacy(context: Context, locale: Locale): Context { + val resources: Resources = context.resources + val configuration: Configuration = resources.configuration + configuration.locale = locale + resources.updateConfiguration(configuration, resources.displayMetrics) + return context + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/h/pixeldroid/CameraActivity.kt b/app/src/main/java/com/h/pixeldroid/CameraActivity.kt index 027aae4c..fd12ece6 100644 --- a/app/src/main/java/com/h/pixeldroid/CameraActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/CameraActivity.kt @@ -1,10 +1,9 @@ package com.h.pixeldroid import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity import com.h.pixeldroid.fragments.CameraFragment -class CameraActivity : AppCompatActivity() { +class CameraActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_camera) diff --git a/app/src/main/java/com/h/pixeldroid/FollowsActivity.kt b/app/src/main/java/com/h/pixeldroid/FollowsActivity.kt index 7ea31459..6d2e0f1b 100644 --- a/app/src/main/java/com/h/pixeldroid/FollowsActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/FollowsActivity.kt @@ -1,25 +1,19 @@ package com.h.pixeldroid import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.fragments.feeds.uncachedFeeds.accountLists.AccountListFragment import com.h.pixeldroid.objects.Account import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_ID_TAG import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_TAG import com.h.pixeldroid.objects.Account.Companion.FOLLOWERS_TAG -import javax.inject.Inject -class FollowsActivity : AppCompatActivity() { +class FollowsActivity : BaseActivity() { private var followsFragment = AccountListFragment() - @Inject - lateinit var db: AppDatabase override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_followers) - (this.application as Pixeldroid).getAppComponent().inject(this) supportActionBar?.setDisplayHomeAsUpEnabled(true) diff --git a/app/src/main/java/com/h/pixeldroid/LicenseActivity.kt b/app/src/main/java/com/h/pixeldroid/LicenseActivity.kt index 6900d2dc..58c9d967 100644 --- a/app/src/main/java/com/h/pixeldroid/LicenseActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/LicenseActivity.kt @@ -1,11 +1,10 @@ package com.h.pixeldroid import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_licenses.* -class LicenseActivity : AppCompatActivity() { +class LicenseActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_licenses) diff --git a/app/src/main/java/com/h/pixeldroid/LoginActivity.kt b/app/src/main/java/com/h/pixeldroid/LoginActivity.kt index af3cd7f3..f87a05cc 100644 --- a/app/src/main/java/com/h/pixeldroid/LoginActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/LoginActivity.kt @@ -10,11 +10,8 @@ import android.os.Bundle import android.util.Log import android.view.View import android.view.inputmethod.InputMethodManager -import androidx.appcompat.app.AppCompatActivity import androidx.browser.customtabs.CustomTabsIntent import com.h.pixeldroid.api.PixelfedAPI -import com.h.pixeldroid.db.AppDatabase -import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.objects.* import com.h.pixeldroid.utils.DBUtils import com.h.pixeldroid.utils.Utils @@ -30,7 +27,6 @@ import okhttp3.HttpUrl import retrofit2.Call import retrofit2.Callback import retrofit2.Response -import javax.inject.Inject /** Overview of the flow of the login process: (boxes are requests done in parallel, @@ -48,7 +44,7 @@ since they do not depend on each other) */ -class LoginActivity : AppCompatActivity() { +class LoginActivity : BaseActivity() { companion object { private const val PACKAGE_ID = BuildConfig.APPLICATION_ID @@ -58,11 +54,6 @@ class LoginActivity : AppCompatActivity() { private lateinit var oauthScheme: String private lateinit var appName: String private lateinit var preferences: SharedPreferences - @Inject - lateinit var db: AppDatabase - - @Inject - lateinit var apiHolder: PixelfedAPIHolder private lateinit var pixelfedAPI: PixelfedAPI private var inputVisibility: Int = View.GONE @@ -71,7 +62,6 @@ class LoginActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) - (application as Pixeldroid).getAppComponent().inject(this) loadingAnimation(true) appName = getString(R.string.app_name) oauthScheme = getString(R.string.auth_scheme) diff --git a/app/src/main/java/com/h/pixeldroid/MainActivity.kt b/app/src/main/java/com/h/pixeldroid/MainActivity.kt index e3bf9695..9df488de 100644 --- a/app/src/main/java/com/h/pixeldroid/MainActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/MainActivity.kt @@ -16,15 +16,13 @@ import androidx.paging.ExperimentalPagingApi import androidx.viewpager2.adapter.FragmentStateAdapter import com.bumptech.glide.Glide import com.google.android.material.tabs.TabLayoutMediator -import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.db.entities.HomeStatusDatabaseEntity import com.h.pixeldroid.db.entities.PublicFeedStatusDatabaseEntity import com.h.pixeldroid.db.entities.UserDatabaseEntity -import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.fragments.CameraFragment import com.h.pixeldroid.fragments.SearchDiscoverFragment -import com.h.pixeldroid.fragments.feeds.cachedFeeds.postFeeds.PostFeedFragment import com.h.pixeldroid.fragments.feeds.cachedFeeds.notifications.NotificationsFragment +import com.h.pixeldroid.fragments.feeds.cachedFeeds.postFeeds.PostFeedFragment import com.h.pixeldroid.objects.Account import com.h.pixeldroid.utils.DBUtils import com.h.pixeldroid.utils.Utils.Companion.hasInternet @@ -42,15 +40,8 @@ import org.ligi.tracedroid.sending.TraceDroidEmailSender import retrofit2.Call import retrofit2.Callback import retrofit2.Response -import java.lang.IllegalArgumentException -import javax.inject.Inject -class MainActivity : AppCompatActivity() { - - @Inject - lateinit var db: AppDatabase - @Inject - lateinit var apiHolder: PixelfedAPIHolder +class MainActivity : BaseActivity() { private lateinit var header: AccountHeaderView private var user: UserDatabaseEntity? = null @@ -65,11 +56,8 @@ class MainActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - TraceDroidEmailSender.sendStackTraces("contact@pixeldroid.org", this) - (this.application as Pixeldroid).getAppComponent().inject(this) - //get the currently active user user = db.userDao().getActiveUser() diff --git a/app/src/main/java/com/h/pixeldroid/PhotoEditActivity.kt b/app/src/main/java/com/h/pixeldroid/PhotoEditActivity.kt index 7ba550e8..c325f6ea 100644 --- a/app/src/main/java/com/h/pixeldroid/PhotoEditActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/PhotoEditActivity.kt @@ -21,7 +21,6 @@ import android.view.MenuItem import android.view.View.GONE import android.view.View.VISIBLE import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.core.net.toFile @@ -59,7 +58,7 @@ private const val REQUEST_CODE_PERMISSIONS_SEND_PHOTO = 7 private val REQUIRED_PERMISSIONS = arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) -class PhotoEditActivity : AppCompatActivity(), FilterListFragmentListener, EditImageFragmentListener { +class PhotoEditActivity : BaseActivity(), FilterListFragmentListener, EditImageFragmentListener { internal var saving: Boolean = false private val BITMAP_CONFIG = Bitmap.Config.ARGB_8888 diff --git a/app/src/main/java/com/h/pixeldroid/PostActivity.kt b/app/src/main/java/com/h/pixeldroid/PostActivity.kt index f83d3c4d..88dae4eb 100644 --- a/app/src/main/java/com/h/pixeldroid/PostActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/PostActivity.kt @@ -3,41 +3,27 @@ package com.h.pixeldroid import android.os.Bundle import android.util.Log import android.view.View -import androidx.appcompat.app.AppCompatActivity -import com.h.pixeldroid.api.PixelfedAPI -import com.h.pixeldroid.db.AppDatabase -import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.fragments.PostFragment import com.h.pixeldroid.objects.DiscoverPost import com.h.pixeldroid.objects.Status import com.h.pixeldroid.objects.Status.Companion.DISCOVER_TAG import com.h.pixeldroid.objects.Status.Companion.DOMAIN_TAG import com.h.pixeldroid.objects.Status.Companion.POST_TAG -import com.h.pixeldroid.utils.DBUtils import kotlinx.android.synthetic.main.activity_post.* import retrofit2.Call import retrofit2.Callback import retrofit2.Response -import javax.inject.Inject -class PostActivity : AppCompatActivity() { +class PostActivity : BaseActivity() { private lateinit var postFragment : PostFragment lateinit var domain : String private lateinit var accessToken : String - @Inject - lateinit var db: AppDatabase - @Inject - lateinit var apiHolder: PixelfedAPIHolder - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_post) supportActionBar?.setDisplayHomeAsUpEnabled(true) - (this.application as Pixeldroid).getAppComponent().inject(this) - - val status = intent.getSerializableExtra(POST_TAG) as Status? val discoverPost: DiscoverPost? = intent.getSerializableExtra(DISCOVER_TAG) as DiscoverPost? diff --git a/app/src/main/java/com/h/pixeldroid/PostCreationActivity.kt b/app/src/main/java/com/h/pixeldroid/PostCreationActivity.kt index 294fa2c1..28e974bc 100644 --- a/app/src/main/java/com/h/pixeldroid/PostCreationActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/PostCreationActivity.kt @@ -11,16 +11,13 @@ import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity import androidx.core.net.toFile import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.google.android.material.textfield.TextInputLayout import com.h.pixeldroid.api.PixelfedAPI -import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.db.entities.UserDatabaseEntity -import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.interfaces.PostCreationListener import com.h.pixeldroid.objects.Attachment import com.h.pixeldroid.objects.Instance @@ -35,13 +32,12 @@ import okhttp3.MultipartBody import retrofit2.Call import retrofit2.Callback import retrofit2.Response -import javax.inject.Inject private val TAG = "Post Creation Activity" private val MORE_PICTURES_REQUEST_CODE = 0xffff -class PostCreationActivity : AppCompatActivity(), PostCreationListener { +class PostCreationActivity : BaseActivity(), PostCreationListener { private lateinit var recycler : RecyclerView private lateinit var adapter : PostCreationAdapter @@ -58,19 +54,10 @@ class PostCreationActivity : AppCompatActivity(), PostCreationListener { private var posts: ArrayList = ArrayList() - @Inject - lateinit var db: AppDatabase - - @Inject - lateinit var apiHolder: PixelfedAPIHolder - - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_post_creation) - (this.application as Pixeldroid).getAppComponent().inject(this) - // get image URIs if(intent.clipData != null) { val count = intent.clipData!!.itemCount diff --git a/app/src/main/java/com/h/pixeldroid/ProfileActivity.kt b/app/src/main/java/com/h/pixeldroid/ProfileActivity.kt index ac186b68..28926a5d 100644 --- a/app/src/main/java/com/h/pixeldroid/ProfileActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/ProfileActivity.kt @@ -8,7 +8,6 @@ import android.util.Log import android.view.View import android.widget.* import androidx.annotation.StringRes -import androidx.appcompat.app.AppCompatActivity import androidx.constraintlayout.motion.widget.MotionLayout import androidx.core.content.ContextCompat import androidx.recyclerview.widget.GridLayoutManager @@ -16,9 +15,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.h.pixeldroid.adapters.ProfilePostsRecyclerViewAdapter import com.h.pixeldroid.api.PixelfedAPI -import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.db.entities.UserDatabaseEntity -import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.objects.Account import com.h.pixeldroid.objects.Relationship import com.h.pixeldroid.objects.Status @@ -27,9 +24,8 @@ import com.h.pixeldroid.utils.ImageConverter import retrofit2.Call import retrofit2.Callback import retrofit2.Response -import javax.inject.Inject -class ProfileActivity : AppCompatActivity() { +class ProfileActivity : BaseActivity() { private lateinit var pixelfedAPI : PixelfedAPI private lateinit var adapter : ProfilePostsRecyclerViewAdapter private lateinit var recycler : RecyclerView @@ -38,20 +34,12 @@ class ProfileActivity : AppCompatActivity() { private lateinit var domain : String private var user: UserDatabaseEntity? = null - @Inject - lateinit var db: AppDatabase - - @Inject - lateinit var apiHolder: PixelfedAPIHolder - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_profile) supportActionBar?.setDisplayHomeAsUpEnabled(true) - (this.application as Pixeldroid).getAppComponent().inject(this) - user = db.userDao().getActiveUser() domain = user?.instance_uri.orEmpty() diff --git a/app/src/main/java/com/h/pixeldroid/ReportActivity.kt b/app/src/main/java/com/h/pixeldroid/ReportActivity.kt index 461e5a19..feebb205 100644 --- a/app/src/main/java/com/h/pixeldroid/ReportActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/ReportActivity.kt @@ -1,26 +1,16 @@ package com.h.pixeldroid -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.view.View -import com.h.pixeldroid.db.AppDatabase -import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.objects.Report import com.h.pixeldroid.objects.Status import kotlinx.android.synthetic.main.activity_report.* import retrofit2.Call import retrofit2.Callback import retrofit2.Response -import javax.inject.Inject - -class ReportActivity : AppCompatActivity() { - - @Inject - lateinit var db: AppDatabase - @Inject - lateinit var apiHolder: PixelfedAPIHolder +class ReportActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -30,7 +20,6 @@ class ReportActivity : AppCompatActivity() { val status = intent.getSerializableExtra(Status.POST_TAG) as Status? - (this.application as Pixeldroid).getAppComponent().inject(this) //get the currently active user val user = db.userDao().getActiveUser() diff --git a/app/src/main/java/com/h/pixeldroid/SearchActivity.kt b/app/src/main/java/com/h/pixeldroid/SearchActivity.kt index ca8d937a..cbf3277d 100644 --- a/app/src/main/java/com/h/pixeldroid/SearchActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/SearchActivity.kt @@ -3,8 +3,6 @@ package com.h.pixeldroid import android.app.SearchManager import android.content.Intent import android.os.Bundle -import android.util.Log -import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2 @@ -15,7 +13,7 @@ import com.h.pixeldroid.fragments.feeds.uncachedFeeds.search.SearchHashtagFragme import com.h.pixeldroid.fragments.feeds.uncachedFeeds.search.SearchPostsFragment import com.h.pixeldroid.objects.Results -class SearchActivity : AppCompatActivity() { +class SearchActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -99,18 +97,5 @@ class SearchActivity : AppCompatActivity() { } } - - override fun onNewIntent(intent: Intent) { - super.onNewIntent(intent) - if (intent.action == Intent.ACTION_SEARCH) { - intent.getStringExtra(SearchManager.QUERY)?.also { query -> - search(query) - } - } - } - - private fun search(query: String){ - Log.e("search", "") - } } diff --git a/app/src/main/java/com/h/pixeldroid/SettingsActivity.kt b/app/src/main/java/com/h/pixeldroid/SettingsActivity.kt index 03914ce8..9f3a226c 100644 --- a/app/src/main/java/com/h/pixeldroid/SettingsActivity.kt +++ b/app/src/main/java/com/h/pixeldroid/SettingsActivity.kt @@ -3,14 +3,12 @@ package com.h.pixeldroid import android.content.Intent import android.content.SharedPreferences import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager import com.h.pixeldroid.utils.ThemeUtils.Companion.setThemeFromPreferences -class SettingsActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener { - private var restartActivitiesOnExit = false +class SettingsActivity : BaseActivity(), SharedPreferences.OnSharedPreferenceChangeListener { + private var restartMainOnExit = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -21,11 +19,8 @@ class SettingsActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferen .replace(R.id.settings, SettingsFragment()) .commit() supportActionBar?.setDisplayHomeAsUpEnabled(true) - } - private fun restartCurrentActivity() { - intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK - super.startActivity(intent) + restartMainOnExit = intent.getBooleanExtra("restartMain", false) } override fun onResume() { @@ -42,16 +37,43 @@ class SettingsActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferen ) } + override fun onBackPressed() { + // If a setting (for example language or theme) was changed, the main activity should be + // started without history so that the change is applied to the whole back stack + if (restartMainOnExit) { + val intent = Intent(this, MainActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK + super.startActivity(intent) + } else { + super.onBackPressed() + } + } override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) { when (key) { - "theme" -> setThemeFromPreferences(sharedPreferences, resources) + "theme" -> { + setThemeFromPreferences(sharedPreferences, resources) + recreateWithRestartStatus() + } + "language" -> { + recreateWithRestartStatus() + } } - - restartActivitiesOnExit = true - restartCurrentActivity() } - class SettingsFragment : PreferenceFragmentCompat() { + /** + * Mark main activity to be changed and recreate the current one + */ + private fun recreateWithRestartStatus() { + intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK + val savedInstanceState = Bundle().apply { + putBoolean("restartMain", true) + } + intent.putExtras(savedInstanceState) + super.startActivity(intent) + finish() + } + + class SettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.root_preferences, rootKey) } diff --git a/app/src/main/java/com/h/pixeldroid/di/ApplicationComponent.kt b/app/src/main/java/com/h/pixeldroid/di/ApplicationComponent.kt index 6760cbc0..dddd7b11 100644 --- a/app/src/main/java/com/h/pixeldroid/di/ApplicationComponent.kt +++ b/app/src/main/java/com/h/pixeldroid/di/ApplicationComponent.kt @@ -2,14 +2,11 @@ package com.h.pixeldroid.di import android.app.Application import android.content.Context -import com.h.pixeldroid.* +import com.h.pixeldroid.BaseActivity +import com.h.pixeldroid.Pixeldroid import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.fragments.BaseFragment -import com.h.pixeldroid.fragments.PostFragment -import com.h.pixeldroid.fragments.SearchDiscoverFragment -import com.h.pixeldroid.fragments.feeds.cachedFeeds.notifications.NotificationsFragment import dagger.Component - import javax.inject.Singleton @@ -17,19 +14,8 @@ import javax.inject.Singleton @Component(modules = [ApplicationModule::class, DatabaseModule::class, APIModule::class]) interface ApplicationComponent { fun inject(application: Pixeldroid?) - fun inject(activity: LoginActivity?) - fun inject(activity: PostActivity?) - fun inject(activity: PostCreationActivity?) - fun inject(activity: ProfileActivity?) - fun inject(mainActivity: MainActivity?) - fun inject(activity: ReportActivity?) - fun inject(fragment: PostFragment) - fun inject(fragment: SearchDiscoverFragment) - - fun inject(fragment: NotificationsFragment) + fun inject(activity: BaseActivity?) fun inject(feedFragment: BaseFragment) - fun inject(followsActivity: FollowsActivity) - val context: Context? val application: Application? diff --git a/app/src/main/java/com/h/pixeldroid/fragments/SearchDiscoverFragment.kt b/app/src/main/java/com/h/pixeldroid/fragments/SearchDiscoverFragment.kt index b004528a..2193937a 100644 --- a/app/src/main/java/com/h/pixeldroid/fragments/SearchDiscoverFragment.kt +++ b/app/src/main/java/com/h/pixeldroid/fragments/SearchDiscoverFragment.kt @@ -43,7 +43,7 @@ import javax.inject.Inject * This fragment lets you search and use Pixelfed's Discover feature */ -class SearchDiscoverFragment : Fragment() { +class SearchDiscoverFragment : BaseFragment() { private lateinit var api: PixelfedAPI private lateinit var recycler : RecyclerView private lateinit var adapter : DiscoverRecyclerViewAdapter @@ -51,14 +51,6 @@ class SearchDiscoverFragment : Fragment() { private lateinit var discoverProgressBar: ProgressBar private lateinit var discoverRefreshLayout: SwipeRefreshLayout - @Inject - lateinit var db: AppDatabase - - @Inject - lateinit var apiHolder: PixelfedAPIHolder - - - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -66,9 +58,6 @@ class SearchDiscoverFragment : Fragment() { val view = inflater.inflate(R.layout.fragment_search, container, false) val search = view.findViewById(R.id.search) - (requireActivity().application as Pixeldroid).getAppComponent().inject(this) - - //Configure the search widget (see https://developer.android.com/guide/topics/search/search-dialog#ConfiguringWidget) val searchManager = requireActivity().getSystemService(Context.SEARCH_SERVICE) as SearchManager search.setSearchableInfo(searchManager.getSearchableInfo(requireActivity().componentName)) diff --git a/app/src/main/res/drawable/bug_report_black_24dp.xml b/app/src/main/res/drawable/bug_report_black_24dp.xml new file mode 100644 index 00000000..04d0dac9 --- /dev/null +++ b/app/src/main/res/drawable/bug_report_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/info_black_24dp.xml b/app/src/main/res/drawable/info_black_24dp.xml new file mode 100644 index 00000000..306c7a7c --- /dev/null +++ b/app/src/main/res/drawable/info_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/palette_black_24dp.xml b/app/src/main/res/drawable/palette_black_24dp.xml new file mode 100644 index 00000000..dc3df840 --- /dev/null +++ b/app/src/main/res/drawable/palette_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/translate_black_24dp.xml b/app/src/main/res/drawable/translate_black_24dp.xml new file mode 100644 index 00000000..f0e4e67f --- /dev/null +++ b/app/src/main/res/drawable/translate_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 864d3f66..2cad6403 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -11,6 +11,7 @@ tools:context=".AboutActivity"> + + + + + + + +