Making Tafhim App : Lesson 1 : Project Overview

আলহামদুলিল্লাহ, ছুম্মা আলহামদুলিল্লাহ।

আল্লাহুম্মা সল্লি আলা মুহাম্মাদিন আবদিকা ও রাসুলিকা।

আমরা তাফহীমুল কুরআন এ্যাাপের মেকিং এ্যাপ তৈরী করা শুরু করলাম।

আমরা আশা করি  এই ব্লগে দেওয়া আমাদের দেওয়া ইতিপূর্বের ৮ টি লেসন আপনি অনুসরণ করেছেন ।  সে অনুযায়ী এ্যাান্ড্রয়েড স্টুডিও আপনার কম্পিউটারে সেট আপ করেছেন এবং সাফল্যের সাথে এ্যাপ কিভাবে আপনার মোবাইলে রান করতে হয় তা শিখেছেন। এবং একটি নতুন প্রজেক্ট কিভাবে শুরু করতে হয় তা শিখেছেন।

এ্যান্ড্রয়েড স্টুডিও সেটআপ এবং  মোবাাইলে এ্যাপ রান করার জন্য   ইতিপূর্বের  পোস্টগুলো দেখতে পারেন :




   













এবার আমরা এই লেসনে দেখবো যে তাফহীমুল কুরআন সার্চ এ্যাপে মোট কতগুলি এবং কি কি মেথড ব্যবহৃত হয়েছে। আমরা সেই মেথডগুলোর নামের তালিকা এখানে লিখব। এরপর এক একটি মেথড নিয়ে এক একটি লেসনে আলোচনা করবো। মেথডের আলোচন শেষ হলে সেই মেথডগুলো কিভাবেব তাফহীমুল কুরআন সার্চ এ্যাপে ব্যবহার করা হয়েছে সেই লেসন শুরু করব। স্বাভাবিক ভাবেই বুঝতে পারছেন এটি একটি দীর্ঘ আলোচনা ও অনেক লেসনের বিষয় । তাই রিল্যাক্স মুড নিয়ে নিশ্চিন্ত মনে কাজ শুরু করুন ইনশাআল্লাহ।

 মেথড বা লেসন গুলো পড়ে যান এবং আপনার প্রজেক্টে এ্যাপ্লাই করতে থাকুন। যদি কোনটা না বুঝেন  তবে সমস্যা নাই।  এগিয়ে যান।  এ্যাপ্লাই করার সময় যদি কোন এরর  মেসেজ আসে তবে লেসন কমেন্টে জানাবেন আমরা সমাধান দেওয়ার চেষ্টা করব ইনশা আল্লাহ।

এবার আমরা তাফহীমুল কুরআনে ব্যবহৃত  একদম প্রথম থেকে প্যাকেজ,  ক্লাস,  এবং এক্স এম এল  ফাইল  ইত্যাদির নাম  গুলো দেখব :

প্যাকেজ ১ : 
package com.alquran.tafhimul_quran

ক্লাস : 
১. _SplashActivity
২. _StartActivity
৩. AlarmReceiver
৪. Arabic Normalizer
৫. Audio_Al_Quran
৬. B_Character_List
৭. B_Word_List
৮. BB_LastReadSelection
৯. BB_ShowAyahs
১০. Custom_Cursor_Adb
১১. CustomTextViewHtml
১২. ExternalDbOpenHelper
১৩. HighlightAdapter
১৪. HighlightArrayAdapter
১৫. HighlightVumikaAdapter
১৬. ManchitroBornona
১৭. MyExceptionHandler
১৮. PrevItemsAutoComplete
১৯. QuestionsAndAnswers
২০. QuickAyah
২১. ReadingSelection
২২. ReadingVumika
২৩. SaveOnline
২৪. SaveOnlineReadAndSave
২৫. Search_Onubad
২৬. SearchArabic
২৭. SearchSelection
২৮. SearchSuggestion_Arabic
২৯. SearchTafsir
৩০. SearchVumika
৩১. Settings2
৩২. SimpleIME  (কীবোর্ড) 
৩৩. SuggestionSelection
৩৪. TokenActivity (মেইন এ্যাক্টিভিটি) 
৩৫. TokenExplShow  ( ব্যাখ্যা দেখার এ্যাক্টিভিটি) 
৩৬. VumikaAndProsongo
৩৭. VumikaAndProsongoText
৩৮. WebViewActivity (মানচিত্র) 
৩৯. WebViewShow (মানচিত্র) 
৪০. ZekhanePorchilen (যেখানে পড়ছিলেন) 


