From 26256593dec1f21ee2b7103ad67bbec30287879e Mon Sep 17 00:00:00 2001 From: Talmid of Levi Date: Mon, 4 Dec 2023 16:22:13 -0500 Subject: [PATCH] implemented status bar with battery, network, volume --- app/src/main/AndroidManifest.xml | 16 +- .../catflipscreen/CatFlipScreenApplication.kt | 2 + .../catflipscreen/FlipScreenService.kt | 11 +- .../mezimmah/catflipscreen/MainActivity.kt | 34 +++- .../net/mezimmah/catflipscreen/MyReceiver.kt | 8 + .../catflipscreen/PresentationScreen.kt | 157 ++++++++++++++++++ .../main/res/drawable/icons8_battery_50.png | Bin 0 -> 441 bytes .../res/drawable/icons8_battery_level_50.png | Bin 0 -> 316 bytes .../drawable/icons8_charged_battery_50.png | Bin 0 -> 321 bytes .../res/drawable/icons8_empty_battery_50.png | Bin 0 -> 303 bytes .../res/drawable/icons8_full_battery_50.png | Bin 0 -> 320 bytes .../res/drawable/icons8_low_battery_50.png | Bin 0 -> 321 bytes .../main/res/drawable/icons8_no_sound_50.png | Bin 0 -> 1022 bytes .../main/res/drawable/icons8_signal_48.png | Bin 0 -> 290 bytes app/src/main/res/drawable/icons8_sound_50.png | Bin 0 -> 754 bytes .../main/res/drawable/icons8_vibration_48.png | Bin 0 -> 507 bytes app/src/main/res/drawable/icons8_wifi_50.png | Bin 0 -> 855 bytes app/src/main/res/layout/layout_screen.xml | 85 ++++++++-- 18 files changed, 282 insertions(+), 31 deletions(-) create mode 100644 app/src/main/res/drawable/icons8_battery_50.png create mode 100644 app/src/main/res/drawable/icons8_battery_level_50.png create mode 100644 app/src/main/res/drawable/icons8_charged_battery_50.png create mode 100644 app/src/main/res/drawable/icons8_empty_battery_50.png create mode 100644 app/src/main/res/drawable/icons8_full_battery_50.png create mode 100644 app/src/main/res/drawable/icons8_low_battery_50.png create mode 100644 app/src/main/res/drawable/icons8_no_sound_50.png create mode 100644 app/src/main/res/drawable/icons8_signal_48.png create mode 100644 app/src/main/res/drawable/icons8_sound_50.png create mode 100644 app/src/main/res/drawable/icons8_vibration_48.png create mode 100644 app/src/main/res/drawable/icons8_wifi_50.png diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef7e6b9..5cc194b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,12 +2,14 @@ - - + + + - + - + + + + android:stopWithTask="false" /> diff --git a/app/src/main/java/net/mezimmah/catflipscreen/CatFlipScreenApplication.kt b/app/src/main/java/net/mezimmah/catflipscreen/CatFlipScreenApplication.kt index 2dd4ed0..7ef62e6 100644 --- a/app/src/main/java/net/mezimmah/catflipscreen/CatFlipScreenApplication.kt +++ b/app/src/main/java/net/mezimmah/catflipscreen/CatFlipScreenApplication.kt @@ -26,6 +26,8 @@ class CatFlipScreenApplication : Application() { companion object { const val CHANNEL_ID = "autoStartServiceChannel" const val CHANNEL_NAME = "Auto Start Service Channel" + const val BROADCAST_BATTERY_CHANGED = "BROADCAST_BATTERY_CHANGED" + const val BROADCAST_AUDIO_MODE_CHANGED = "BROADCAST_AUDIO_MODE_CHANGED" } } \ No newline at end of file diff --git a/app/src/main/java/net/mezimmah/catflipscreen/FlipScreenService.kt b/app/src/main/java/net/mezimmah/catflipscreen/FlipScreenService.kt index 877e2a9..ff762a9 100644 --- a/app/src/main/java/net/mezimmah/catflipscreen/FlipScreenService.kt +++ b/app/src/main/java/net/mezimmah/catflipscreen/FlipScreenService.kt @@ -30,12 +30,12 @@ class FlipScreenService : Service() { override fun onTaskRemoved(rootIntent: Intent?) { val restartServiceIntent = Intent(applicationContext, FlipScreenService::class.java).also { it.setPackage(packageName) - }; + } val restartServicePendingIntent: PendingIntent = PendingIntent.getService(this, 1, restartServiceIntent, - PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE); - applicationContext.getSystemService(Context.ALARM_SERVICE); - val alarmService: AlarmManager = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager; - alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, restartServicePendingIntent); + PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE) + applicationContext.getSystemService(Context.ALARM_SERVICE) + val alarmService: AlarmManager = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager + alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, restartServicePendingIntent) } private fun showPresentationScreen() { @@ -59,6 +59,7 @@ class FlipScreenService : Service() { } private fun showNotification() { + val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val channel = NotificationChannel( CatFlipScreenApplication.CHANNEL_ID, diff --git a/app/src/main/java/net/mezimmah/catflipscreen/MainActivity.kt b/app/src/main/java/net/mezimmah/catflipscreen/MainActivity.kt index 7b103ce..f5eba06 100644 --- a/app/src/main/java/net/mezimmah/catflipscreen/MainActivity.kt +++ b/app/src/main/java/net/mezimmah/catflipscreen/MainActivity.kt @@ -1,11 +1,17 @@ package net.mezimmah.catflipscreen +import android.content.BroadcastReceiver +import android.content.Context import android.content.Intent +import android.content.IntentFilter import android.content.SharedPreferences +import android.media.AudioManager import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.localbroadcastmanager.content.LocalBroadcastManager import androidx.preference.PreferenceFragmentCompat + class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -17,8 +23,34 @@ class MainActivity : AppCompatActivity() { .replace(R.id.settings, SettingsFragment()) .commit() } - startService(Intent(this, FlipScreenService::class.java)) + startForegroundService(Intent(this, FlipScreenService::class.java)) + registerReceivers() } + + private fun registerReceivers() { + val broadCastReceiver = object : BroadcastReceiver() { + override fun onReceive(contxt: Context, intent: Intent) { + when (intent.action) { + Intent.ACTION_POWER_CONNECTED, + Intent.ACTION_POWER_DISCONNECTED, + Intent.ACTION_BATTERY_CHANGED -> { + LocalBroadcastManager.getInstance(contxt) + .sendBroadcast(Intent(CatFlipScreenApplication.BROADCAST_BATTERY_CHANGED)) + } + AudioManager.RINGER_MODE_CHANGED_ACTION -> { + LocalBroadcastManager.getInstance(contxt) + .sendBroadcast(Intent(CatFlipScreenApplication.BROADCAST_AUDIO_MODE_CHANGED)) + } + } + } + } + this.registerReceiver(broadCastReceiver, IntentFilter(Intent.ACTION_POWER_CONNECTED)) + this.registerReceiver(broadCastReceiver, IntentFilter(Intent.ACTION_POWER_DISCONNECTED)) + this.registerReceiver(broadCastReceiver, IntentFilter(Intent.ACTION_BATTERY_CHANGED)) + + this.registerReceiver(broadCastReceiver, IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION)) + } + class SettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.root_preferences, rootKey) diff --git a/app/src/main/java/net/mezimmah/catflipscreen/MyReceiver.kt b/app/src/main/java/net/mezimmah/catflipscreen/MyReceiver.kt index bd85868..47a5e6a 100644 --- a/app/src/main/java/net/mezimmah/catflipscreen/MyReceiver.kt +++ b/app/src/main/java/net/mezimmah/catflipscreen/MyReceiver.kt @@ -3,13 +3,21 @@ package net.mezimmah.catflipscreen import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +import android.content.Intent.ACTION_BOOT_COMPLETED import android.util.Log class MyReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { + when (intent.action) { + ACTION_BOOT_COMPLETED -> startFlipScreenService(context) + } + } + + private fun startFlipScreenService(context: Context) { context.startService(Intent(context, FlipScreenService::class.java)) Log.i("Autostart", "started") } + } \ No newline at end of file diff --git a/app/src/main/java/net/mezimmah/catflipscreen/PresentationScreen.kt b/app/src/main/java/net/mezimmah/catflipscreen/PresentationScreen.kt index 806ff24..3355205 100644 --- a/app/src/main/java/net/mezimmah/catflipscreen/PresentationScreen.kt +++ b/app/src/main/java/net/mezimmah/catflipscreen/PresentationScreen.kt @@ -1,16 +1,173 @@ package net.mezimmah.catflipscreen import android.app.Presentation +import android.content.BroadcastReceiver import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.media.AudioManager +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.os.BatteryManager import android.os.Bundle import android.view.Display +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import androidx.localbroadcastmanager.content.LocalBroadcastManager + class PresentationScreen(outerContext: Context?, display: Display?) : Presentation(outerContext, display) { + private var connectivityManager: ConnectivityManager? = null + private var am: AudioManager? = null + private var batteryTextView: TextView? = null + private var batteryIconView: ImageView? = null + private var networkIconView: ImageView? = null + private var wifiIconView: ImageView? = null + private var audioLevelIconView: ImageView? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.layout_screen) + + findViews() + + getSystemServices() + + registerReceivers() + + updateBatteryLevel() + updateNetworkConnectivity() + updateAudioMode() + } + + private fun findViews() { + batteryTextView = findViewById(R.id.screen_status_bar_battery_level) + batteryIconView = findViewById(R.id.screen_status_bar_battery_icon) + networkIconView = findViewById(R.id.screen_status_bar_network_signal) + wifiIconView = findViewById(R.id.screen_status_bar_wifi_signal) + audioLevelIconView = findViewById(R.id.screen_status_bar_audio_level) + } + + private fun getSystemServices() { + am = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager? + connectivityManager = + context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + } + + private fun registerReceivers() { + // Register receiver for Battery Status Update from the main activity + val broadCastReceiver = object : BroadcastReceiver() { + override fun onReceive(contxt: Context, intent: Intent) { + when (intent.action) { + CatFlipScreenApplication.BROADCAST_BATTERY_CHANGED -> { + updateBatteryLevel() + } + CatFlipScreenApplication.BROADCAST_AUDIO_MODE_CHANGED -> { + updateAudioMode() + } + } + } + } + LocalBroadcastManager.getInstance(context) + .registerReceiver(broadCastReceiver, IntentFilter(CatFlipScreenApplication.BROADCAST_BATTERY_CHANGED)) + LocalBroadcastManager.getInstance(context) + .registerReceiver(broadCastReceiver, IntentFilter(CatFlipScreenApplication.BROADCAST_AUDIO_MODE_CHANGED)) + + // Register receiver for the network updates + val networkRequest = NetworkRequest.Builder() + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) + .build() + val networkCallback = object : ConnectivityManager.NetworkCallback() { + // network is available for use + override fun onAvailable(network: Network) { + updateNetworkConnectivity() + super.onAvailable(network) + } + + // Network capabilities have changed for the network + override fun onCapabilitiesChanged( + network: Network, + networkCapabilities: NetworkCapabilities + ) { + super.onCapabilitiesChanged(network, networkCapabilities) + updateNetworkConnectivity() + } + + // lost network connection + override fun onLost(network: Network) { + super.onLost(network) + updateNetworkConnectivity() + } + } + connectivityManager?.requestNetwork(networkRequest, networkCallback) + } + + private fun updateBatteryLevel() { + val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter -> + context.registerReceiver(null, ifilter) + } + val status: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1) ?: -1 + val isCharging: Boolean = status == BatteryManager.BATTERY_STATUS_CHARGING + || status == BatteryManager.BATTERY_STATUS_FULL + + val batteryPct: Int = batteryStatus?.let { intent -> + val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) + val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1) + level * 100 / scale + }!! + batteryTextView!!.text = batteryPct.toString() + if (isCharging) { + batteryIconView!!.setImageResource(R.drawable.icons8_battery_50) + } else { + if (batteryPct < 15) { + batteryIconView!!.setImageResource(R.drawable.icons8_empty_battery_50) + } else if (batteryPct < 25) { + batteryIconView!!.setImageResource(R.drawable.icons8_low_battery_50) + } else if (batteryPct < 50) { + batteryIconView!!.setImageResource(R.drawable.icons8_battery_level_50) + } else if (batteryPct < 80) { + batteryIconView!!.setImageResource(R.drawable.icons8_charged_battery_50) + } else { + batteryIconView!!.setImageResource(R.drawable.icons8_full_battery_50) + } + } + } + + private fun updateNetworkConnectivity() { + networkIconView?.post { networkIconView?.visibility = View.GONE } + wifiIconView?.post { wifiIconView?.visibility = View.GONE } + if (connectivityManager != null) { + val capabilities = + connectivityManager?.getNetworkCapabilities(connectivityManager?.activeNetwork) + if (capabilities != null) { + if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { + networkIconView?.post { networkIconView?.visibility = View.VISIBLE } + } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { + wifiIconView?.post { wifiIconView?.visibility = View.VISIBLE } + } + } + } + } + + private fun updateAudioMode() { + when (am!!.ringerMode) { + AudioManager.RINGER_MODE_SILENT -> { + audioLevelIconView?.setImageResource(R.drawable.icons8_no_sound_50) + } + AudioManager.RINGER_MODE_VIBRATE -> { + audioLevelIconView?.setImageResource(R.drawable.icons8_vibration_48) + } + AudioManager.RINGER_MODE_NORMAL -> { + audioLevelIconView?.setImageResource(R.drawable.icons8_sound_50) + } + } } } diff --git a/app/src/main/res/drawable/icons8_battery_50.png b/app/src/main/res/drawable/icons8_battery_50.png new file mode 100644 index 0000000000000000000000000000000000000000..5c1743eee362447c218dbbe4dc9a9c62f0dd2d16 GIT binary patch literal 441 zcmV;q0Y?6bP)5mK#DFhNZ$cYhVm?B{HB3Of(Z-GXvac@mLZAoN2bqr`WxZPDc_0bTr%2r}%>; z3g3LzNJIE*xSs3W1E#L@Pgc#3p!Sh{|W)0B@&<2iy`;ZT&Xk(24d%!vH==Ic6 zYXs;6*T9N$yTAc31Wte{Fazdp*#QiqH3AGY#9Tv7HRMo3yYOXJ+I+um179}&jr=xV z&J%DIVhu;6Mjn7uU?=q0Qv2fHZnn^0a4X<=-;@=WUrYc$-BuP#qVUaUjU+fDORbH* z#VrE%HQTdKu{*7BCXyIFmp|TH-H{frb&uR@BxQA`o;LBO+5C=$blI`p$3cae$#RDg j+jl@`j4{R-VFZPi2;wM%|_VP}8Hv>nTiTa)E|Z}$;~&=aBCH#|A_ z?!-@}(7O39tb5j&?cW-(zbNtb>jfuMvZDKPiyhUKfIx4Wd5lN?JZbJdnn0g3c)I$z JtaD0e0sv|1e~kbD literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/icons8_charged_battery_50.png b/app/src/main/res/drawable/icons8_charged_battery_50.png new file mode 100644 index 0000000000000000000000000000000000000000..81a08c7d971bc3441bb1e4f623498c290241b9f8 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-&H|6fVg?3oVGw3ym^DWNDEQga z#WAE}&f6Q_d`$)-tq=2jjBLo`7FO-M!)tZmV!lH8g&!Sj9|oTJnZ|4WWZoU8 zOIGSiKrord8TYSNolJIq<9S^#O=zx|M#Gu2JSQ4@zq(vVX=oM|*E2kDt!lMX zm$ddfbw-)S?(a1hN>e6G{d%oME^|FY2g%|q zXV>o7YWyi{lHPv*MJ(^GMc>#OQ2zALrS;A8)Piq5yIbKO=*>$t+|sFAc-2{LV#xt6jhqw*#*lfMn#FQf6@{q>KV+!gd@8d1 z^9&zdiG)WtZ_RmR&E0jUChLj&kL{gbOys$BH5R-q|7e!|#qHM>50e)etj%gd3pXv~7sv7FJ!ihj-V7tNC7OjsaVIdveeIE)(88<2i%p zaZ5oU_^Fw|x#hsrFM8L!Wu=qc_iZzr{2|YQStlmx08>PyKZ`HhjoS~8rLsjt=jWby zc#n^NG6Ua%$}iQMq*koiZl`i$!IY}7SH}V-bYA&y(D>EE{Op9##d-VQE%WT+F>8qDY+&VI?Cb!LJQ7Nlef><5T3`XzOoYzwt=BiFtG(K=DYqibE zUR8TF#y5?@U;b$Nan6X&?N$GIP@2e;Bs9!443oEVR+g*50eD$eGAUmo~gl^yP zWcA&N&plWDvFS7|*nF!ddtuqrL;Ke^TTNb>WBF}9x0N6ea3=3$ZV?M=HEWLi0rWnD Mr>mdKI;Vst02Ysd`Tzg` literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/icons8_no_sound_50.png b/app/src/main/res/drawable/icons8_no_sound_50.png new file mode 100644 index 0000000000000000000000000000000000000000..ed671d5597f8b937076b4176d25f9c9dec7ab591 GIT binary patch literal 1022 zcmVKLW_zPflw`q z2qI`#RJJInK!c*hC{`S7BIS4~iZt+)^SVd;j9tH*^}$nLBgm+^Oq- z=lOs0o%5SH^UXQu>H)`rm%u!)kOiFLw=x9{1B?P%h6_v)(CP{X7zykG9s_;y)Jxor zI0YD>7`V<*HF||I&9Fl#J;~q59X=U>xPe_iqU2Em#sZ7gSiCf0B0vl(M*rL7l6GK8 zDlkzYVuH+-K9zm~CxFp;duOt|6FGw@0cAil@J%ki2UK{jVd6r>1@Q$e19~LIQ(&s+ zaGEWMI-Qb&C;`<#hopG`lzWa~e#C{y1_GP|E&){*ze1jf(j8!gD;Q@WlJ|{-^#hwM zanpcaiQADY#CTvr5|}LctALwYc!MRbPW;cn^jtvHpn(_reGpic zU*MVe%aek{f(Z;_JkT4kk%RHc# z9G>~a(vR6-@K1`jCoPac7;P%)1wak7COAkXV2#A|nbu_5SHDL6(VY^Ao-0ZLCvnUw~t2gG7M=j%ushi3X4h;ve)IN(81mO^`4cV5@AZY#Xatz!zC;R(f%i zxM#05-@-2IjUFdO(FF?BgX zxPXb7I}=y|R7-_YI-Ll@avtmq#CFyU%+yX9ZzcZSL|2}VgNg!A#y?%WZ9A+;6((Ws zt4^Opl4W7|#C)CdydvCsfs^Xo5f14v83Fd8>T+l3~ASsjQ@Un0ddqA~J zGvgAu;|UBaj~hxja5?ZQ1etFT-Yw@YtFZg{&qE9=ZTns<|8B8pz8u3vfBuFS%h?^i zTxM4I^^#HG?-z!Sx+(@2ds_zke-rQC{Uag1b?ukDx-GiJF;}kbU|=_|-!+jh_xeo1 m+mZVuiX8p_k?G0~m9A#hb^n3>WAJqKb6Mw<&;$V6fpVMx literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/icons8_sound_50.png b/app/src/main/res/drawable/icons8_sound_50.png new file mode 100644 index 0000000000000000000000000000000000000000..442086c3e06d6b88ce3641a74cda73295078a1ff GIT binary patch literal 754 zcmVE`_bOpJNN2;dCuIK`DM<0 zow-Ua>OT|E1zZEZ0#ATGRW<=@fl1o+Sd~e@YTzleHLc1bpaXb_L#hk{RseTg5TyVC zYQT6Dg!dr8a^O}Rgx4UzGT=%Q2ya0MATB3`NCN_F2YT`)2pU=nTuK9x6a-igd;vZK zd-H@?0*s}FNCC3WSU6^YMqVHn=K_%wq$S{}fM^Y?ECpPcD@0llEnuI(%w!g3z?u0# zM1c^@xk0_DhWLi%^C>-l;x@DMz{jY@=L-=7(vTuAfsG;l);@JJ3gldp#&ZVQ2E3AD zA8Z()4tx{;R#zp>qCvEPPT-L-GHqc7oE6^<({2{P2M{e_4e(lupH{P%x8R>^rSK9dbF` z-VkHXTW=gkl)8lCFV_*pmqTNh&JRn`=Q{i>|ETz`yDAth8iXL6S|jlu=(YSkz<1ye zu*FqLO<jxkf2<+=(;KI}J=4|_6!C?Fj)B6C7(C{u_9 zOwiqyPxMF}$sD49l|V|%@}H=f{EMb_@@d-j_hWhMwZv=G1$cm)cor^()3|8y6!?%0w?IEUG>nKpaOn@9GY7Ol^T69RVLxkx0*6>!uR0od}(RJcb0 zly!(rA@eLCE|sIHBq@2|UIn1lLTFB6v|pp>E@ZKG0g-+SsZZjAxJHxcDslZ^Ahy0_ z)LID5NsRVu6y1d^)-E8@Zz1(bd=S^DYbCB5f$#sstrLJ&3!yoQaqCVu(cFFa*_}2+ z38Xb1RwREfvF1K2@u-0T$C+y-E^VR2aAIcq`W1+;WLRQLK5ZeFB=!yJuEah;6P4H} xfS0m4x*c?z`Rrrk3=04}2^YITcZUxD3}1zdl#{Q|@^%0K002ovPDHLkV1jb>)dm0n literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/icons8_wifi_50.png b/app/src/main/res/drawable/icons8_wifi_50.png new file mode 100644 index 0000000000000000000000000000000000000000..bf214eb708c107bfcc2912ac50621cf48a9d9800 GIT binary patch literal 855 zcmV-d1E~CoP)7m;qIXp^Sm(EmWP4t`xo+@vaE z%gIFu2^Vga^rBqEMI;WaA5942K!T(ZQdC0Hl_060lDY_L?SABmhfcOLvoo`^JF_vL zWG?T#&-;GAJMWL@eb+EzVq#)qY7w9gSOcVi6TlT<6nG0v0zdVc)Ur{n(+}*{*t)R9 zF9LP}SAhx2XF|>G1Qu4qzy{zl@SV!>4aflNgBCv<=mDNmeMW%oz^rmjtOK4CKCggH zehega%tnojXme{~Bk+Of@)_7tYA&1t3Phg*FesXfO*8?w%4j&Rb4eQC1Ehd%q|_# zv|qG!JDM;BG+C6*2ToUM!z}3LJkO0b*T_BrJf!+Ol2z5W@FElK6&^~Zcr6-&Fd|9h zRES2VL_<(tWt+?8^%w8}I0UQ(I)O%gI<@Su){(lU$VuOUm@t{?ama-vr8o(+cxW%F ziKE@u&P$(xnlN?VXR&HY*1V#OHdpF~YDW6#3s(Kij`x{5>o5B}J-y+{ko)_^4+f*Q zbjLCWdL2@Vv|bg-YWG#2td^x6Ql4IE+Xxd)TaE%>Tufp~Adg6l5hZ|DU>NT_kvU>S z$iz7Qk=WL-eHc1X<;3Whb3nZj1%P_sf)5j!88;zeBg-&w$%Ba@xm_`$2!BqDH(Z#w zW0j&u3O%>nbub~vfkvYi02ToEEldoTbubF?&!ER96VFQBnnV^&SL7z}h1@6_wG7bW hCB2V{iHZ3?_zgGBh)?AHMRWiF002ovPDHLkV1o8PfWQC% literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/layout_screen.xml b/app/src/main/res/layout/layout_screen.xml index e3ebf53..2edb19b 100644 --- a/app/src/main/res/layout/layout_screen.xml +++ b/app/src/main/res/layout/layout_screen.xml @@ -5,30 +5,79 @@ android:background="@color/black" android:orientation="vertical"> - - + android:layoutDirection="rtl" + android:layout_height="wrap_content"> + + + + + + + + + + + + + + + + android:textSize="22sp" /> + + \ No newline at end of file