logo

Fon rasmi ilovasi

Загружено в:

20.11.2024

Скачано:

0

Размер:

1048.197265625 KB
Fon rasmi ilovasi  
Mundrija
KIRISH .............................................................................................................................................................................. 2
I. Nazariy qism ................................................................................................................................................................. 4
1.1. Java dasturi haqida. ................................................................................................................................................. 4
1.2. Android studio ishchi oynasi. ................................................................................................................................... 6
II. Asosiy qism ................................................................................................................................................................ 11
2.1 Android Studioda fonlarni joylshtirish. ................................................................................................................... 11
2.2 Android studioda “Fon rasmlari” mobil ilovasini yaratish ...................................................................................... 14
Foydalanilgan adabiyotlar ............................................................................................................................................. 28
Internet saytlari: ............................................................................................................................................................ 28
1 KIRISH
Bugungi   kunda   axborot-kommunikatsiya   sohasini   rivojlantirish-ning   asosi
hisoblangan   dasturiy   mahsulotlarni   ishlab   chiqarish   milliy   iqtisodiyoti
rivojlanishining   muhim   sharti   sifatida   alohida   ahamiyat   kasb   etmoqda.
Hayotimizning   har   jabhasida   faol   qo‘llanilayotgan   axborot   almashinuv
texnologiyalaridan   samarali   foydalanish   ulardagi   dasturiy   ta’minotlarning   o‘ziga
xosligi,   ommabopligi   va   innovatsion   yangiligiga   bog‘liq.   “Axborotlashtirish
to‘g‘risida”gi,   “Telekommuni-katsiyalar   to‘g‘risida”gi,   “EHM   dasturlari   va
ma’lumotlar   bazasini   himoya   qilish   to‘g‘risida”gi   qonunlar   soha   rivojida   muhim
ahamiyat   kasb   etmoqda.   Bugun   yurtimizda   axborot-kommunikatsiya
texnologiyalari kirib bormagan sohaning o‘zi yo‘q. Bu esa, o‘z navbatida, softver
sanoatining   izchil   rivojlanishiga   keng   yo‘l   ochmoqda.   Xususan,   hozirgi   kunda
mamlakatimizda   dasturiy   mahsulotlarni   yaratish,   ishlab   chiqarish   va   joriy   qilish
bilan shug‘ullanuvchi 260 dan ziyod tadbirkorlik sub’ektlari faoliyat yuritmoqda. 
Mamlakatimizda dasturiy ta’minot sanoatini shakllantirish va rivojlantirish 
uchun   zarur   shart-sharoitlar,   sohaga   daxldor   mustahkam   qonunchilik   bazasini
yaratishga   e’tibor   qaratilmoqda.   Hozirgacha   10   dan   ziyod   qonun,   Prezident   va
Vazirlar Mahka-masining qator farmon hamda qarorlari qabul qilindi. 
Dasturchilarni qo‘llab-quvvatlash borasida muntazam chora-tadbirlar amalga
oshirilayotir.Prezidentimiz   tomonidan   joriy   yilning   20   sentyabrida   imzolangan
“Mamlakatimizning   dasturiy   ta’minot   vositalari   ishlab   chiquvchilarini
rag‘batlantirishni   yanada   kuchaytirish   chora-tadbirlari   to‘g‘risida”gi   qarori   bu
yo‘ldagi navbatdagi muhim qadam bo‘ldi. 
Hozirda davlat hokimiyati va boshqaruvi organlari dasturiy mahsulotlarning
faol   iste’molchisi   hisoblanadi.   Keyingi   vaqtda   mamlakatimizda   vazirlik   va
idoralar,   xo‘jalik   birlashmalari,   yirik   korxonalarning   xarajat   smetasi   va   biznes
rejalarida   ishlab   chiqarish   jarayonlarini   avtomatlashtirish,   axborot   tizimlari   va
resurslarini yaratish, dasturiy mahsulotlar hamda interfaol davlat xizmatlarini joriy
etishga   qaratilgan   xarajatlarni   nazarda   tutish   yuzasidan   tegishli   ishlar   olib
2 borilmoqda.   Joriy  yildan   e’tiboran   davlat   hokimiyati   va  boshqaruvi   organlarining
idoralararo   integratsiyalashgan   axborot   tizimlarini   joriy   etish,   idoralararo
ma’lumotlar   uzatish   tarmoqlarini   yaratish,   “Elektron   hukumat”   tizimini   hamda
internet   tarmog‘ining   milliy   segmentini   shakllantirish   bo‘yicha   loyihalarni
ro‘yobga   chiqarish   uchun   davlat   buyurtmasini   shakllantirish   va   moliyalashtirish
borasidagi   ishlar   boshlab   yuborilgan.   Mazkur   hujjat   dasturiy   ta’minot   sanoatini
rivojlantirish,   davlat   organlarida   ixtisoslashtirilgan   dasturiy   mahsulotlardan
foydalanishni tartibga soluvchi me’yoriy-huquqiy bazani yanada takomillashtirish,
“Elektron hukumat” loyihasini amalga oshirishda mahalliy kompaniyalarning faol
ishtirokini rag‘batlantiradi. 
2006 yildan buyon “Best Soft Uzbekistan” dasturiy mahsulotlar ko‘rgazmasi
tashkil   etib   kelinmoqda.   Milliy   dasturiy   mahsulotlar   ko‘rgazmasida   sohada
erishilgan muvaffaqiyatlar namoyish etilib, mahorat darslari, taqdimotlar va ta’lim
seminarlarida   respublikadagi   soft   industriyaning   dolzarb   loyihalari   va   istiqbollari
sohasining   yetakchi   mutaxassislari   ishtirokida   muhokama   qilinadi.   Ko‘rgazmada
xalqaro   va   mahalliy   kompaniya   —   dasturiy   mahsulotlarni   ishlab   chiqaruvchilar
hamda   integratorlar,   kontent-ishlab   chiqaruvchilar,   provayderlar,   ilmiy   va   ta’lim
muassasalari, vazirliklar, idoralar vakillari ham ishtirok etishadi.
3 I. Nazariy qism
1.1.   Java dasturi haqida.
Java dasturlash tili Oak dasturlash tili asosida paydo bo ldi. Oak dasturlashʻ
tili   90-yillarning   boshida   Sun   Microsystems   tomonidan   platformaga,   ya ni	
ʼ
operatsion   sistemaga   bog liq   bo lmagan   holda   ishlovchi   yangi   avlod   aqlli	
ʻ ʻ
qurilmalarini yaratishni maqsad qilib harakat boshlagan edi. Bunga erishish uchun
Sun   xodimlari   C++ni   ishlatishni   rejalashtirdilar,   lekin   ba zi   sabablarga   ko ra   bu	
ʼ ʻ
fikridan   voz   kechishdi.   Oak   muvofaqiyatsiz   chiqdi   va   1995-yilda   Sun   uning
nomini   Java   ga   almashtirdi   va   uni   WWW   rivojlanishiga   xizmat   qilishi   uc hun
ma lum o zgarishlar qilishdi.	
ʼ ʻ
Java   obyektga yo naltirilgan dasturlash	
ʻ   ( inglizcha :   OOP   —	 Object	 Oriented
Programming )   tili   va   u   C++   ga   ancha   o xshash.   Eng   ko p   yo l   qo yildigan	
ʻ ʻ ʻ ʻ
xatolarga   sabab   bo luvchi   qismlari   olib   tashlanib,   Java   dasturlash   tili   ancha	
ʻ
soddalashtirildi.
Java   kod   yozilgan   fayllar   ( *.java   bilan   nihoyalanuvchi)   kompilatsiyadan
keyin   bayt   kod   ( inglizcha :   bytecode )   ga   o tadi   va   bu   bayt   kod	
ʻ   Java   Virtual
Mashinasi JVM   tomonidan o qib yurgizdiriladi.	
ʻ
Java afzalliklari:
 WORA   —   ( inglizcha :   Write	
 Once,	 Run	 Anywhere   -   portable).   Platforma