প্যাকেজ : ২ : 
package com.alquran.tafhimul_quran.InternalSQL;

ক্লাস : 
৪১. Add_member
৪২. DBhelper
৪৩. MainActivitySavedList
৪৪. Modify_member
৪৫. SQLController


প্যাকেজ : ৩ : 
package com.alquran.tafhimul_quran.Spreadsheet_Connection;

ক্লাস : 
৪৬. LoadSpreadSheetData
৪৭. CommentAndZogazog
৪৮. Controller
৪৯. InsertData
৫০. InternetConnection
৫১. Keys
৫২. MyDataModel



এবার  আমরা দেখবো উপরোক্ত বিভিন্ন ক্লাসের আওতায় ( অবশ্য সব ক্লাস নয়)  যে সব এক্সএমএল লেআউট ফাইল ব্যবহৃত হয়েছে । আমরা যখন একটি এ্যাক্টিভিটি ক্লাস এর আলোচনা করবো সেই সাথে তার লে আউট ফাইলও আলোচনা করবো যাতে পূর্নাঙ্গ রূপে ‍বুঝতে পারা যায়। একনজরে

এক্সএমএল লেআউট ফাইলগুলো নিম্নরূপ :

activity_arabic
activity_at_first_screen2
activity_firstscreen
activity_go_to_ayah
activity_go_to_reading
activity_go_to_sura
activity_manchitro_bornona
activity_reading_vumika 
activity_search_selection
activity_suggestion_selection
activity_vumika
activity_vumika_and_prosongo
activity_vumika_and_prosongo_text
activity_web_view
activity_web_view_show
activity_zekhane_porchilen
adb_list_item
add_member
audio_al_quran
b_character_list
b_character_list_item
b_ovidhan_list_item
b_word_list
b_word_list_item
bb_last_read_selection
bb_show_ayahs
bb_showayah_list_item
bibek_team
bibekteam_list_item
comment__zogazog
insert_data
keyboard
layout_ayat_catagory
list_item
list_item_prosongo
main_activity_saved_list
modify_member
online_saved_list_item
preview
questions_and_answers
save_online
save_online_read_save
search__onubad
settings
token_activity
token_adb_list_item
token_exple_show
token_list_item
tokenexple_list_item
view_member_entry




মেনু  (menu) : 
expl_menu
main
menu_ayah
menu_main
popup_menu
token_view_menu



র (RAW) : 

bismillah.mp3 




ভ্যালুস ( Values)  : 
001manchitroBornona
ayatnuber
bed_background
colors
dbAnubad1
dbarabic
dimens
districts
ovidhan_arabic
ovidhan_bn
strings
styles
sura_names
tikaNumber

XML : 
method
qwerty (keyboard) 



আমি  আপনাদেরকে অনুরোধ করবো গভীর মনযোগ দিয়ে  উপরের লেখাগুলো একটা একটা খুটিয়ে খুটিয়ে পড়ুন যেন হৃদয়ংগম হয়। তাহলে  আমি যখন ইনশাআল্লাহ আলোচনা করবো তখন সহজেই বুঝতে পারেন যেন।  মানুষের ভাষাকে কম্পিউটারের ভাষায় পরিণত করার নামই হচ্ছে প্রোগ্রমিং। তাই আমরা যেকোন মেথডের নাম এমন ভাবে রাখতে পারি যাতে দেখলে সহজেই বুঝতে পারি তা কেন তৈরী করেছিলাম।


পরবর্তী লেসনে আমরা দেখবো উপরোক্ত এক একটা ক্লাস এ কী কী মেথড ব্যবহার করা হয়েছে। এরপর আমরা একেকটি মেথড নিয়ে একেকটি লেসনে আলোচনা করব, ইনশাআল্লাহ।


১।  splash  : 

 ১। কীভাবে লেআউট ছাড়াই থীম কাষ্টমাইজ করে একটি splash  এ্যাকটিভিটি তৈরী করা যায়।
 স্টাইল ফাইল কী ?  মেনিফেস্ট ফাইল কী ? মেনিফেস্ট ফাইলের মাধ্যমে স্টাইল থীম এ্যাক্টিভিটিতে ব্যবহার করা । স্টাইলে ড্রয়েবল ফাইল ব্যবহার করা ।
২। মেডিয়াপ্লেয়ার  বাজানো।
৩। অডিওম্যানেজারের মাধ্যমে ডিভাইসের সাউন্ড প্রোগ্রামাটিক্যালি বাড়ানো।
৪। কোান একটি কাজকে নির্দিষ্ট সময় পরে করানো । ( Handler / Runnable)
৫। মিডিয়াপ্লেয়ার বন্ধ করার মেথড । ( killMediaplayer () ) 




