I want to add or apply :
viewPager?.rotationY = 180F
to my view pager just when app language is setted to fa or ps from en. or prevent applying that when language is en.
I used viewPager?.rotationY = 180F
in whole app but I want it apply just to fa and ps language.
and used android:rotationY="180"
but it apply to all app languages.
there are all my related codes in DAshboardActivity.kt as below :
@file:Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS", "DEPRECATION")
package af.azdreams.myconquer
import af.azdreams.myconquer.databinding.ActivityDashboardBinding
import af.azdreams.myconquer.fragments.ExploreFragment
import af.azdreams.myconquer.fragments.FlightsFragment
import af.azdreams.myconquer.fragments.TravelFragment
import android.annotation.SuppressLint
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.content.res.Configuration
import android.graphics.BitmapFactory
import android.net.Uri
import android.os.Bundle
import android.preference.PreferenceManager
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.appcompat.widget.Toolbar
import androidx.drawerlayout.widget.DrawerLayout
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import androidx.viewpager.widget.ViewPager
import com.bumptech.glide.Glide
import com.google.android.material.badge.BadgeDrawable
import com.google.android.material.navigation.NavigationView
import com.google.android.material.tabs.TabLayout
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.*
import com.google.firebase.database.ktx.database
import com.google.firebase.ktx.Firebase
import com.google.firebase.storage.FirebaseStorage
import com.google.firebase.storage.StorageReference
import java.io.File
import java.util.*
class DashboardActivity : AppCompatActivity() {
private lateinit var storageReference: StorageReference
private lateinit var databaseReference: DatabaseReference
private lateinit var user: User
private lateinit var uid: String
private var toolbar: Toolbar? = null
private var viewPager: ViewPager? = null
private var tabLayout: TabLayout? = null
private var exploreFragment: ExploreFragment? = null
private var flightsFragment: FlightsFragment? = null
private var travelFragment: TravelFragment? = null
private lateinit var auth: FirebaseAuth
private lateinit var binding: ActivityDashboardBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
auth = FirebaseAuth.getInstance()
uid = auth.currentUser?.uid.toString()
databaseReference = FirebaseDatabase.getInstance().getReference("Users")
if (uid.isNotEmpty()){
getUserData()
}
loadLocale()
binding = ActivityDashboardBinding.inflate(layoutInflater)
setContentView(binding.root)
onClickListenerSearchUser()
val scoresRef = Firebase.database.getReference("Users")
scoresRef.keepSynced(true)
initData()
checkTheme()
findViewById<Toolbar>(R.id.toolbar).also { toolbar = it }
setSupportActionBar(toolbar)
findViewById<ViewPager>(R.id.viewPager).also { viewPager = it }
findViewById<TabLayout>(R.id.tabLayout).also { tabLayout = it }
exploreFragment = ExploreFragment()
flightsFragment = FlightsFragment()
travelFragment = TravelFragment()
with(tabLayout) { this?.setupWithViewPager(viewPager) }
val viewPagerAdapter = ViewPagerAdapter(supportFragmentManager, 0)
viewPagerAdapter.addFragment(exploreFragment!!,resources.getString(R.string.home))
viewPagerAdapter.addFragment(flightsFragment!!,resources.getString(R.string.flights))
viewPagerAdapter.addFragment(travelFragment!!,resources.getString(R.string.dictionary))
with(viewPager) {
this!!.adapter = viewPagerAdapter
}
val tabLayout = tabLayout
tabLayout?.getTabAt(0)?.setIcon(R.drawable.icon_home)
tabLayout?.getTabAt(1)?.setIcon(R.drawable.icon_flights)
tabLayout?.getTabAt(2)?.setIcon(R.drawable.icon_dictionary)
val badgeDrawable: BadgeDrawable = tabLayout?.getTabAt(0)!!.orCreateBadge
badgeDrawable.isVisible = true
badgeDrawable.number = 12
val drawerLayout = findViewById<DrawerLayout>(af.azdreams.myconquer.R.id.drawerLayout)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
val navView = findViewById<NavigationView>(R.id.navView)
val toggle = ActionBarDrawerToggle(this,drawerLayout,toolbar, R.string.open, R.string.close)
toggle.isDrawerIndicatorEnabled = true
supportActionBar?.setDisplayShowTitleEnabled(false)
drawerLayout.addDrawerListener(toggle)
toggle.syncState()
navView.setNavigationItemSelectedListener {
when(it.itemId){
R.id.itmFetch ->startActivity(Intent(this,UserProfileActivity::class.java))
R.id.itmProfile ->startActivity(Intent(this,Profile::class.java))
R.id.itmLanguage ->showChangeLanguageDialog()
R.id.itmAppearance ->chooseThemeDialog()
R.id.itmSignOut ->basicAlert()
R.id.itmRateAndComments ->{
val url = "https://play.google.com/store/apps/details?id=org.telegram.plus"
if (url.startsWith("https://") || url.startsWith("http://")) {
val uri = Uri.parse(url)
val intent = Intent(Intent.ACTION_VIEW, uri)
startActivity(intent)
}
}
R.id.itmAbout ->startActivity(Intent(this,About::class.java))
}
true
}
}
private var backPressedTime:Long = 0
private lateinit var backToast: Toast
override fun onBackPressed() {
backToast = Toast.makeText(this,resources.getString(R.string.press_back_again_to_leave_the_app), Toast.LENGTH_SHORT)
if (backPressedTime 2000 > System.currentTimeMillis()) {
backToast.cancel()
super.onBackPressed()
return
} else {
backToast.show()
}
backPressedTime = System.currentTimeMillis()
}
private fun showChangeLanguageDialog() {
val pref = getSharedPreferences("Settings", MODE_PRIVATE)
val mBuilder = AlertDialog.Builder(this)
val listItems = arrayOf("English", "فارسی دری", "پښتو")
var checkedItem = 0
when {
pref.getString("My_Lang", "en").equals("en") -> {
checkedItem = 0
}
pref.getString("My_Lang", "en").equals("fa") -> {
checkedItem = 1
}
pref.getString("My_Lang", "en").equals("ps") -> {
checkedItem = 2
}
}
mBuilder.setSingleChoiceItems(listItems, checkedItem) { dialogInterface: DialogInterface, i: Int ->
when (i) {
0 -> {
setLocale("en")
startActivity(Intent(this,SplashScreen::class.java))
}
1 -> {
setLocale("fa")
startActivity(Intent(this,SplashScreen::class.java))
}
2 -> {
setLocale("ps")
startActivity(Intent(this,SplashScreen::class.java))
}
}
dialogInterface.dismiss()
}
val mDialog = mBuilder.create()
mDialog.show()
}
private fun setLocale(lang: String?) {
val locale = Locale(lang)
Locale.setDefault(locale)
val config = Configuration()
config.locale = locale
baseContext.resources.updateConfiguration(config, baseContext.resources.displayMetrics)
val editor = getSharedPreferences("Settings", MODE_PRIVATE).edit()
editor.putString("My_Lang", lang)
editor.apply()
}
private fun loadLocale() {
val prefs = getSharedPreferences("Settings", MODE_PRIVATE)
val language = prefs.getString("My_Lang", "")
setLocale(language)
}
private fun basicAlert(){
val positiveButtonClick = { _: DialogInterface, _: Int -> }
val negativeButtonClick = { _: DialogInterface, _: Int -> }
val builder = AlertDialog.Builder(this)
with(builder) {
setMessage(R.string.do_you_want_to_sign_out_from_your_my_conquer_account)
setPositiveButton(R.string.yes, positiveButtonClick)
setPositiveButton(R.string.yes) { _: DialogInterface, _: Int ->
auth.signOut()
startActivity(Intent(this@DashboardActivity, SignInActivity::class.java))
finish()
}
setNegativeButton(R.string.no, negativeButtonClick)
show()
}
}
private fun initData(){
auth = FirebaseAuth.getInstance()
setUserEmail()
}
private fun setUserEmail(){
getCurrentUserEmail()
}
private fun getCurrentUserEmail():String? {
return auth.currentUser?.email
}
private fun chooseThemeDialog() {
val builder = AlertDialog.Builder(this)
val styles = arrayOf(resources.getString(R.string.light),resources.getString(R.string.dark),resources.getString(
R.string.system_default))
val checkedItem = MyPreferences(this).darkMode
builder.setSingleChoiceItems(styles, checkedItem) { dialog, which ->
when (which) {
0 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
MyPreferences(this).darkMode = 0
delegate.applyDayNight()
dialog.dismiss()
}
1 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
MyPreferences(this).darkMode = 1
delegate.applyDayNight()
dialog.dismiss()
}
2 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
MyPreferences(this).darkMode = 2
delegate.applyDayNight()
dialog.dismiss()
}
}
}
val dialog = builder.create()
dialog.show()
}
class MyPreferences(context: Context?) {
companion object {
private const val DARK_STATUS = ""
}
private val preferences = PreferenceManager.getDefaultSharedPreferences(context)
var darkMode = preferences.getInt(DARK_STATUS, 0)
set(value) = preferences.edit().putInt(DARK_STATUS, value).apply()
}
private fun checkTheme() {
when (MyPreferences(this).darkMode) {
0 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
delegate.applyDayNight()
}
1 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
delegate.applyDayNight()
}
2 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
delegate.applyDayNight()
}
}
}
private class ViewPagerAdapter(fm: FragmentManager, behavior: Int) :
FragmentPagerAdapter(fm, behavior) {
private val fragments: MutableList<Fragment> = ArrayList()
private val fragmentTitle: MutableList<String> = ArrayList()
fun addFragment(fragment: Fragment, title: String) {
fragments.add(fragment)
fragmentTitle.add(title)
}
override fun getItem(position: Int): Fragment {
return fragments[position]
}
override fun getCount(): Int {
return fragments.size
}
override fun getPageTitle(position: Int): CharSequence {
return fragmentTitle[position]
}
}
private fun getUserData() {
val scoresRef = Firebase.database.getReference("Users")
scoresRef.child(uid).addValueEventListener(object : ValueEventListener {
@SuppressLint("SetTextI18n")
override fun onDataChange(snapshot: DataSnapshot) {
user = snapshot.getValue(User::class.java)!!
val name = findViewById<TextView>(R.id.tvFirstNameAndLastName)
val phoneNumber = findViewById<TextView>(R.id.tvPhoneNumber)
findViewById<TextView>(R.id.tvFirstNameAndLastName)
name.text = user.name " " user.lastName
phoneNumber.text = user.phoneNumber
getUserProfile()
}
override fun onCancelled(error: DatabaseError) {
finish()
}
})
}
private fun getUserProfile() {
val navigationView = binding.navView
val header: View = navigationView.getHeaderView(0)
storageReference = FirebaseStorage.getInstance().reference.child("Users/$uid")
val localeFile = File.createTempFile("tempFile","")
storageReference.getFile(localeFile).addOnSuccessListener {
val bitmap = BitmapFactory.decodeFile(localeFile.absolutePath)
val imageView = header.findViewById<ImageView>(R.id.circleImageView)
Glide.with(this)
.load(bitmap)
.centerCrop()
.into(imageView)
}.addOnFailureListener{
finish()
}
}
private fun onClickListenerSearchUser(){
binding.btnSearchUsers.setOnClickListener{
startActivity(Intent(this,SearchUsers::class.java))
}
}
}
and activity_dashboard.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".DashboardActivity">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@ id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/Orange"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageButton
android:id="@ id/btnSearchUsers"
android:layout_width="wrap_content"
android:background="#0000"
android:layout_height="wrap_content"
app:srcCompat="@drawable/icon_search"
android:contentDescription="@string/todo" />
</androidx.appcompat.widget.Toolbar>
<com.google.android.material.tabs.TabLayout
app:tabTextAppearance="@style/MineCustomTabText"
android:id="@ id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@ id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<com.google.android.material.navigation.NavigationView
android:id="@ id/navView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:itemTextAppearance="@style/menu"
app:menu="@menu/nav_menu" />
</androidx.drawerlayout.widget.DrawerLayout>
CodePudding user response:
you can use Locale.getDefault().getLanguage()
for getting information what language is set. wrap it in some if
statement and put in onCreate
and/or in onResume
(as lang may change during Activity
s lifecycle - app homed, language changed, app bring back)
viewPager?.apply {
val localeSet = Locale.getDefault().getLanguage()
rotationY = if (localeSet == "ps" || localeSet == "fa") 180f else 0f
}