tanlamaydi;
 xavfsizlik (ishonch yo q kodni xavfsiz ishga tushirish);	
ʻ
 xotirani xavfsiz boshqarish (avtomat ravishda chiqindilarni yig adi);	
ʻ
 tarmoq uchun dasturlar yozish   ;
 ko p oqimli (	
ʻ inglizcha :   Multi-thread ) dasturlash;
 dinamik & kengaytirish;
Class lar alohida fayllarda saqlanadi. Kerak bo lsa ishlatiladi. Dinamik ravishda	
ʻ
imkoniyatini oshirish xam mumkin kerak bo lsa.	
ʻ
Java   SE   (inglizcha:   Java   Standart   Edition)   —   serverda,   shaxsiy   kompyuterda
desktoplarda   ishlovchi   dasturlar,   appletlar   yaratish   uchun   ishlatiladi.   Bu
4 texnologiya   yordamida   yaratilgan   dasturlar   deyarli   barcha   operatsion   tizimlarda
ishlay oladi (Windows NT, Macintosh, Linux va Solaris). Shu bilan birga JavaSE
boshqa Java turlarining asosi hisoblanadi.
JVM (Java Virtual mashinasi) JVM ning vazifasi tarjimonlik ya’ni, dastlab biz
yozgan   *.java   fayl   kompilyator   yordamida   bayt   kod   ga   o’giriladi   va   JVM
yordamida   esa   mashina   tiliga   aylantiriladi.   Bu   degani   JVM   qaysi   platformaga
tegishli   bo’lsa,   kodlarni   ham   o’sha   platformaga   moslab   beradi.   JVM   ni   ko’pgina
qurilmalar va dasturiy ta’minotlar uchun ishlatish mumkin. Har bir OT(operatsion
tizim)   uchun   JVM   JRE   va   JDK   lar   konfiguratsiyasi   farq   qiladi,   chunki   bular
platformaga bog’liq. Lekin java mustaqil platforma hisoblanadi.
JVM ning amalga oshiradigan asosiy vazifalari
Loads code (kod yuklanishi)
Verifies code (kod tekshirilishi)
Executes code (kod bajarilishi)
Provides runtime environment (dasturni bajarilish muhitini ta’minlash)
JRE (Java bajarilish muhiti)
JRE – Java Runtime Environment
JRE – bu faqat dastur bajarilishi uchun kerak bo`lgan muhit xolos. Dasturchi
bo`lmagan   oddiy   foydalanuvchilarga   Java   dasturlari   bajarilishi   uchun   JRE
yetarlidir.
JDK(Java   Development   Kid)   -   JDK   tarkibida   JRE   va   boshqa   qo'shimcha
dasturlash uskunalari bo'ladi
5 1.2.  Android studio ishchi oynasi.
1-rasm
Android   Studio   nomidan   ham   malumki   bu   Android   OS da   ishlovchi
qurilmalarga dastur tuzishda kerak bo‘ladigan kompyuter dasturi.  IT gegantlaridan
hisoblanmush   Google   kompaniyasiga   tegishli   bo‘lib   Android   Dasturchilarga
android   dastur   yaratishda   yeng   ko‘p   qullaniladigan   dastur   Play   Store   bozoridagi
50% idan ko‘p android dasturlar aynan manashu dastur yordamida yaratilgan .
Android   Studioda   Java,   Kotlin,   Xml   dasturlash   tillari   yordamida   istalgan
android   dasturni   yaratish   mumkin   faqatgina   yuqoridagi   tillarni   bilgan   holda,
shaxsan   mening   o‘zim   Java   dasturlash   tilidan   foydalangan   xolda   android   dastur
yarataman.
6 2-rasm
Strelkada ko’rsatilgan soha android studioning menyular satri hisoblanadi.
Ko`rinib turibdiki android studioning menyular satriga quyidagilar kiradi:
File-menusi.
7 Edit-menusi
View menusi
Build menusi
8 Run menusi
Tools menu
9 Windows menu
Android studio fayl turlari
10 II. Asosiy qism
2.1 Android Studioda fonlarni joylshtirish.
Avvalo android studioda yangi proekt yaratamiz.
Empty Views Activity qismini tanlab Next tugmasini bosamiz.
11 Android Studio turli xil vaziyatlar uchun bir qator shablonlarni taqdim etadi,
ammo eng keng tarqalgani Basic Activity va Empty Activity. Bu ko’plab 
dasturlami yaratish uchun eng qulay start-up shablonlari. Endi boshlang'ich holat 
bo'yicha Empty Activity shabloni tanlanadi (agar tanlanmagan bo'lsa, uni tanlang) 
va Next tugmasini bosing. Shundan so'ng, yangi loyiha sozlamalari oynasi 
ko'rsatiladi
Name joyiga proekt nomini yozamiz. Language degan joyiga kotlin yoki 
javani tanlaymiz. Men javada ishlayman.
Yangi   loyihani   yaratish   oynasida   biz   uning   dastlabki   sozlamalarini
o'rnatamiz: 
> llova nomi Name maydoniga kiritiladi. HelloApp ismini nom sifatida ko’rsating.
>   Package   Name   maydoni   asosiy   dastur   sinfini   joylashtiradigan   paket   nomini
belgilaydi.   Bunday   holda,   test   loyihalari   uchun   bu   qiymat   juda   muhim   emas,
shuning uchun com.example.helloapp-ni o’mating. 
>   Save   Location   maydoni   qattiq   diskdagi   loyiha   fayllarining   joylashishini
belgilaydi. Boshlang'ich holatbo'yicha qoldirishimiz mumkin. 
12 > Language maydonida biz Java dasturlash tili sifatida ko'rsatamiz (ehtiyot bo'Iing,
chunki boshlang'ich holat bo’yicha ushbu maydonda Kotlin dasturlash tili mavjud)
>   Minimum   SDK   maydoni   eng   kichik   qo'llab-quwatlanadigan   SDK   versiyasini
belgilaydi.   Standart   -   API   21:   Android   5.0   (Lollipop)   ni   tark   etamiz,   demak
bizning dasturimiz Android 5.0 dan boshlab ishga tushirilishi mumkin, ya'ni 94%
qurilmalar.   Eski   qurilmalar   ishlay   oimaydi.   Shuni   esda   tutish   kerakki,   SDK
versiyasi   qanchalik   yuqori   bo'lsa,   qo’llabquwatlanadigan   qurilmalar   diapazoni
shunchalik   kichik   bo'ladi.   Keyin   Finish   tugmachasini   bosing   va   Android   Studio
yangi loyihani yaratadi:
Loyihamda quyidagicha fayllar bor:
13 2.2  Android studioda “Fon rasmlari” mobil ilovasini yaratish
Fon rasmlari mobil ilovasi ko’rinishi quyidagicha bo’ladi:
Yoqtirgan fon rasmlari
Fon rasmlar
14 Ilovaga kirgandagi iconka
Kolleksiya uchun fonlar
15 MainActivity.xml kodi
<? xml version ="1.0"  encoding ="utf-8" ?>
<RelativeLayout
     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 :layout_width ="match_parent"
     android :layout_height ="match_parent"
     tools :context =".activities.MainActivity" >
    <RelativeLayout
         android :layout_width ="match_parent"
         android :layout_height ="match_parent" >
        <androidx.appcompat.widget.Toolbar
             android :id ="@+id/toolbar"
             android :layout_width ="match_parent"
             android :layout_height ="?android:attr/actionBarSize"
             android :background ="@color/colorLight"
             android :elevation ="5dp"
             app :title ="@string/app_name"  />
        <fragment
             android :id ="@+id/wallsFragment"
            
android :name ="com.shubhamgupta16.simplewallpaper.fragments.WallsFragment"
             android :layout_width ="match_parent"
             android :layout_height ="match_parent"
             android :layout_above ="@id/adView"
             android :layout_below ="@id/toolbar"
             tools :layout ="@layout/fragment_reycler"  />
        <fragment
             android :id ="@+id/categoryFragment"
            
android :name ="com.shubhamgupta16.simplewallpaper.fragments.CategoryFragment"
             android :layout_width ="match_parent"
             android :layout_height ="match_parent"
             android :layout_above ="@id/adView"
             android :layout_below ="@id/toolbar"
             tools :layout ="@layout/fragment_reycler"  />
        <fragment
             android :id ="@+id/favoriteFragment"
            
android :name ="com.shubhamgupta16.simplewallpaper.fragments.WallsFragment"
             android :layout_width ="match_parent"
             android :layout_height ="match_parent"
             android :layout_above ="@id/adView"
             android :layout_below ="@id/toolbar"
             tools :layout ="@layout/fragment_reycler"  />
        <com.google.android.gms.ads.AdView
             android :layout_above ="@id/bottomNav"
             xmlns: ads ="http://schemas.android.com/apk/res-auto"
             android :id ="@+id/adView"
             android :layout_width ="match_parent"
             android :layout_height ="wrap_content"
             ads :adSize ="BANNER"
             ads :adUnitId ="@string/main_banner_id" />
16         <com.google.android.material.bottomnavigation.BottomNavigationView
             android :id ="@+id/bottomNav"
             android :layout_alignParentBottom ="true"
             android :layout_width ="match_parent"
             android :layout_height ="wrap_content"
             android :background ="@color/colorLight"
             app :menu ="@menu/bottom_menu"  />
    </RelativeLayout>
     <!--<com.google.android.gms.ads.AdView 
xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="@string/main_banner_id" />-->
    <!--        <include layout="@layout/no_internet_layout" />-->
    <!--        <include layout="@layout/server_error_layout" />-->
    <!--        <include layout="@layout/splash_layout" />-->
</RelativeLayout>
WallPeperActivity.java kodi
package  com.shubhamgupta16.simplewallpaper.activities;
import  android.Manifest;
import  android.app.AlertDialog;
import  android.content.Intent;
import  android.content.pm.PackageManager;
import  android.graphics.Bitmap;
import  android.graphics.Color;
import  android.graphics.drawable.Drawable;
import  android.os.Build;
import  android.os.Bundle;
import  android.os.Handler;
import  android.os.Looper;
import  android.util.Log;
import  android.view.View;
import  android.widget.ImageView;
import  android.widget.LinearLayout;
import  android.widget.ProgressBar;
import  android.widget.RelativeLayout;
import  android.widget.Toast;
import  androidx.annotation. NonNull ;
import  androidx.annotation. Nullable ;
import  androidx.appcompat.app.AppCompatActivity;
import  androidx.appcompat.widget.Toolbar;
import  androidx.core.app.ActivityCompat;
import  androidx.core.view.ViewCompat;
import  androidx.core.view.WindowCompat;
import  androidx.core.view.WindowInsetsCompat;
import  com.bumptech.glide.Glide;
import  com.bumptech.glide.load.DataSource;
import  com.bumptech.glide.load.engine.DiskCacheStrategy;
17 import  com.bumptech.glide.load.engine.GlideException;
import  com.bumptech.glide.request.RequestListener;
import  com.bumptech.glide.request.target.CustomTarget;
import  com.bumptech.glide.request.target.Target;
import  com.bumptech.glide.request.transition.Transition;
import  com.github.chrisbanes.photoview.PhotoView;
import  com.google.android.gms.ads.AdError;
import  com.google.android.gms.ads.AdRequest;
import  com.google.android.gms.ads.AdView;
import  com.google.android.gms.ads.FullScreenContentCallback;
import  com.google.android.gms.ads.LoadAdError;
import  com.google.android.gms.ads.MobileAds;
import  com.google.android.gms.ads.interstitial.InterstitialAd;
import  com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback;
import  com.google.android.gms.ads.rewarded.RewardedAd;
import  com.google.android.gms.ads.rewarded.RewardedAdLoadCallback;
import  com.shubhamgupta16.simplewallpaper.MainApplication;
import  com.shubhamgupta16.simplewallpaper.R;
import  com.shubhamgupta16.simplewallpaper.data_source.DataService;
import  com.shubhamgupta16.simplewallpaper.models.WallsPOJO;
import  com.shubhamgupta16.simplewallpaper.utils.ApplyWallpaper;
import  com.shubhamgupta16.simplewallpaper.utils.FastBlurTransform;
import  com.shubhamgupta16.simplewallpaper.utils.Utils;
import  java.util.concurrent.ExecutorService;
import  java.util.concurrent.Executors;
public class  WallpaperActivity  extends  AppCompatActivity {
     private static final  String  TAG  =  "WallpaperActivity" ;
     private  Handler  handler ;
     private  Bitmap  imageBitmap ;
     private  DataService  dataService ;
     private  WallsPOJO  pojo ;
     //    Views
     private  ImageView  thumbView ;
     private  PhotoView  photoView ;
     private boolean  showThumbnail  =  true ;
     private  Toolbar  toolbar ;
     private  ProgressBar  progressBar ;
     private  View  topShadow ,  bottomShadow ,  saveButton ,  applyButton , 
favoriteButton ;
     private  LinearLayout  bottomNavLayout ;
     //    ads
     private  InterstitialAd  mInterstitialAd ;
     private  RewardedAd  mRewardedAd ;
     private  AdView  bannerAdView ;
     //    conditions for not showing ads multiple times
     boolean  isInterstitialApplyShown  =  false ;
     boolean  isInterstitialSaveShown  =  false ;
     boolean  isRewardedApplyShown  =  false ;
     boolean  isRewardedSaveShown  =  false ;
     //    dynamic message showing on task complete and ad shown
     private boolean  isProcessCompleted  =  false ;
     private  String  message ;
     private void  processStart (String message) {
         progressBar .setVisibility(View. VISIBLE );
18          this . message  = message;
         isProcessCompleted  =  true ;
    }
     private void  processStopIfDone () {
         if  ( isProcessCompleted ) {
             new  Handler(Looper. getMainLooper ()).postDelayed(() -> {
                 progressBar .setVisibility(View. GONE );
                Toast. makeText ( this ,  message , Toast. LENGTH_SHORT ).show();
            },  800 );
        }
         isProcessCompleted  =  false ;
    }
     @Override
     protected void  onCreate (Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
        setContentView(R.layout. activity_wallpaper );
//        get the wallpaper pojo. if not exist, finish page.
         if  (!getIntent().hasExtra( "pojo" )) {
            Toast. makeText ( this ,  "Image Not Valid!" , 
Toast. LENGTH_SHORT ).show();
            finish();
             return ;
        }
         pojo  = (WallsPOJO) getIntent().getSerializableExtra( "pojo" );
         handler  =  new  Handler(Looper. getMainLooper ());
//        apply full screen
         View mDecorView = getWindow().getDecorView();
        WindowCompat. setDecorFitsSystemWindows (getWindow(),  false );
        getWindow().setStatusBarColor(Color. TRANSPARENT );
        getWindow().setNavigationBarColor(Color. parseColor ( "#01FFFFFF" ));
//        bind xml views
         toolbar  = findViewById(R.id. full_view_toolbar );
         topShadow  = findViewById(R.id. top_shadow );
         bottomShadow  = findViewById(R.id. bottom_shadow );
         thumbView  = findViewById(R.id. thumbView );
         photoView  = findViewById(R.id. photo_view );
         progressBar  = findViewById(R.id. full_progressbar );
         bottomNavLayout  = findViewById(R.id. bottomButtonNav );
         bannerAdView  = findViewById(R.id. adView );
         saveButton  =  bottomNavLayout .getChildAt( 0 );
         applyButton  =  bottomNavLayout .getChildAt( 1 );
         favoriteButton  =  bottomNavLayout .getChildAt( 2 );
//        apply margin for status-bar and navigation-bar
         ViewCompat. setOnApplyWindowInsetsListener (mDecorView, (v, insets) -> 
{
             final int  statusBarHeight = 
insets.getInsets(WindowInsetsCompat.Type. statusBars ()). top ;  // in px
             final int  navigationBarHeight = 
insets.getInsets(WindowInsetsCompat.Type. navigationBars ()). bottom ;  // in px
             RelativeLayout.LayoutParams toolbarLayoutParams = 
(RelativeLayout.LayoutParams)  toolbar .getLayoutParams();
            toolbarLayoutParams.setMargins( 0 , statusBarHeight,  0 ,  0 );
             toolbar .setLayoutParams(toolbarLayoutParams);
            RelativeLayout.LayoutParams navLayoutLayoutParams = 
(RelativeLayout.LayoutParams)  bannerAdView .getLayoutParams();
            navLayoutLayoutParams.setMargins( 0 ,  0 ,  0 , navigationBarHeight);
19              bannerAdView .setLayoutParams(navLayoutLayoutParams);
             return  WindowInsetsCompat. CONSUMED ;
        });
//        init helpers and ads
         dataService  = MainApplication. getDataService (getApplication());
        initAd();
        loadInterstitial();
//        init views
         setupBottomNav();
         toolbar .setNavigationOnClickListener(v -> finish());
         if  ( pojo .isPremium()) {
            findViewById(R.id. premiumImage ).setVisibility(View. VISIBLE );
        }
         photoView .setOnPhotoTapListener((view, x, y) -> toggleTouch());
         photoView .setZoomable( false );
//        load blur image into photoView
        
Glide. with ( this ).asBitmap().load( pojo .getPreviewUrl()).diskCacheStrategy(Disk
CacheStrategy. DATA ).into( new  CustomTarget<Bitmap>() {
             @Override
             public void  onResourceReady ( @NonNull  Bitmap resource,  @Nullable 
Transition<?  super  Bitmap> transition) {
                 if  (! showThumbnail )  return ;
                 thumbView .setAlpha( 0f );
                 thumbView .setImageBitmap(FastBlurTransform. apply (resource,  1 ,
10 ));
                 thumbView .animate().withEndAction(() -> 
thumbView .setAlpha( 1f )).alpha( 1f ).setDuration( 300 ).start();
            }
             @Override
             public void  onLoadCleared ( @Nullable  Drawable placeholder) {
            }
        });
         handler .postDelayed( this ::loadHD,  500 );
    }
     private void  loadHD () {
        Glide. with ( this ).asBitmap().load( pojo .getUrl()).listener( new 
RequestListener<Bitmap>() {
             @Override
             public boolean  onLoadFailed ( @Nullable  GlideException e, Object 
model, Target<Bitmap> target,  boolean  isFirstResource) {
                 showThumbnail  =  false ;
                Toast. makeText (WallpaperActivity. this ,  "Failed!" , 
Toast. LENGTH_SHORT ).show();
                finish();
                 return true ;
            }
             @Override
             public boolean  onResourceReady (Bitmap resource, Object model, 
Target<Bitmap> target, DataSource dataSource,  boolean  isFirstResource) {
                 imageBitmap  = resource;
                 showThumbnail  =  false ;
                 photoView .setZoomable( true );
                 handler .postDelayed( () ->  thumbView .setImageBitmap( null ), 
1000 );
                 progressBar .setVisibility(View. GONE );
                 return false ;
20             }
        }).into( new  CustomTarget<Bitmap>() {
             @Override
             public void  onResourceReady ( @NonNull  Bitmap resource,  @Nullable 
Transition<?  super  Bitmap> transition) {
                 photoView .setAlpha( 0f );
                 photoView .setImageBitmap(resource);
                 photoView .animate().withEndAction(() -> 
thumbView .setAlpha( 1f )).alpha( 1f ).setDuration( 300 ).start();
            }
             @Override
             public void  onLoadCleared ( @Nullable  Drawable placeholder) {
            }
        });
    }
     private void  initAd () {
        MobileAds. initialize ( this , initializationStatus -> {
        });
        AdRequest adRequest =  new  AdRequest.Builder().build();
         bannerAdView .loadAd(adRequest);
    }
     private void  showInterstitial ( boolean  isForSaveImage) {
         if  ( mInterstitialAd  !=  null ) {
             mInterstitialAd .setFullScreenContentCallback( new 
FullScreenContentCallback() {
                 @Override
                 public void  onAdDismissedFullScreenContent () {
                     super .onAdDismissedFullScreenContent();
                     mInterstitialAd  =  null ;
                    processStopIfDone();
                    loadInterstitial();
                }
                 @Override
                 public void  onAdFailedToShowFullScreenContent ( @NonNull 
AdError adError) {
                     super .onAdFailedToShowFullScreenContent(adError);
                     mInterstitialAd  =  null ;
                    processStopIfDone();
                }
                 @Override
                 public void  onAdShowedFullScreenContent () {
                     super .onAdShowedFullScreenContent();
                     if  ( isForSaveImage ) {
                         isInterstitialSaveShown  =  true ;
                    }  else  {
                         isInterstitialApplyShown  =  true ;
                    }
                }
            });
             mInterstitialAd .show( this );
        }  else  {
            processStopIfDone();
        }
    }
     private void  loadInterstitial () {
//        never load interstitial for premium wallpaper
21          if  ( pojo .isPremium())  return ;
        InterstitialAd. load ( this , 
getString(R.string. set_wallpaper_interstitial_id ),  new 
AdRequest.Builder().build(),  new  InterstitialAdLoadCallback() {
             @Override
             public void  onAdLoaded ( @NonNull  InterstitialAd interstitialAd) {
                 super .onAdLoaded(interstitialAd);
                 mInterstitialAd  = interstitialAd;
            }
        });
    }
     private void  setupBottomNav () {
         final  ImageView heartImage = 
favoriteButton .findViewById(R.id. heartImage );
         if  ( dataService .isFavorite( pojo .getUrl()))
            heartImage.setImageResource(R.drawable. ic_baseline_favorite_24 );
         else
            
heartImage.setImageResource(R.drawable. ic_baseline_favorite_border_24 );
//        save button click
         saveButton .setOnClickListener(view -> {
             if  (isStoragePermissionNotGranted()) {
                ActivityCompat. requestPermissions (WallpaperActivity. this ,
                         new  String[]
{Manifest.permission. WRITE_EXTERNAL_STORAGE },  1 );
                 return ;
            }
             if  ( pojo .isPremium() && ! isRewardedSaveShown ) {
                showWatchAdDialog( true );
                 return ;
            }
            saveImage();
        });
//        apply button click
         applyButton .setOnClickListener(view -> {
             if  ( pojo .isPremium() && ! isRewardedApplyShown ) {
                showWatchAdDialog( false );
                 return ;
            }
            askOrApplyWallpaper();
        });
//        favorite button click
         favoriteButton .setOnClickListener(view -> {
             if  ( dataService .isFavorite( pojo .getUrl())) {
                 dataService .toggleFavorite( pojo ,  false );
                
heartImage .setImageResource(R.drawable. ic_baseline_favorite_border_24 );
            }  else  {
                 dataService .toggleFavorite( pojo ,  true );
                
heartImage .setImageResource(R.drawable. ic_baseline_favorite_24 );
            }
        });
    }
     public boolean  isStoragePermissionNotGranted () {
//        if api is below 29 and above/equal 23, WRITE_EXTERNAL_STORAGE 
required
         if  (Build.VERSION. SDK_INT  < Build.VERSION_CODES. Q  && 
22 Build.VERSION. SDK_INT  >= Build.VERSION_CODES. M ) {
             return 
checkSelfPermission(Manifest.permission. WRITE_EXTERNAL_STORAGE ) != 
PackageManager. PERMISSION_GRANTED ;
        }  else  {
             return false ;
        }
    }
     @Override
     public void  onRequestPermissionsResult ( int  requestCode,  @NonNull  String[]
permissions,  @NonNull  int [] grantResults) {
         super .onRequestPermissionsResult(requestCode, permissions, 
grantResults);
         if  (grantResults. length  >  0  && grantResults[ 0 ] == 
PackageManager. PERMISSION_GRANTED ) {
            saveImage();
        }
    }
     private void  saveImage () {
         if  ( imageBitmap  ==  null  ||  pojo  ==  null )  return ;
        Log. d ( "TAG" ,  "saveImage: called" );
         if  (isStoragePermissionNotGranted())
             return ;
//        saving
         processStart( "Image Saved Successfully!" );
         final boolean  isSaved = Utils. save ( this ,  imageBitmap , 
getString(R.string. app_name ),
                 pojo .getName().replaceAll( " \\ s " ,  "_" ));
//        delay of 500ms
         new  Handler(Looper. getMainLooper ()).postDelayed(() -> {
             if  ( isSaved ) {
                 if  ( isInterstitialSaveShown )
                    processStopIfDone();
                 else
                     showInterstitial( true );
            }  else  {
                 message  =  "Error while saving image." ;
                processStopIfDone();
            }
        },  500 );
    }
     private void  askOrApplyWallpaper () {
        View v = getLayoutInflater().inflate(R.layout. layout_set_on ,  null );
         if  (Build.VERSION. SDK_INT  >= Build.VERSION_CODES. N ) {
            AlertDialog dialog =  new 
AlertDialog.Builder(WallpaperActivity. this )
                    .setView(v).create();
            v.findViewById(R.id. on_home_screen_btn ).setOnClickListener(view -
> {
                 dialog .dismiss();
                applyWallpaper( 1 );
            });
            v.findViewById(R.id. on_lock_screen_btn ).setOnClickListener(view -
> {
                 dialog .dismiss();
                applyWallpaper( 2 );
            });
            v.findViewById(R.id. on_both_screen_btn ).setOnClickListener(view -
23 > {
                 dialog .dismiss();
                applyWallpaper( 3 );
            });
            dialog.show();
        }  else  {
            applyWallpaper( 0 );
        }
    }
     @Override
     public void  finish () {
        Log. d ( TAG ,  "finish: called -> "  + ( mInterstitialAd  !=  null ));
         if  (!(getApplication()  instanceof  MainApplication)) {
             super .finish();
        }
         final  MainApplication mainApplication = (MainApplication) 
getApplication();
         if  ( mInterstitialAd  !=  null  && ! isInterstitialApplyShown  && !
isInterstitialSaveShown  && mainApplication.canShowInterstitial()) {
             mInterstitialAd .setFullScreenContentCallback( new 
FullScreenContentCallback() {
                 @Override
                 public void  onAdDismissedFullScreenContent () {
                     super .onAdDismissedFullScreenContent();
                     mInterstitialAd  =  null ;
                    finish();
                }
                 @Override
                 public void  onAdFailedToShowFullScreenContent ( @NonNull 
AdError adError) {
                     super .onAdFailedToShowFullScreenContent(adError);
                     mInterstitialAd  =  null ;
                    finish();
                }
                 @Override
                 public void  onAdShowedFullScreenContent () {
                     super .onAdShowedFullScreenContent();
                     mainApplication .interstitialShown();
                }
            });
             mInterstitialAd .show( this );
        }  else  {
             super .finish();
        }
//        super.finish();
     }
     private void  toggleTouch () {
         if  ( toolbar .getAlpha() ==  0 ) {
             toolbar .animate().alpha( 1 ).setDuration( 200 );
             topShadow .animate().alpha( 1 ).setDuration( 200 );
             bottomShadow .animate().alpha( 1 ).setDuration( 200 );
             bottomNavLayout .animate().alpha( 1 ).setDuration( 200 );
             saveButton .setClickable( true );
             applyButton .setClickable( true );
             favoriteButton .setClickable( true );
             toolbar .setNavigationOnClickListener(v -> finish());
        }  else  {
             toolbar .animate().alpha( 0 ).setDuration( 200 );
24              topShadow .animate().alpha( 0 ).setDuration( 200 );
             bottomShadow .animate().alpha( 0 ).setDuration( 200 );
             bottomNavLayout .animate().alpha( 0 ).setDuration( 200 );
             saveButton .setClickable( false );
             applyButton .setClickable( false );
             favoriteButton .setClickable( false );
             toolbar .setNavigationOnClickListener( null );
        }
    }
     private void  applyWallpaper ( int  where) {
        processStart(getString(R.string. success_applied ));
        ExecutorService executor = Executors. newSingleThreadExecutor ();
        Handler handler =  new  Handler(Looper. getMainLooper ());
        executor.execute(() -> {
             final boolean  b = ApplyWallpaper. fromBitmap ( this ,  imageBitmap , 
where );
             handler .post(() -> {
                 if  ( b ) {
                     if  ( isInterstitialApplyShown )
                        processStopIfDone();
                     else
                         showInterstitial( false );
                }  else  {
                     message  =  "Failed to apply wallpaper" ;
                    processStopIfDone();
                }
            });
        });
    }
     private void  showWatchAdDialog ( boolean  isForSaveImage) {
         new  AlertDialog.Builder( this )
                .setTitle(R.string. download_premium_title )
                .setPositiveButton(R.string. yes_watch , (dialog1, which) -> 
loadRewardedAd( isForSaveImage ))
                .setNegativeButton(R.string. no_thanks ,  null )
                .create().show();
    }
     private void  loadRewardedAd ( boolean  isForSaveImage) {
         progressBar .setVisibility(View. VISIBLE );
        AdRequest adRequest =  new  AdRequest.Builder().build();
        RewardedAd. load ( this , getString(R.string. rewarded_ad_id ),
                adRequest,  new  RewardedAdLoadCallback() {
                     @Override
                     public void  onAdFailedToLoad ( @NonNull  LoadAdError 
loadAdError) {
                         progressBar .setVisibility(View. GONE );
                        Toast. makeText (WallpaperActivity. this ,  "Failed to 
load Ad." , Toast. LENGTH_SHORT ).show();
                         mRewardedAd  =  null ;
                    }
                     @Override
                     public void  onAdLoaded ( @NonNull  RewardedAd rewardedAd) {
                         progressBar .setVisibility(View. GONE );
                         mRewardedAd  = rewardedAd;
                        showRewardedAd( isForSaveImage );
                    }
                });
    }
25      private void  showRewardedAd ( boolean  isForSaveImage) {
         if  ( mRewardedAd  !=  null ) {
             mRewardedAd .show( this , rewardItem -> {
                 if  ( isForSaveImage ) {
                     isRewardedSaveShown  =  true ;
                    saveImage();
                }  else  {
                     isRewardedApplyShown  =  true ;
                    askOrApplyWallpaper();
                }
            });
        }  else  {
            Log. d ( TAG ,  "The rewarded ad wasn't ready yet." );
        }
    }
     @Override
     protected void  onPause () {
         bannerAdView .pause();
         super .onPause();
    }
     @Override
     protected void  onResume () {
         super .onResume();
         bannerAdView .resume();
    }
     @Override
     protected void  onDestroy () {
         bannerAdView .destroy();
        Intent i =  new  Intent();
        i.putExtra( "id" ,  pojo .getViewType());
        i.putExtra( "fav" ,  dataService .isFavorite( pojo .getUrl()));
        setResult( RESULT_OK , i);
         super .onDestroy();
    }
}
26 Xulosa
Mobil ilova uchun fon rasmlari mavzusi juda maqbul bo'ladi. Bu aqlli 
va estetik jihatdan qulay dizayn yaratilgan. Mavzuga mos, rang va 
kompozitsiyasi ilova umumiy uslubi bilan mos fon rasmlari tanlab olinishi 
lozim. Mukammal dizayn uchun bu muhim. Yuqori sifatli, to'qnash va piksel 
sifati yuqori bo'lgan fon rasmlari tanlab olingan. Bu iqtisodiy va estetik 
muhim. Fon rasmlari ilova, va boshqa komponentlar bilan joylashuv 
menyusi yaratilgan. Bu foydalanuvchini yaxshilaydi.
Fon rasmlari qo'shimcha mavzusi, loyihalari va brending uslubiga mos
kelishi kerak. Bu butun ilova dizaynining yaxlitligini bir xil.
Umumiy qilib aytganda, mobil ilova uchun fon rasmlari mavzusi 
mukammal estetik va iqtisodiy dizayn uchun juda muhim bo'ladi.   Bu loyiha 
ham chiroyli fonlarni bizga taqdim qiladi.
27 Foydalanilgan adabiyotlar
1. К .Паппас, У. Мюррей “Программирование на  java ”, Киев,2000. 
2.   Атымтаева   Л.Б.   “Объектге   бағытталған   программалау   негиздери”.   А:
«Қазақ университети», 2005 
3.   Бьярн   Страуструп.   “Язык   программирования   android   studio ”.   Киев:
Диасофт, 
1993-1,2 часть. 
4. Павловская Т.А. “С/С++ программирование на языке высокого 
уровня”. Санкт-Петербург, 2002г. 
Internet   saytlari :
http :// lessons . itportal . uz / c / c - kompilyatorlari - va - muhiti / 
http :// lessons . itportal . uz / c / c - haqida - va - uning - tarixi / 
http :// software . uz / ru / software / view ? id =1907
28

Fon rasmi ilovasi Mundrija KIRISH .............................................................................................................................................................................. 2 I. Nazariy qism ................................................................................................................................................................. 4 1.1. Java dasturi haqida. ................................................................................................................................................. 4 1.2. Android studio ishchi oynasi. ................................................................................................................................... 6 II. Asosiy qism ................................................................................................................................................................ 11 2.1 Android Studioda fonlarni joylshtirish. ................................................................................................................... 11 2.2 Android studioda “Fon rasmlari” mobil ilovasini yaratish ...................................................................................... 14 Foydalanilgan adabiyotlar ............................................................................................................................................. 28 Internet saytlari: ............................................................................................................................................................ 28 1

KIRISH Bugungi kunda axborot-kommunikatsiya sohasini rivojlantirish-ning asosi hisoblangan dasturiy mahsulotlarni ishlab chiqarish milliy iqtisodiyoti rivojlanishining muhim sharti sifatida alohida ahamiyat kasb etmoqda. Hayotimizning har jabhasida faol qo‘llanilayotgan axborot almashinuv texnologiyalaridan samarali foydalanish ulardagi dasturiy ta’minotlarning o‘ziga xosligi, ommabopligi va innovatsion yangiligiga bog‘liq. “Axborotlashtirish to‘g‘risida”gi, “Telekommuni-katsiyalar to‘g‘risida”gi, “EHM dasturlari va ma’lumotlar bazasini himoya qilish to‘g‘risida”gi qonunlar soha rivojida muhim ahamiyat kasb etmoqda. Bugun yurtimizda axborot-kommunikatsiya texnologiyalari kirib bormagan sohaning o‘zi yo‘q. Bu esa, o‘z navbatida, softver sanoatining izchil rivojlanishiga keng yo‘l ochmoqda. Xususan, hozirgi kunda mamlakatimizda dasturiy mahsulotlarni yaratish, ishlab chiqarish va joriy qilish bilan shug‘ullanuvchi 260 dan ziyod tadbirkorlik sub’ektlari faoliyat yuritmoqda. Mamlakatimizda dasturiy ta’minot sanoatini shakllantirish va rivojlantirish uchun zarur shart-sharoitlar, sohaga daxldor mustahkam qonunchilik bazasini yaratishga e’tibor qaratilmoqda. Hozirgacha 10 dan ziyod qonun, Prezident va Vazirlar Mahka-masining qator farmon hamda qarorlari qabul qilindi. Dasturchilarni qo‘llab-quvvatlash borasida muntazam chora-tadbirlar amalga oshirilayotir.Prezidentimiz tomonidan joriy yilning 20 sentyabrida imzolangan “Mamlakatimizning dasturiy ta’minot vositalari ishlab chiquvchilarini rag‘batlantirishni yanada kuchaytirish chora-tadbirlari to‘g‘risida”gi qarori bu yo‘ldagi navbatdagi muhim qadam bo‘ldi. Hozirda davlat hokimiyati va boshqaruvi organlari dasturiy mahsulotlarning faol iste’molchisi hisoblanadi. Keyingi vaqtda mamlakatimizda vazirlik va idoralar, xo‘jalik birlashmalari, yirik korxonalarning xarajat smetasi va biznes rejalarida ishlab chiqarish jarayonlarini avtomatlashtirish, axborot tizimlari va resurslarini yaratish, dasturiy mahsulotlar hamda interfaol davlat xizmatlarini joriy etishga qaratilgan xarajatlarni nazarda tutish yuzasidan tegishli ishlar olib 2

borilmoqda. Joriy yildan e’tiboran davlat hokimiyati va boshqaruvi organlarining idoralararo integratsiyalashgan axborot tizimlarini joriy etish, idoralararo ma’lumotlar uzatish tarmoqlarini yaratish, “Elektron hukumat” tizimini hamda internet tarmog‘ining milliy segmentini shakllantirish bo‘yicha loyihalarni ro‘yobga chiqarish uchun davlat buyurtmasini shakllantirish va moliyalashtirish borasidagi ishlar boshlab yuborilgan. Mazkur hujjat dasturiy ta’minot sanoatini rivojlantirish, davlat organlarida ixtisoslashtirilgan dasturiy mahsulotlardan foydalanishni tartibga soluvchi me’yoriy-huquqiy bazani yanada takomillashtirish, “Elektron hukumat” loyihasini amalga oshirishda mahalliy kompaniyalarning faol ishtirokini rag‘batlantiradi. 2006 yildan buyon “Best Soft Uzbekistan” dasturiy mahsulotlar ko‘rgazmasi tashkil etib kelinmoqda. Milliy dasturiy mahsulotlar ko‘rgazmasida sohada erishilgan muvaffaqiyatlar namoyish etilib, mahorat darslari, taqdimotlar va ta’lim seminarlarida respublikadagi soft industriyaning dolzarb loyihalari va istiqbollari sohasining yetakchi mutaxassislari ishtirokida muhokama qilinadi. Ko‘rgazmada xalqaro va mahalliy kompaniya — dasturiy mahsulotlarni ishlab chiqaruvchilar hamda integratorlar, kontent-ishlab chiqaruvchilar, provayderlar, ilmiy va ta’lim muassasalari, vazirliklar, idoralar vakillari ham ishtirok etishadi. 3

I. Nazariy qism 1.1. Java dasturi haqida. Java dasturlash tili Oak dasturlash tili asosida paydo bo ldi. Oak dasturlashʻ tili 90-yillarning boshida Sun Microsystems tomonidan platformaga, ya ni ʼ operatsion sistemaga bog liq bo lmagan holda ishlovchi yangi avlod aqlli ʻ ʻ qurilmalarini yaratishni maqsad qilib harakat boshlagan edi. Bunga erishish uchun Sun xodimlari C++ni ishlatishni rejalashtirdilar, lekin ba zi sabablarga ko ra bu ʼ ʻ fikridan voz kechishdi. Oak muvofaqiyatsiz chiqdi va 1995-yilda Sun uning nomini Java ga almashtirdi va uni WWW rivojlanishiga xizmat qilishi uc hun ma lum o zgarishlar qilishdi. ʼ ʻ Java obyektga yo naltirilgan dasturlash ʻ ( inglizcha : OOP   —  Object  Oriented Programming ) tili va u C++ ga ancha o xshash. Eng ko p yo l qo yildigan ʻ ʻ ʻ ʻ xatolarga sabab bo luvchi qismlari olib tashlanib, Java dasturlash tili ancha ʻ soddalashtirildi. Java kod yozilgan fayllar ( *.java bilan nihoyalanuvchi) kompilatsiyadan keyin bayt kod ( inglizcha : bytecode ) ga o tadi va bu bayt kod ʻ Java Virtual Mashinasi JVM tomonidan o qib yurgizdiriladi. ʻ Java afzalliklari:  WORA — ( inglizcha : Write  Once,  Run  Anywhere - portable). Platforma tanlamaydi;  xavfsizlik (ishonch yo q kodni xavfsiz ishga tushirish); ʻ  xotirani xavfsiz boshqarish (avtomat ravishda chiqindilarni yig adi); ʻ  tarmoq uchun dasturlar yozish ;  ko p oqimli ( ʻ inglizcha : Multi-thread ) dasturlash;  dinamik & kengaytirish; Class lar alohida fayllarda saqlanadi. Kerak bo lsa ishlatiladi. Dinamik ravishda ʻ imkoniyatini oshirish xam mumkin kerak bo lsa. ʻ Java SE (inglizcha: Java Standart Edition) — serverda, shaxsiy kompyuterda desktoplarda ishlovchi dasturlar, appletlar yaratish uchun ishlatiladi. Bu 4

texnologiya yordamida yaratilgan dasturlar deyarli barcha operatsion tizimlarda ishlay oladi (Windows NT, Macintosh, Linux va Solaris). Shu bilan birga JavaSE boshqa Java turlarining asosi hisoblanadi. JVM (Java Virtual mashinasi) JVM ning vazifasi tarjimonlik ya’ni, dastlab biz yozgan *.java fayl kompilyator yordamida bayt kod ga o’giriladi va JVM yordamida esa mashina tiliga aylantiriladi. Bu degani JVM qaysi platformaga tegishli bo’lsa, kodlarni ham o’sha platformaga moslab beradi. JVM ni ko’pgina qurilmalar va dasturiy ta’minotlar uchun ishlatish mumkin. Har bir OT(operatsion tizim) uchun JVM JRE va JDK lar konfiguratsiyasi farq qiladi, chunki bular platformaga bog’liq. Lekin java mustaqil platforma hisoblanadi. JVM ning amalga oshiradigan asosiy vazifalari Loads code (kod yuklanishi) Verifies code (kod tekshirilishi) Executes code (kod bajarilishi) Provides runtime environment (dasturni bajarilish muhitini ta’minlash) JRE (Java bajarilish muhiti) JRE – Java Runtime Environment JRE – bu faqat dastur bajarilishi uchun kerak bo`lgan muhit xolos. Dasturchi bo`lmagan oddiy foydalanuvchilarga Java dasturlari bajarilishi uchun JRE yetarlidir. JDK(Java Development Kid) - JDK tarkibida JRE va boshqa qo'shimcha dasturlash uskunalari bo'ladi 5