২।  _StartActivity : 

 ১। কীভাবে  Context  কে গ্লোবাল ভেরিয়েবল হিসেবে অনক্রিয়েটে ইনিশিয়ালাইজ করে এ্যাক্টিভিটির যে কোন স্থানে ব্যবহার করা যায়। ( mContext = this ;)
২। কীভাবে শেয়ার্ড প্রিফারেন্স ব্যবহার করে কোন কিছুকে সেভ করে রাখা যায় ? এবং এ্যাপের সেটিংস সেভ করার জন্য কিভাবে শেয়ার্ড প্রিফারেন্স ব্যবহার করা হয় ?
৩। কীভাবে বাটন ক্লিকের মাধ্যমে যে কোন এ্যাক্টিভিটি ওপেন করা যায়। Intent  এর ব্যবহার । putExtra  এর সাহায্যে intent  ব্যবহার করে  কোন স্ট্রিংকে পরবর্তী এ্যাাক্টিভিটিতে প্রেরণ করা এবং পরবর্তী এ্যাক্টিভিটিতে তা গ্রহণ করার পদ্ধতি।
৪। টেক্সট ভিউ কী ? টেক্সট ভিউকে কীভাবে লিংক ক্লিকেবল করা যাায় যা বাটনের মত ব্যবহৃত হবে ?
৫। টেক্সট ভিউতে এইচটিএমএল ফরমেট সেট করা ।
৬। টেক্সট ভিউতে কিভাবে আন্ডারলাইন   যোগ করা যায়।
৭। কিভাবে FloatingActionButton  যোগ করা যায়।
৮। ফ্লোটিং এ্যাকশন বাটনের মাধ্যমে কোন এ্যাক্টিভিটি ওপেন করা।
৯। টোস্ট কী ? কীভাবে টোস্ট প্রদর্শন করতে হয়।
১০। ভয়েড মেথড কি ? বাটন ক্লিকের  মাধ্যমে কীভাবে েএকটি ভয়েড মেথড রান করানো যায়।
১১।  বাটন ক্লিকের মাধ্যমে  কীভাবে এক্সটার্নাল ওয়েব ব্রাউজারে একটি ইউআরএল ওপেন করা যায়।
১২। কীভাবে একই মোবাইলে একটি এ্যাপ থেকে বাটন ক্লিকের মাধ্যমে আরেকটি এ্যাপ ওপেন করা যায় ?
১৩। এ্যালার্ট ডায়লগ কী ? কীভাবে ভয়েড মেথডের মাধ্যমে বাটন ক্লিক করে একটি এ্যালার্ট ডায়লগ প্রদর্শন করা যায় ?  (   যেমন : showPrivacyPolicy()  )  এ্যালার্ট ডায়লগে কীভাবে একটি টেক্সট ফাইল প্রদর্শন করানো যায় ? এ্যালার্ট ডায়লগের বাটন ক্লিকের মাধ্যমে কিভাবে শেয়ার্ড প্রিফারেন্সে  ষ্ট্রিং সেভ  করে রাখা যায়, যে অনুযায়ী পরবর্তীতে কাজ সম্পাদিত হবে ?
১৪। কীভাবে শেয়ার মেনু প্রদর্শন  করা যায় ?
১৫ । শেয়ার্ড প্রিফারেন্স ব্যবহার করে এ্যাক্টিভিটির শুরুতেই কোন ডায়লগ প্রদর্শন কে নিয়ন্ত্রণ করা । ( যেমন : beginActivity()  )

১৬। এ্যাক্টিভিটির শুরুতেই  একাধিক  রান টাইম পারমিশন প্রদর্শন  এবং নিয়ন্ত্রণ করা ।
১৭।  ইউজার কতৃক প্রদত্ত পারমিশন অনুযায়ী কাজ সম্পাদন করা ( onRequestPermissionsResult ) 
১৮। ভয়েড মেথডে কীভাবে প্যারামিটার ব্যবহার করা হয় ।



৩। AlarmReceiver

 ১। কীভাবে BroadCastReceiver  এর মাধ্যমে নির্দিষ্ট সময় পর  নোটিফিকেশন পাঠানো যায় ?
২। নতুন সিস্টেমে এবং পুরাতন সিস্টেমে নোটিফিকেশন ম্যানেজার ।
৩। নোটিফিকেশন আসলে স্ক্রীন অন হয়ে যাবে । ( turnScreenOn)



৪।  Normalizer  

১।  সার্চ এর সুবিধার জন্য  কীভাবে  Normalizer  এর মাধ্যমে এ্যাারাবিক জের জবর সহ শব্দকে জের জবর হীন শব্দে রূপান্তরিত করা যায়। (SearchArabic.java) 



৫। Audio_Al_Quran

১। লিস্ট ভিউ কি ?
২। লিস্ট ভিউতে এ্যাডপ্টার ছাড়াই শুধুমাত্র এক্সএমএল  এর মাধ্যমেই লিস্ট প্রদর্শন করা যায় কিভাবে । (android:entries="@array/suranames" ) 
৩। লিস্ট ভিউয়ের রো  তে ক্লিক করে উক্ত রো এর টেক্সট গ্রহণ করা ।
৪। লিস্ট ভিউতে ক্লিক করে শেয়ার্ড প্রিফারেন্স এর ভ্যালূ গ্রহণ করা ।
৫। লিস্ট ভিউতে ক্লিক করে কোন মেথড রান করা ।  এ্যালার্ট ডায়লগ প্রদর্শন করা ।
৬। এ্যালার্ট ডায়লগ এ ক্লিক করে মিডিয়া প্লেয়ার চালূ করা ।
৭। যে কোন মেথড অথবা বাটন ক্লিক এর মাধ্যমে কোন  টেক্সটভিউ বা বাটনকে  ভিজিবল অথবা ইনভিজিবল করা ।
৮। অডিও এপিয়াই ব্যবহার করে ইউআরএল থেকে মিডিয়প্লেয়ার বাজানো।
৯।  এক্সটারনাল স্টোরে ডাইরেক্টরী থেকে  মিডিয়া প্লেয়ার বাজানো । (Environment.getExternalStorageDirectory()) 

১০।  স্ন্যাকবার কি ?  এটি কীভাবে প্রদর্শন করা যায় ? ভয়েড প্যারামিটারের মাধ্যমে একই  স্ন্যাকবার কে বিভিন্ন বাক্য দিয়ে প্রদর্শন করা ।

১১। কীভাবে মেইনথ্রেড এর ব্যাকগ্রাউন্ডে কোন কাজ যেমন ডাউনলোড এর কাজ সম্পাদন করা হয় ?   AsyncTask  কি ?  এর প্যারামিটার গুলো কীভাবে ব্যবহৃত হয় ?  ( যেমন :  new downloadAyahInBackGround().execute(downloadUrl,playing_qari_name,savedFileName); ) 

১২।  সেটিংস থেকে শেয়াার্ড প্রিফারেন্স ব্যবহার করে কোন কাজ করা অথবা না করা । ( যেমন : tilawat_save = qarinamepreference.getString("tilawat_save", "on");) - এ অবস্থায় ব্যাকগ্রাউন্ডে তিলাওয়াত সেভ হবে। 


১৩। makeVisibleLayout(); 

১৪।  প্রয়োজনীয় ক্ষেত্রে লোয়ার এসডিকে এবং হায়ার  এসডিকে ব্যবহারের জন্য কোডের বিভিন্নতা অনুযায়ী কোড ব্যবহার  করা । ( if(Build.VERSION.SDK_INT>20) ) 

১৫।  ইউআরএল কে স্ট্রিং এ পরিবর্তন করা । ( stringToURl = new URL(downloadUrl);) 
১৬। মিডিয়া প্লেয়ারকে ব্যাকগ্রাউন্ডে প্রিপেয়ার করা এবং প্রিপেয়ারড লিসেনার সেট করে বাজানো। 
১৭। try / catch  এর মাধ্যমে কোন কাজ করা এবং একসেপশন হলে  catch ব্লকের মধ্যে কোন কাজ করা । 
১৮। ভয়েড মেথডে ইন্টিজার প্যারামিটারের মাধ্যমে মিডিয়াপ্লেয়ারে নির্দিষ্ট সুরা প্লে করা । ( private void playSuraPosition (int suraNumber)  )  
১৯। গ্লোবাল ভেরিয়েবলকে কোন মেথডের মধ্যে প্রয়োজন অনুযায়ী পুনরায় ইনিশিয়াইলাইজ করা । ( nowPlayingAyahNo=1if( suraNumber==1){ totalAyahOfSura=7; nowPlayingAyahNo=2;} )

২০ ।  প্রোগ্রামাটিক্যালি বাটনের টেক্সট পরিবর্তন করা । (txtMpPause.setText("RECITE\nPAUSE"); ) 

২১।  শেয়ার্ড প্রিফারেন্স এ ইন্টিজার সেভ করা।  এবং ইন্টিজার রিট্রিভ করা । ( editor.putInt("nowPlayingAyahNo",nowPlayingAyahNo); ) (nowPlayingAyahNo = qarinamepreference.getInt("nowPlayingAyahNo",0);)

২২। এ্যালার্ট ডায়লগে লিস্ট প্রদর্শন করা এবং নির্দিষ্ট রোতে ক্লিক করলে নির্দিষ্ট কাজ সম্পাদন করা।  যেমন : final CharSequence [] items = {
        "ক্বারী আশ শুরাইম",
        "ক্বারী আবদুর রহমান আস সুদাইস",
২৩। এ্যালার্ট ডায়লগের বাটন ক্লিকের মাধ্যমে শেয়াার্ড প্রিফারেন্সে কোন স্ট্রিং সেভ করা।
২৪। মিডিয়া প্লেয়ারের জন্য সিক বার ব্যবহার করা । সিক বারের বিভিন্ন মেথডে কাজ করা।
২৫। ব্যাকগ্রাউন্ড থ্রেড চলাকালীন অবস্থায় মেইন থ্রেড এ মেসেজ প্রেরণ এবং সেই মেসেজ অনুযায়ী মেইন থ্রেড এ কোন কাজ সম্পাদন করা । যেমন :

Handler myHandler = new Handler(){

    @Override    public void handleMessage (Message msg){

        super.handleMessage(msg);
        switch (msg.what){

            case 0:



২৬। মোবাইলের ব্যাক বাটন নিয়ন্ত্রণ করা । ব্যাক বাট প্রেস করলে চলমান এ্যাক্টিভিটি ফিনিশ না হয়ে রিজিউম হবে এবং ইন্টেন্ট ব্যবহার করে পূর্বের েএ্যাক্টিভিটি চালূ করা । যেমন :
@Overridepublic void onBackPressed() {

    Intent intent = new Intent(Audio_Al_Quran.this,_StartActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);


}
২৭। এ্যাক্টিভিটি পুরোপুরি বন্ধ হওয়াার সময় কোন কাজ সম্পাদন করা । যেমন :
protected void onDestroy()


২৮। একটি পূর্ন লেআউটকে ক্লিকেবল তৈরী করা এবং ক্লিক করার মাধ্যমে কোন কাজ সম্পাদন করা : যেমন :
llbottom = (LinearLayout)findViewById(R.id.llbottom);

llbottom.setOnClickListener(new View.OnClickListener() {
    @Override    public void onClick(View v) {
        killMediaplayer();
        makeInvisibleLayout ();


    }
});

২৯। বাটন ক্লিক এভেন্টের মধ্যে if/else  এর ব্যবহার।


৬. B_Character_List

১। SQLiteDatabase  কিভাবে ওপেন করতে হয় ? 
 ExternalDbOpenHelper এর মাধ্যমে SQLiteDatabase   ওপেন করা । 
২। Cursor  এর মাধ্যমে ডাটাবেজ এর কলাম এর  স্ট্রিংগুলোকে এ্যারেলিস্টে এ্যাড করা। 
৩। এ্যারেলিস্টকে কাস্টম লিস্ট এ্যাডাপ্টারের মাধ্যমে লিস্টভিউতে  প্রদর্শন করা । 
৪। কাাস্টম লিস্ট এ্যাডাপ্টারে লে আউট ইনফ্লেটারের মাধ্যমে লিস্টভিউ এর জন্য  কাস্টম লেআউট ব্যবহার করা।
৫। কাস্টম লেআউটে ব্যবহৃত widget গুলোর কাস্টিং পদ্ধতি । 
৬। ইন্টেন্ট এর মধ্যে স্ট্রিং এক্সট্রা আছে কিনা খোজ করা এবং থাকলে সে অনুযায়ী কাজ সম্পাদন করা ।  
যেমন : if (getIntent().getStringExtra("showLastClickedCharacter")!=null)
৭। বিষয় অভিধানের প্রতিটি পৃষ্ঠার সর্বশেষ পঠিত বিষয় সেভ করে রাখার জন্য শেয়ার্ড প্রিফারেন্স,
 ইন্টেন্ট, সেট অনক্লিক লিসেনার, এবং পারফর্ম ক্লিকের সমন্বিত ব্যবহার।  
৮। কোন কাজ আবশ্যিক ভাবে সম্পাদন করার জন্য Handler  এর ব্যবহার । 
( পারফর্ম ক্লিক এর জন্য হ্যান্ডলার এর ব্যবহার) ।   



পরবর্তী : Lesson - 2 : 





No comments:

Post a Comment