From 9bcb60c3a8adda04ce193d9d0dde54bc36e0da29 Mon Sep 17 00:00:00 2001 From: Iamsdt Date: Tue, 13 Jun 2017 23:57:52 +0600 Subject: [PATCH] Initial commit --- .gitignore | 9 + .idea/gradle.xml | 18 + .idea/misc.xml | 33 ++ .idea/modules.xml | 9 + .idea/runConfigurations.xml | 12 + app/.gitignore | 1 + app/build.gradle | 33 ++ app/proguard-rules.pro | 25 + .../ExampleInstrumentedTest.java | 26 + app/src/main/AndroidManifest.xml | 38 ++ .../androidstyledemo/DetailsActivity.java | 237 +++++++++ .../androidstyledemo/MainActivity.java | 458 ++++++++++++++++++ .../adapter/CustomCursorAdapter.java | 158 ++++++ .../data/DataBaseProvider.java | 133 +++++ .../androidstyledemo/data/DataProvider.java | 264 ++++++++++ .../data/DatabaseOpenHelper.java | 44 ++ .../data/MainWordDBContract.java | 54 +++ .../utilities/ConstantUtills.java | 15 + .../androidstyledemo/utilities/Utility.java | 84 ++++ app/src/main/res/drawable/ic_add.xml | 9 + app/src/main/res/drawable/ic_copyright.xml | 9 + app/src/main/res/drawable/ic_home.xml | 27 ++ app/src/main/res/drawable/ic_icon.xml | 9 + app/src/main/res/drawable/ic_law.xml | 54 +++ app/src/main/res/drawable/ic_lover.xml | 21 + app/src/main/res/drawable/ic_menu_camera.xml | 12 + app/src/main/res/drawable/ic_menu_gallery.xml | 9 + app/src/main/res/drawable/ic_menu_manage.xml | 9 + app/src/main/res/drawable/ic_menu_send.xml | 9 + app/src/main/res/drawable/ic_menu_share.xml | 9 + .../main/res/drawable/ic_menu_slideshow.xml | 9 + .../main/res/drawable/ic_question_mark.xml | 9 + app/src/main/res/drawable/ic_search.xml | 33 ++ app/src/main/res/drawable/ic_settings.xml | 15 + .../main/res/drawable/ic_voice_recording.xml | 129 +++++ .../main/res/drawable/ic_web_development.xml | 24 + app/src/main/res/layout/activity_details.xml | 33 ++ app/src/main/res/layout/activity_main.xml | 63 +++ app/src/main/res/layout/content_details.xml | 20 + app/src/main/res/layout/content_main.xml | 27 ++ app/src/main/res/layout/details_fragment.xml | 68 +++ .../res/layout/main_recycler_view_list.xml | 15 + app/src/main/res/menu/details.xml | 19 + app/src/main/res/menu/main.xml | 20 + app/src/main/res/menu/menu_main.xml | 10 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3358 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5084 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2386 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3179 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4648 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7381 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7008 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 11545 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9442 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 16109 bytes app/src/main/res/raw/ssnewdb.txt | 158 ++++++ app/src/main/res/values/colors.xml | 10 + app/src/main/res/values/dimens.xml | 3 + app/src/main/res/values/strings.xml | 78 +++ app/src/main/res/values/styles.xml | 34 ++ app/src/main/res/xml/searchable.xml | 5 + .../androidstyledemo/ExampleUnitTest.java | 17 + build.gradle | 26 + gradle.properties | 17 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 160 ++++++ gradlew.bat | 90 ++++ settings.gradle | 1 + 69 files changed, 2927 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/blogspot/shudiptotrafder/androidstyledemo/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/DetailsActivity.java create mode 100644 app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/MainActivity.java create mode 100644 app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/adapter/CustomCursorAdapter.java create mode 100644 app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DataBaseProvider.java create mode 100644 app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DataProvider.java create mode 100644 app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DatabaseOpenHelper.java create mode 100644 app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/MainWordDBContract.java create mode 100644 app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/utilities/ConstantUtills.java create mode 100644 app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/utilities/Utility.java create mode 100644 app/src/main/res/drawable/ic_add.xml create mode 100644 app/src/main/res/drawable/ic_copyright.xml create mode 100644 app/src/main/res/drawable/ic_home.xml create mode 100644 app/src/main/res/drawable/ic_icon.xml create mode 100644 app/src/main/res/drawable/ic_law.xml create mode 100644 app/src/main/res/drawable/ic_lover.xml create mode 100644 app/src/main/res/drawable/ic_menu_camera.xml create mode 100644 app/src/main/res/drawable/ic_menu_gallery.xml create mode 100644 app/src/main/res/drawable/ic_menu_manage.xml create mode 100644 app/src/main/res/drawable/ic_menu_send.xml create mode 100644 app/src/main/res/drawable/ic_menu_share.xml create mode 100644 app/src/main/res/drawable/ic_menu_slideshow.xml create mode 100644 app/src/main/res/drawable/ic_question_mark.xml create mode 100644 app/src/main/res/drawable/ic_search.xml create mode 100644 app/src/main/res/drawable/ic_settings.xml create mode 100644 app/src/main/res/drawable/ic_voice_recording.xml create mode 100644 app/src/main/res/drawable/ic_web_development.xml create mode 100644 app/src/main/res/layout/activity_details.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/content_details.xml create mode 100644 app/src/main/res/layout/content_main.xml create mode 100644 app/src/main/res/layout/details_fragment.xml create mode 100644 app/src/main/res/layout/main_recycler_view_list.xml create mode 100644 app/src/main/res/menu/details.xml create mode 100644 app/src/main/res/menu/main.xml create mode 100644 app/src/main/res/menu/menu_main.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/raw/ssnewdb.txt create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/main/res/xml/searchable.xml create mode 100644 app/src/test/java/com/blogspot/shudiptotrafder/androidstyledemo/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39fb081 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..7ac24c7 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ba7052b --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..60c279f --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..65c9d8a --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,33 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 25 + buildToolsVersion "25.0.3" + defaultConfig { + applicationId "com.blogspot.shudiptotrafder.androidstyledemo" + minSdkVersion 21 + targetSdkVersion 25 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + implementation 'com.android.support:appcompat-v7:25.4.0' + testImplementation 'junit:junit:4.12' + implementation 'com.android.support.constraint:constraint-layout:1.0.2' + implementation 'com.android.support:design:25.4.0' + + implementation 'br.com.mauker.materialsearchview:materialsearchview:1.2.2' +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..948bf50 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in H:\Andriod\ADT_Bundle\android-sdk-windows/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/src/androidTest/java/com/blogspot/shudiptotrafder/androidstyledemo/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/blogspot/shudiptotrafder/androidstyledemo/ExampleInstrumentedTest.java new file mode 100644 index 0000000..0165d9f --- /dev/null +++ b/app/src/androidTest/java/com/blogspot/shudiptotrafder/androidstyledemo/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.blogspot.shudiptotrafder.androidstyledemo; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.blogspot.shudiptotrafder.androidstyledemo", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..402550d --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/DetailsActivity.java b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/DetailsActivity.java new file mode 100644 index 0000000..45f16c3 --- /dev/null +++ b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/DetailsActivity.java @@ -0,0 +1,237 @@ +package com.blogspot.shudiptotrafder.androidstyledemo; + +import android.content.ContentValues; +import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.speech.tts.TextToSpeech; +import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.app.AppCompatDelegate; +import android.support.v7.widget.Toolbar; +import android.transition.Fade; +import android.transition.Slide; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.ScrollView; +import android.widget.TextView; +import android.widget.Toast; + +import com.blogspot.shudiptotrafder.androidstyledemo.data.MainWordDBContract; + +import java.util.Locale; + +public class DetailsActivity extends AppCompatActivity implements + LoaderManager.LoaderCallbacks, + TextToSpeech.OnInitListener { + + //loader id + private static final int ID_DETAIL_LOADER = 321; + //for select data column from database + private static final String[] projection = { + MainWordDBContract.Entry.COLUMN_WORD, + MainWordDBContract.Entry.COLUMN_DESCRIPTION + }; + //id or position for return array + private static final int WORD_ID = 0; + private static final int DESCRIPTION_ID = 1; + //uri from previous activity + private Uri mUri = null; + //view + private TextView wordTV; + private TextView descriptionTV; + + private TextToSpeech toSpeech; + String wordForTTS = null; + + static { + AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_details); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + //assign view + + ScrollView scrollView = (ScrollView) findViewById(R.id.detailsScrollView); + + wordTV = (TextView) findViewById(R.id.details_word); + descriptionTV = (TextView) findViewById(R.id.details_description); + + toSpeech = new TextToSpeech(this,this); + + setupWindowAnimations(); + + //set uri + try { + mUri = getIntent().getData().normalizeScheme(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("Uri can not null"); + } + + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.details_fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + setTTS(wordForTTS); + } + }); + + if (getSupportActionBar() != null) { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + + scrollView.setSmoothScrollingEnabled(true); + + //ini loader + getSupportLoaderManager().initLoader(ID_DETAIL_LOADER, null, this); + } + + //enter + private void setupWindowAnimations() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Fade fade = new Fade(); + fade.setDuration(1000); + getWindow().setEnterTransition(fade); + + Slide slide = new Slide(); + slide.setDuration(1000); + getWindow().setReturnTransition(slide); + } + + } + + + private void setTTS(String selectedWord) { + + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + toSpeech.speak(selectedWord,TextToSpeech.QUEUE_FLUSH,null,null); + + } else { + toSpeech.speak(selectedWord,TextToSpeech.QUEUE_FLUSH,null); + } + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (toSpeech != null) { + toSpeech.stop(); + toSpeech.shutdown(); + } + } + + @Override + protected void onResume() { + super.onResume(); + getSupportLoaderManager().restartLoader(ID_DETAIL_LOADER, null, this); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.details,menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + + int id = item.getItemId(); + + if (id == android.R.id.home){ + onBackPressed(); + + } else if (id == R.id.action_settings){ + //startActivity(new Intent(this, SettingsActivity.class)); + + } else if (id == R.id.action_favourite){ + ContentValues values = new ContentValues(); + values.put(MainWordDBContract.Entry.COLUMN_FAVOURITE,true); + int update = getContentResolver().update(mUri,values,null,null); + + if (update != -1){ + Toast.makeText(this, "Add to favourite", Toast.LENGTH_SHORT).show(); + } + } + + return super.onOptionsItemSelected(item); + } + + @Override + public Loader onCreateLoader(int id, Bundle args) { + + switch (id) { + case ID_DETAIL_LOADER: + return new CursorLoader(this, mUri, + //number of column select + projection, + //we don't need selection agr + null, null, null); + + default: + throw new RuntimeException("Loader Not Implemented: " + id); + } + } + + @Override + public void onLoadFinished(Loader loader, Cursor data) { + + boolean cursorHasValidateData = false; + + if (data != null && data.moveToFirst()) { + cursorHasValidateData = true; + } + + if (!cursorHasValidateData) { + //nothing to display + return; + } + + String word = data.getString(WORD_ID); + String description = data.getString(DESCRIPTION_ID); + + wordForTTS = word; + + wordTV.setText(word); + descriptionTV.setText(description); + } + + @Override + public void onLoaderReset(Loader loader) { + //nothing to do + } + + @Override + public void onInit(int status) { + + if (status != TextToSpeech.ERROR){ + + int result = toSpeech.setLanguage(Locale.US); + + if (result == TextToSpeech.LANG_MISSING_DATA || + result == TextToSpeech.LANG_NOT_SUPPORTED|| + result == TextToSpeech.ERROR_NOT_INSTALLED_YET){ + + Intent installIntent = new Intent(); + installIntent.setAction( + TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); + startActivity(installIntent); + + } + + } + } +} diff --git a/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/MainActivity.java b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/MainActivity.java new file mode 100644 index 0000000..22d1db5 --- /dev/null +++ b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/MainActivity.java @@ -0,0 +1,458 @@ +package com.blogspot.shudiptotrafder.androidstyledemo; + +import android.app.ProgressDialog; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.speech.RecognizerIntent; +import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.app.AppCompatDelegate; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.Toolbar; +import android.text.TextUtils; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.Toast; + +import com.blogspot.shudiptotrafder.androidstyledemo.adapter.CustomCursorAdapter; +import com.blogspot.shudiptotrafder.androidstyledemo.data.MainWordDBContract; +import com.blogspot.shudiptotrafder.androidstyledemo.utilities.ConstantUtills; +import com.blogspot.shudiptotrafder.androidstyledemo.utilities.Utility; + +import java.util.ArrayList; +import java.util.Locale; + +import br.com.mauker.materialsearchview.MaterialSearchView; + +public class MainActivity extends AppCompatActivity + implements + CustomCursorAdapter.ClickListener, + LoaderManager.LoaderCallbacks { + + //loaders id that initialized that's one loader is running + private static final int TASK_LOADER_ID = 0; + + //speech to text + private static final int REQ_CODE_SPEECH_INPUT = 100; + + + //it's also show when data base are loading + ProgressDialog progressDialog; + + private CustomCursorAdapter mAdapter; + + //selected column form database + public static final String[] projection = new String[] + {MainWordDBContract.Entry.COLUMN_WORD}; + + //for words index + public static final int INDEX_WORD = 0; + + static { + //complete add vector drawable support + AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); + } + + + //fab + FloatingActionButton fab; + + MaterialSearchView searchView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + searchView = (MaterialSearchView) findViewById(R.id.search_view); + + setAllSearchOption(); + + //progress dialog for force wait user for database ready + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("Please wait a while"); + progressDialog.setCancelable(false); + + //assign view + RecyclerView recyclerView = (RecyclerView) findViewById(R.id.mainRecycleView); + final LinearLayoutManager manager = new LinearLayoutManager(this, + LinearLayoutManager.VERTICAL, false); + recyclerView.setHasFixedSize(true); + recyclerView.setLayoutManager(manager); + + mAdapter = new CustomCursorAdapter(this, this); + recyclerView.setAdapter(mAdapter); + + /* + Ensure a loader is initialized and active. If the loader doesn't already exist, one is + created, otherwise the last created loader is re-used. + */ + getSupportLoaderManager().initLoader(TASK_LOADER_ID, null, this); + + fab = (FloatingActionButton) findViewById(R.id.main_fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(MainActivity.this, DetailsActivity.class); + + String s = mAdapter.getRandomWord(); + + Uri wordUri = MainWordDBContract.Entry.buildUriWithWord(s); + intent.setData(wordUri); + startActivity(intent); + } + }); + + //fab hide with recycler view scroll + recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + if (dy > 1) + fab.hide(); + else if (dy < 1) + fab.show(); + } + }); + } + + @Override + public void onBackPressed() { + if (searchView.isOpen()) { + // Close the search on the back button press. + searchView.closeSearch(); + } else { + super.onBackPressed(); + } + } + + private void setAllSearchOption(){ + + searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + + Uri uri = MainWordDBContract.Entry.buildUriWithWord(query.toUpperCase()); + Cursor cursor = getContentResolver().query(uri, + MainActivity.projection,null,null,null); + + if (cursor != null && cursor.getCount() > 0){ + Intent intent = new Intent(MainActivity.this, DetailsActivity.class); + intent.setData(uri); + startActivity(intent); + searchView.closeSearch(); + searchView.setCloseOnTintClick(false); + } + + if (cursor != null){ + cursor.close(); + } + return true; + } + + @Override + public boolean onQueryTextChange(String newText) { + + if (newText.length() > 0){ + String selection = MainWordDBContract.Entry.COLUMN_WORD +" like ? "; + String[] selectionArg = new String[]{"%"+newText+"%"}; + + Cursor cursor = getContentResolver().query(MainWordDBContract.Entry.CONTENT_URI, + MainActivity.projection,selection,selectionArg,null); + + if (cursor != null && cursor.getCount() > 0){ + mAdapter.swapCursor(cursor); + } + + return true; + } else { + return false; + } + } + }); + + searchView.setSearchViewListener(new MaterialSearchView.SearchViewListener() { + @Override + public void onSearchViewOpened() { + fab.hide(); + } + + @Override + public void onSearchViewClosed() { + // Do something once the view is closed. + fab.show(); + } + }); + + searchView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + // Do something when the suggestion list is clicked. + String suggestion = searchView.getSuggestionAtPosition(position); + + searchView.setQuery(suggestion, false); + } + }); + +// searchView.setTintAlpha(200); + searchView.adjustTintAlpha(0.8f); + + final Context context = this; + searchView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { + @Override + public boolean onItemLongClick(AdapterView adapterView, View view, int i, long l) { + Toast.makeText(context, "Long clicked position: " + i, Toast.LENGTH_SHORT).show(); + return true; + } + }); + + searchView.setOnVoiceClickedListener(new MaterialSearchView.OnVoiceClickedListener() { + @Override + public void onVoiceClicked() { + askSpeechInput(); + } + }); + } + + @Override + protected void onStart() { + super.onStart(); + //SharedPreferences for database initializing state + // for first time value + + SharedPreferences preferences = getSharedPreferences( + ConstantUtills.DATABASE_INIT_SP_KEY, MODE_PRIVATE); + //sate of database is initialized or not + boolean state = preferences.getBoolean( + ConstantUtills.DATABASE_INIT_SP_KEY, false); + + if (!state) { + progressDialog.show(); + Utility.initializedDatabase(this); + } + } + + @Override + protected void onResume() { + super.onResume(); + + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); + preferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() { + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + //Toast.makeText(SettingActivity.this, "change deced", Toast.LENGTH_SHORT).show(); + if (key.equals(getString(R.string.switchKey))) { + recreate(); + } + + if (key.equalsIgnoreCase(getString(R.string.textSizeKey))) { + mAdapter.notifyDataSetChanged(); + } + } + }); + + searchView.activityResumed(); + + // re-queries for all tasks + getSupportLoaderManager().restartLoader(TASK_LOADER_ID, null, this); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + switch (item.getItemId()) { + case R.id.action_search: + // Open the search view on the menu item click. + searchView.openSearch(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + +// Showing google speech input dialog + + private void askSpeechInput() { + Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); + + intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, + RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); + + intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); + intent.putExtra(RecognizerIntent.EXTRA_PROMPT, + "Speak your desire word"); + try { + startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); + } catch (ActivityNotFoundException a) { + a.printStackTrace(); + slet("Activity not found", a); + Toast.makeText(this, "Sorry Speech To Text is not " + + "supported in your device", Toast.LENGTH_SHORT).show(); + } + } + + // Receiving speech input + +// @Override +// protected void onActivityResult(int requestCode, int resultCode, Intent data) { +// super.onActivityResult(requestCode, resultCode, data); +// +// switch (requestCode) { +// +// case REQ_CODE_SPEECH_INPUT: { +// if (resultCode == RESULT_OK && null != data) { +// +// ArrayList result = data +// .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); +// +// boolean contain = false; +// +// if (contain) { +// Uri uri = MainWordDBContract.Entry.buildUriWithWord(result.get(0)); +// +// Intent intent = new Intent(MainActivity.this, +// DetailsActivity.class); +// intent.setData(uri); +// +// startActivity(intent); +// +// } else { +// Toast.makeText(this, "Sorry word not found", Toast.LENGTH_SHORT).show(); +// } +// +// } +// +// break; +// } +// +// } +// } + + //for loader + @Override + public Loader onCreateLoader(int id, Bundle args) { + return new CursorLoader(this, MainWordDBContract.Entry.CONTENT_URI, projection, null, null, + MainWordDBContract.Entry.COLUMN_WORD); + } + + @Override + public void onLoadFinished(Loader loader, Cursor data) { + + if (progressDialog != null && progressDialog.isShowing()) { + progressDialog.dismiss(); + } + + // Update the data that the adapter uses to create ViewHolders + Log.e("Data", String.valueOf(data.getCount())); + mAdapter.swapCursor(data); + } + + @Override + public void onLoaderReset(Loader loader) { + mAdapter.swapCursor(null); + if (progressDialog != null && progressDialog.isShowing()) { + progressDialog.dismiss(); + } + } + + /** + * onClick listener for recycler view + * called if click any item on recycler view + * + * @param word is the selected word from data base + */ + @Override + public void onItemClickListener(String word) { + Intent intent = new Intent(MainActivity.this, DetailsActivity.class); + Uri wordUri = MainWordDBContract.Entry.buildUriWithWord(word); + intent.setData(wordUri); + startActivity(intent); + searchView.closeSearch(); + } + + /** + * log message methods that's display log only debug mode + * + * @param string message that to display + */ + private static void sle(String string) { + //show log with error message + //if debug mode enable + String Tag = "MainActivity"; + + if (BuildConfig.DEBUG) { + Log.e(Tag, string); + } + } + + /** + * log message methods that's display log only debug mode + * + * @param s message that to display + * @param t throwable that's throw if exception happen + */ + private static void slet(String s, Throwable t) { + //show log with error message with throwable + //if debug mode enable + String Tag = "MainActivity"; + + if (BuildConfig.DEBUG) { + Log.e(Tag, s, t); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == MaterialSearchView.REQUEST_VOICE && resultCode == RESULT_OK) { + ArrayList matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); + if (matches != null && matches.size() > 0) { + String searchWrd = matches.get(0); + if (!TextUtils.isEmpty(searchWrd)) { + searchView.setQuery(searchWrd, false); + } + } + + return; + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + protected void onPause() { + super.onPause(); + } + +// @Override +// protected void onResume() { +// super.onResume(); +// searchView.activityResumed(); +//// String[] arr = getResources().getStringArray(R.array.suggestions); +//// +//// searchView.addSuggestions(arr); +// } + +} diff --git a/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/adapter/CustomCursorAdapter.java b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/adapter/CustomCursorAdapter.java new file mode 100644 index 0000000..6f09e42 --- /dev/null +++ b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/adapter/CustomCursorAdapter.java @@ -0,0 +1,158 @@ +package com.blogspot.shudiptotrafder.androidstyledemo.adapter; + +import android.content.Context; +import android.database.Cursor; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.blogspot.shudiptotrafder.androidstyledemo.MainActivity; +import com.blogspot.shudiptotrafder.androidstyledemo.R; +import com.blogspot.shudiptotrafder.androidstyledemo.data.MainWordDBContract; + +import java.util.ArrayList; +import java.util.Random; + +/** + * SoilScience + * com.blogspot.shudiptotrafder.soilscience.adapter + * Created by Shudipto Trafder on 4/1/2017. + */ + +public class CustomCursorAdapter extends RecyclerView.Adapter { + + // Class variables for the Cursor that holds task data and the Context + private Cursor mCursor; + //private Context mContext; + + private ClickListener clickListener; + + private Context mContext; + + /** + * Constructor for the CustomCursorAdapter that initializes the Context. + * + * @param context the current Context + */ + public CustomCursorAdapter(ClickListener clickListener,Context context) { + this.clickListener = clickListener; + mContext = context; + } + + public void swapCursor(Cursor cursor) { + + mCursor = cursor; + + //check if this is a valid cursor, then update the cursor + if (cursor != null) { + this.notifyDataSetChanged(); + } + } + + @Override + public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.main_recycler_view_list,parent,false); + + return new MyViewHolder(view); + } + + @Override + public void onBindViewHolder(MyViewHolder holder, int position) { + + mCursor.moveToPosition(position); + String word = mCursor.getString(MainActivity.INDEX_WORD); + holder.word.setText(word); + + holder.itemView.setTag(word); + + } + + @Override + public int getItemCount() { + + if (mCursor == null){ + return 0; + } + + return mCursor.getCount(); + } + + //return a random word + public String getRandomWord(){ + + String word = null; + + if (mCursor != null){ + + int size = mCursor.getCount(); + + Random random = new Random(); + int position = random.nextInt(size); + if (position == 0){ + mCursor.moveToPosition(1); + } else { + mCursor.moveToPosition(position); + } + + word = mCursor.getString(MainActivity.INDEX_WORD); + } + return word; + } + + public ArrayList getAllWord(){ + + ArrayList arrayList = new ArrayList<>(); + + if (mCursor != null){ + + mCursor.moveToFirst(); + + for (int i = 0; i < mCursor.getCount(); i++) { + String word = mCursor.getString(MainActivity.INDEX_WORD); + arrayList.add(word); + } + + } + + return arrayList; + } + + + + + public interface ClickListener{ + void onItemClickListener(String s); + } + + // Inner class for creating ViewHolders + class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + + // Class variables for the task description and priority TextViews + TextView word; + + /** + * Constructor for the TaskViewHolders. + * + * @param itemView The view inflated in onCreateViewHolder + */ + MyViewHolder(View itemView) { + super(itemView); + + word = (TextView) itemView.findViewById(R.id.mainRecycleView_TV); + + word.setOnClickListener(this); + + } + + @Override + public void onClick(View v) { + mCursor.moveToPosition(getAdapterPosition()); + int descriptionIndex = mCursor.getColumnIndex(MainWordDBContract.Entry.COLUMN_WORD); + String word = mCursor.getString(descriptionIndex); + clickListener.onItemClickListener(word); + } + } +} diff --git a/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DataBaseProvider.java b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DataBaseProvider.java new file mode 100644 index 0000000..1b4b564 --- /dev/null +++ b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DataBaseProvider.java @@ -0,0 +1,133 @@ +package com.blogspot.shudiptotrafder.androidstyledemo.data; + +import android.content.ContentValues; +import android.content.Context; +import android.content.res.Resources; +import android.net.Uri; +import android.text.TextUtils; +import android.util.Log; + +import com.blogspot.shudiptotrafder.androidstyledemo.R; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +/** + * SoilScience + * com.blogspot.shudiptotrafder.soilscience.data + * Created by Shudipto Trafder on 4/1/2017. + */ + +public class DataBaseProvider { + + /** + * Class for make database + * in runtime + */ + + private Context context; + + public DataBaseProvider(Context context) { + this.context = context; + } + +// public void loadDictionary(){ +// new Thread(new Runnable() { +// @Override +// public void run() { +// try{ +// loadWords(); +// } catch (IOException e){ +// slet("Error in loadind Dictionary on " + +// "Called methods loadwords",e); +// throw new RuntimeException(e); +// } +// } +// }).start(); +// } + + + /** methods for load words in database + * with content provider + * @throws IOException if file not found in raw + */ + + public void loadWords() throws IOException{ + + final Resources resources = context.getResources(); + //resource i + int rawId = R.raw.ssnewdb; + + InputStream stream = resources.openRawResource(rawId); + + //read data + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + + try{ + String line; + + while ((line = reader.readLine())!= null){ + String[] strings = TextUtils.split(line,"="); + + if (strings.length < 1) { + continue; + } + + //those data saved in a array + //first position for array is word + //second position for array is description + + ContentValues values = new ContentValues(); + + //we use trim() for trim unexpected value + values.put(MainWordDBContract.Entry.COLUMN_WORD,strings[0].trim()); + values.put(MainWordDBContract.Entry.COLUMN_DESCRIPTION,strings[1].trim()); + + Uri uri = context.getContentResolver().insert(MainWordDBContract.Entry.CONTENT_URI,values); + + if (uri != null) { + sle("Data status:" + "successfull"); + } + + + } + } catch (IOException e){ + slet(e); + } finally { + reader.close(); + } + + } + + /** + * log message methods that's display log only debug mode + * + * @param string message that to display + */ + private static void sle(String string) { + //show log with error message + //if debug mode enable + String Tag = "DataBaseProvider"; + + + Log.e(Tag, string); + } + + /** + * log message methods that's display log only debug mode + * + * @param t throwable that's throw if exception happen + */ + private static void slet(Throwable t) { + //show log with error message with throwable + //if debug mode enable + String Tag = "DataBaseProvider"; + + + Log.e(Tag, "Error in load word", t); + + } + +} diff --git a/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DataProvider.java b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DataProvider.java new file mode 100644 index 0000000..4a152ac --- /dev/null +++ b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DataProvider.java @@ -0,0 +1,264 @@ +package com.blogspot.shudiptotrafder.androidstyledemo.data; + +import android.content.ContentProvider; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.UriMatcher; +import android.database.Cursor; +import android.database.SQLException; +import android.database.sqlite.SQLiteDatabase; +import android.net.Uri; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import static com.blogspot.shudiptotrafder.androidstyledemo.data.MainWordDBContract.Entry.TABLE_NAME; +import static com.blogspot.shudiptotrafder.androidstyledemo.data.MainWordDBContract.PATH_TASKS; + +/** + * SoilScience + * com.blogspot.shudiptotrafder.soilscience.data + * Created by Shudipto Trafder on 4/1/2017. + */ + +public class DataProvider extends ContentProvider { + + /** + * class for access database + * fill database and query data + */ + + //use to get all data from this path + public static final int TASKS = 100; + //use to get single data from a single row + public static final int TASK_WITH_ID = 101; + //where uri match + private static final UriMatcher sUriMatcher = buildUriMatcher(); + //database helper + DatabaseOpenHelper openHelper; + + /** + * that create a uri + * called before CURID function (ex: insert,delete,update,query) + * + * @return a uri matcher that's help's to detect uri match + * with full table or single data of table row + */ + public static UriMatcher buildUriMatcher() { + + // Initialize a UriMatcher with no matches by passing in NO_MATCH to the constructor + UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); + + /* + All paths added to the UriMatcher have a corresponding int. + For each kind of uri you may want to access, add the corresponding match with addURI. + The two calls below add matches for the task directory and a single item by ID. + */ + uriMatcher.addURI(MainWordDBContract.AUTHORITY, PATH_TASKS, TASKS); + /*for data in a row + here we access data with word column that's is a string + so here path/* + if we access id that is a number then we use + path/# instead of path/* + */ + uriMatcher.addURI(MainWordDBContract.AUTHORITY, PATH_TASKS + "/*", TASK_WITH_ID); + + return uriMatcher; + } + + @Override + public boolean onCreate() { + openHelper = new DatabaseOpenHelper(getContext()); + return true; + } + + @Nullable + @Override + public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { + + //get database from Database open helper + final SQLiteDatabase db = openHelper.getReadableDatabase(); + + //first check database is match with what type + int match = sUriMatcher.match(uri); + + Cursor returnCursor; + + switch (match) { + + case TASKS: + returnCursor = db.query(TABLE_NAME, + projection, + selection, + selectionArgs, + null, + null, + sortOrder + ); + break; + //one row + case TASK_WITH_ID: + // Get the id from the URI + String word = uri.getPathSegments().get(1); + // Selection is the word column = ?, and the Selection args = the word from the URI + String mSelection = MainWordDBContract.Entry.COLUMN_WORD + " = ?"; + String[] mSelectionArg = new String[]{word}; + + // Construct a query as you would normally, passing in the selection/args + returnCursor = db.query(TABLE_NAME, + projection, + mSelection, + mSelectionArg, + null, + null, + sortOrder); + break; + default: + throw new UnsupportedOperationException("Unknown Uri: query " + uri); + } + + return returnCursor; + } + + //we are not exported our database + //for practice purpose we fill this methods + + /** + * This methods used for exported database + * handles requests for the MIME type of data + * it gives a way to standardize the data formats + * that your provider accesses, and this can be useful for data organization. + * + * @param uri that's check database + * @return MIME type + */ + @Nullable + @Override + public String getType(@NonNull Uri uri) { + + int match = sUriMatcher.match(uri); + + switch (match) { + case TASKS: + // directory + return "vnd.android.cursor.dir" + "/" + MainWordDBContract.AUTHORITY + "/" + PATH_TASKS; + case TASK_WITH_ID: + // single item type + return "vnd.android.cursor.item" + "/" + MainWordDBContract.AUTHORITY + "/" + PATH_TASKS; + default: + throw new UnsupportedOperationException("Unknown uri: " + uri); + } + } + + @Nullable + @Override + public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { + + final SQLiteDatabase db = openHelper.getWritableDatabase(); + + int match = sUriMatcher.match(uri); + + //return uri + Uri returnUri; + + switch (match) { + //only one case because + //we insert data at once + case TASKS: + long id = db.insert(TABLE_NAME, null, values); + if (id > 0) { + //success + returnUri = ContentUris.withAppendedId(MainWordDBContract.Entry.CONTENT_URI, id); + } else { + throw new SQLException("Failed to Insert data" + uri); + } + break; + default: + throw new UnsupportedOperationException("Unknown Uri: " + uri); + } + + //notify data has changed + if (getContext() != null) { + getContext().getContentResolver().notifyChange(uri, null); + } + + return returnUri; + } + + //we don't allow user to delete data + //for education purpose we fill this methods + @Override + public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) { + + //get database from Database open helper + final SQLiteDatabase db = openHelper.getReadableDatabase(); + + //first check database is match with what type + int match = sUriMatcher.match(uri); + + int deleteNumber; + + switch (match) { + //we delete data one by one + case TASK_WITH_ID: + + // Get the id from the URI + String word = uri.getPathSegments().get(1); + + String mSelection = MainWordDBContract.Entry.COLUMN_WORD + " = ?"; + String[] mSelectionArg = new String[]{word}; + + deleteNumber = db.delete(TABLE_NAME, mSelection, mSelectionArg); + + break; + default: + throw new UnsupportedOperationException("Unknown Uri: data not delete " + uri); + + } + + //notify data has changed + if (getContext() != null) { + getContext().getContentResolver().notifyChange(uri, null); + } + + return deleteNumber; + } + + //we just modify favourite data + //for education purpose we fill this methods + @Override + public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) { + + //get database from Database open helper + final SQLiteDatabase db = openHelper.getReadableDatabase(); + + //first check database is match with what type + int match = sUriMatcher.match(uri); + + int updateNumber; + + switch (match) { + //we delete data one by one + case TASK_WITH_ID: + + // Get the id from the URI + String word = uri.getPathSegments().get(1); + String mSelection = MainWordDBContract.Entry.COLUMN_WORD + " = ?"; + String[] mSelectionArg = new String[]{word}; + + updateNumber = db.update(TABLE_NAME, values, mSelection, mSelectionArg); + + break; + default: + throw new UnsupportedOperationException("Unknown Uri: data not update " + uri); + + } + + //notify data has changed + if (getContext() != null) { + getContext().getContentResolver().notifyChange(uri, null); + } + + return updateNumber; + } + +} diff --git a/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DatabaseOpenHelper.java b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DatabaseOpenHelper.java new file mode 100644 index 0000000..b02078c --- /dev/null +++ b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/DatabaseOpenHelper.java @@ -0,0 +1,44 @@ +package com.blogspot.shudiptotrafder.androidstyledemo.data; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +import com.blogspot.shudiptotrafder.androidstyledemo.utilities.ConstantUtills; + +/** + * SoilScience + * com.blogspot.shudiptotrafder.soilscience.data + * Created by Shudipto Trafder on 4/1/2017. + */ + +class DatabaseOpenHelper extends SQLiteOpenHelper { + + DatabaseOpenHelper(Context context) { + super(context, ConstantUtills.DB_NAME, null, ConstantUtills.DB_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + final String CREATE_TABLE_SQL = "CREATE TABLE " + + MainWordDBContract.Entry.TABLE_NAME +" ( "+ + MainWordDBContract.Entry._ID + " INTEGER PRIMARY KEY, " + + MainWordDBContract.Entry.COLUMN_WORD + " TEXT NOT NULL, " + + MainWordDBContract.Entry.COLUMN_DESCRIPTION + " TEXT NOT NULL, " + + MainWordDBContract.Entry.COLUMN_FAVOURITE + " BOOLEAN, " + + MainWordDBContract.Entry.COLUMN_USER + " BOOLEAN, " + + " UNIQUE ( " + MainWordDBContract.Entry.COLUMN_WORD + ") ON CONFLICT REPLACE);"; + + Log.e("Sql",CREATE_TABLE_SQL); + + db.execSQL(CREATE_TABLE_SQL); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + db.execSQL("DROP TABLE IF EXISTS " + MainWordDBContract.Entry.TABLE_NAME); + onCreate(db); + } + +} diff --git a/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/MainWordDBContract.java b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/MainWordDBContract.java new file mode 100644 index 0000000..23983b9 --- /dev/null +++ b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/data/MainWordDBContract.java @@ -0,0 +1,54 @@ +package com.blogspot.shudiptotrafder.androidstyledemo.data; + +import android.net.Uri; +import android.provider.BaseColumns; + +/** + * SoilScience + * com.blogspot.shudiptotrafder.soilscience.data + * Created by Shudipto Trafder on 4/1/2017. + */ + +public class MainWordDBContract { + + // The authority, which is how your code knows which Content Provider to access + public static final String AUTHORITY = "com.blogspot.shudiptotrafder.androidstyledemo"; + + // The base content URI = "content://" + public static final Uri BASE_CONTENT_URI = Uri.parse("content://" + AUTHORITY); + + // Define the possible paths for accessing data in this contract + // This is the path for the "tasks" directory + public static final String PATH_TASKS = "main_ss"; + + public static final class Entry implements BaseColumns{ + + //content uri + public static final Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon() + .appendPath(PATH_TASKS).build(); + + // Task table and column names + public static final String TABLE_NAME = "main_ss"; + + //columns name + public static final String COLUMN_WORD = "word"; + public static final String COLUMN_DESCRIPTION = "description"; + public static final String COLUMN_FAVOURITE = "favourite"; + public static final String COLUMN_USER = "user"; + + /** + * build uri with word + * we send a word(database column from a particular row) and its build + * + * @param s word from a slected item in Recycler view and make uri + * to send to details activity + * @return new uri with given word + */ + + public static Uri buildUriWithWord(String s) { + return CONTENT_URI.buildUpon().appendPath(s).build(); + } + + } + +} diff --git a/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/utilities/ConstantUtills.java b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/utilities/ConstantUtills.java new file mode 100644 index 0000000..6d9ebc8 --- /dev/null +++ b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/utilities/ConstantUtills.java @@ -0,0 +1,15 @@ +package com.blogspot.shudiptotrafder.androidstyledemo.utilities; + +/** + * Created by Shudipto on 6/12/2017. + */ + +public class ConstantUtills { + //sp key + public static final String DATABASE_INIT_SP_KEY = "initialized"; + + //database + public static final String DB_NAME = "soilscience.db"; + public static final int DB_VERSION = 1; + +} diff --git a/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/utilities/Utility.java b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/utilities/Utility.java new file mode 100644 index 0000000..8144000 --- /dev/null +++ b/app/src/main/java/com/blogspot/shudiptotrafder/androidstyledemo/utilities/Utility.java @@ -0,0 +1,84 @@ +package com.blogspot.shudiptotrafder.androidstyledemo.utilities; + +import android.content.Context; +import android.content.SharedPreferences; +import android.util.Log; + +import com.blogspot.shudiptotrafder.androidstyledemo.data.DataBaseProvider; + +import java.io.IOException; + +/** + * Created by Shudipto on 6/6/2017. + */ + +public class Utility { + +// private static boolean getNightModeEnabled(Context context) { +// +// SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); +// +// return preferences.getBoolean(context.getString(R.string.switchKey),false); +// } + + /** + * this methods for database initialize + * it's only called for the first time of the app run + * or update of any data base + */ + public static void initializedDatabase(Context context) { + + DataBaseProvider provider = new DataBaseProvider(context); + + //SharedPreferences preferences for database initialize + // for first time value + SharedPreferences preferences = context.getSharedPreferences(ConstantUtills.DATABASE_INIT_SP_KEY, + Context.MODE_PRIVATE); + //sate of database is initialized or not + boolean state = preferences.getBoolean(ConstantUtills.DATABASE_INIT_SP_KEY, false); + + SharedPreferences.Editor editor = preferences.edit(); + try { + if (!state) { + provider.loadWords(); + editor.putBoolean(ConstantUtills.DATABASE_INIT_SP_KEY, true); + sle("initializedDatabase called"); + } + } catch (IOException e) { + e.printStackTrace(); + slet("Error to initialized data", e); + editor.putBoolean(ConstantUtills.DATABASE_INIT_SP_KEY, false); + } + editor.apply(); + } + + /** + * This methods show log error message with throwable + * + * @param message String show on log + */ + private static void sle(String message) { + + final String TAG = "Utility"; + + + Log.e(TAG, message); + + } + + /** + * This methods show log error message with throwable + * + * @param message String show on log + * @param t throwable that's show on log + */ + + private static void slet(String message, Throwable t) { + + final String TAG = "Utility"; + + + Log.e(TAG, message, t); + + } +} diff --git a/app/src/main/res/drawable/ic_add.xml b/app/src/main/res/drawable/ic_add.xml new file mode 100644 index 0000000..01117d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_add.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_copyright.xml b/app/src/main/res/drawable/ic_copyright.xml new file mode 100644 index 0000000..f90aefc --- /dev/null +++ b/app/src/main/res/drawable/ic_copyright.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..92354df --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/ic_icon.xml b/app/src/main/res/drawable/ic_icon.xml new file mode 100644 index 0000000..a44553e --- /dev/null +++ b/app/src/main/res/drawable/ic_icon.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_law.xml b/app/src/main/res/drawable/ic_law.xml new file mode 100644 index 0000000..45cf24b --- /dev/null +++ b/app/src/main/res/drawable/ic_law.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_lover.xml b/app/src/main/res/drawable/ic_lover.xml new file mode 100644 index 0000000..31f4ad6 --- /dev/null +++ b/app/src/main/res/drawable/ic_lover.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_menu_camera.xml b/app/src/main/res/drawable/ic_menu_camera.xml new file mode 100644 index 0000000..0d9ea10 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_menu_gallery.xml b/app/src/main/res/drawable/ic_menu_gallery.xml new file mode 100644 index 0000000..f6872c4 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_gallery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_manage.xml b/app/src/main/res/drawable/ic_menu_manage.xml new file mode 100644 index 0000000..c1be60b --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_manage.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_menu_send.xml b/app/src/main/res/drawable/ic_menu_send.xml new file mode 100644 index 0000000..00c668c --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_send.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_share.xml b/app/src/main/res/drawable/ic_menu_share.xml new file mode 100644 index 0000000..a28fb9e --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_share.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_slideshow.xml b/app/src/main/res/drawable/ic_menu_slideshow.xml new file mode 100644 index 0000000..209aa64 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_slideshow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_question_mark.xml b/app/src/main/res/drawable/ic_question_mark.xml new file mode 100644 index 0000000..f51707b --- /dev/null +++ b/app/src/main/res/drawable/ic_question_mark.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..d94440b --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml new file mode 100644 index 0000000..178e66d --- /dev/null +++ b/app/src/main/res/drawable/ic_settings.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_voice_recording.xml b/app/src/main/res/drawable/ic_voice_recording.xml new file mode 100644 index 0000000..c38c396 --- /dev/null +++ b/app/src/main/res/drawable/ic_voice_recording.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_web_development.xml b/app/src/main/res/drawable/ic_web_development.xml new file mode 100644 index 0000000..a186327 --- /dev/null +++ b/app/src/main/res/drawable/ic_web_development.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_details.xml b/app/src/main/res/layout/activity_details.xml new file mode 100644 index 0000000..c035d1c --- /dev/null +++ b/app/src/main/res/layout/activity_details.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..9e4f463 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/content_details.xml b/app/src/main/res/layout/content_details.xml new file mode 100644 index 0000000..6e3e8e6 --- /dev/null +++ b/app/src/main/res/layout/content_details.xml @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml new file mode 100644 index 0000000..f6ab230 --- /dev/null +++ b/app/src/main/res/layout/content_main.xml @@ -0,0 +1,27 @@ + + + + + + diff --git a/app/src/main/res/layout/details_fragment.xml b/app/src/main/res/layout/details_fragment.xml new file mode 100644 index 0000000..154819e --- /dev/null +++ b/app/src/main/res/layout/details_fragment.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/main_recycler_view_list.xml b/app/src/main/res/layout/main_recycler_view_list.xml new file mode 100644 index 0000000..1a5333c --- /dev/null +++ b/app/src/main/res/layout/main_recycler_view_list.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/menu/details.xml b/app/src/main/res/menu/details.xml new file mode 100644 index 0000000..5001a17 --- /dev/null +++ b/app/src/main/res/menu/details.xml @@ -0,0 +1,19 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml new file mode 100644 index 0000000..9dfd131 --- /dev/null +++ b/app/src/main/res/menu/main.xml @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml new file mode 100644 index 0000000..383b784 --- /dev/null +++ b/app/src/main/res/menu/menu_main.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..550730310e5f66436525e196a5884166c4a3fb48 GIT binary patch literal 3358 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8fab6a3a5b8342cacf009fd1a5481eb3c7faa5ac GIT binary patch literal 5084 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 Ef@vV1$N&HU literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..1eecc0e7d5b0129aff2236d3c4ed2592543a8fe0 GIT binary patch literal 3179 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 R`1$|<002ovPDHLkV1k6j8%Y2F literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ec87dcebee2b6e52f988e50e087a7dbcfc4321a4 GIT binary patch literal 4648 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..05ca079ca743343d5b2d6037aa42047efa865269 GIT binary patch literal 7381 zcmV;`94h09P)U=_s%3yLVN{D^>21B6i0GbMd8lSw8CN$4GR zQBigkcUKXA1Oa82q@!!@zgqZ00w)|x>_}jww)BP98uB4g?!W9}yW$NJQ zio*E86$NYK_Ei^6-K9SgtuOl5;EJLz23HhbM|_X?k;nJ!v&zEDl!nsMHFPcIL3vT0 z=AzTR=eDMW-L)R(*fEQWkFM3ZkE_wl8&jiEjH}U}9$TaR4gq7UHL&pTE=btFgZ(cB z@tBsbF?`15^#PZ+W**(k+z_Zt_dfGNN6Ehe^Ygp=m#Pv1N>!zZs|X0tDox<8Ro0_L z*Nv~%)&*!4b@ZM=qiiq%|2d_hv~&&kUTKjhf3H%yH!8 zq_W6BP=H2xOH8;qS}A}zm>_gd;eIFpP?@M~R7Rn^*7~Qr<|QURT$|$>Sel!J)^?LD z{^9-ARB7feY>|E&1uzkV%0OjFz%ubI;wF`q%51GJcZJonP>+8FXjStAN|oo0u0~Op zu&=tFtWGMSw^0BPS^$-aHwaz`<$3?o+yz2CSe@E@YY;}N`0^>u?S~a9GZ1fdGmyZw zfVL$7-vUJL3HY*?QC$puLz^AYi8`$SZSFKI{1;-Y7gx9~3t)svYq(5xvR2nN;_r}ezJTjP^c~s zg3$#@!Cb7wu*zb|>8J0mfC)9FlG9UKx<+bxDhriKYI>?G)tOpCKw;)Vr^Smq{W{T+ zCRx$Z}YLaLbjlotX((a``Kn$uY)j6U(zb-(d09kH^Mu?7X?>K>1*k7$!D|EQz z7yrOp&u>fs)+gZm2LBQ{_{z5=-quzi^!9-zim5`VNdi#k^jj5x>Mle^{zcg!OWQc> zwnRokFYl9^M$-$I#j){kT>x%?#!Yj}a?`%>NL)40v5^r?Kyi~$?E*@aI?noy1C#p# z2-6jcI{y;v4|29uB3JE2ygA1D1B$cfi55>9?+aii0C7V7Vqq5eZQJmeV_E^sq?cgozw?XZ`BgVZ%A|GohER@Sgp_5Q^<;FGo? zg@vXq7J$Dnpdi&3GrrC;FHtny7oZ6Nh$H;oPnCMZYwfCFer(XOrM{o6Kh2i)OBMhJ zE7SK>KFf&7;sz-t@a2kg$)#pN{Q^uYddj>g(&_ z7UExD{TH79%R$5U*76l&#fihP1oLProd8Np*Vs>IEZ?fPkHYzz*P#x}M!5X#O*E37 zqVk!RaV|ffMRm89H*rOr&8$#=Jt6UxAmVaybH)bzrm1!@y4-cNdm%<&&_K=98fYew zCbMWh#qhbFP+&mPskfk^p}_#E6S1icCRbK~Fc9vPxL#hiB zbLN|qa<<3ZDQ=SIi3H#8mzO!mTHN0f0fIG3(4GAVe!6wbLWKPnKZ9{-N%lk#1PH|c zqsj|l45t4*ww}qm${6T>`i#B{Y)SzBK9iB)xBvZx1^M6o@-w8Jeh&gm6s;1#U&DLo`k8TB+#Z z@_bl&d_SapcnT`coq@l6c?nKm`wyJG{uO+New#r5(`U!=J3XdJMFPo%MB%m8$~6*Q z2$64ImS5`XAPesksa3IZ2b9QLEP!!zEC-*|H!G0S4o#1a`6ebQ)8s{+mMt5c&Y-g18nym7GqHSu%ZEy#NR zT^L@XWMwiDzyU5u%;7Lq`e`S3_pUbGkP!U@rfm)!TU~O)Q39}5P|URg8Q%)1vO}

HWg8C^o)QF79Mg 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 Hu0mjf20Ao4 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6f67f21bac1024e18e1584913e5bcd5e1395456a GIT binary patch literal 7008 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 LNkvXXu0mjfne+ST literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0327e13fa7927a4a05b16efa6db900c7b5591043 GIT binary patch literal 9442 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

Be^f zfRdLN6alsV)L|yGBJVmqC~k(FK*38<#T=R1Oynm+YqR(y^(|TCcEq~4fXG-qgMlKv$7!Xnz#e*&>wVzIO}hMS`O#lzNacDdh8uzBwQq)L48r0 z#r;|IK^ORlw)-mtt{e_h%++1fllfQYYX*-e2XS{_+TZum4WohfScXGv|qXPQ> zq_!gwR7q&9rSx!Gdb`QaW8t63d=jA-WFDewzvyJ!rQ>noWb^7vJ?X|RFaF@wE-pPh z3Ou!SY2GjRnE>_t#>7UwX?O0p7djz0q0mrC&~TU|Lf6K7!=RdNC&wh;MV0hdm~koB zJED?U+USq#(oJ(?s)W+D@sAzX6RE!qLr%+<5CJtn6u6er*^q$(oZWw3513^MC0VOC z%%|W7g}SuX9@}m<`iAZVEeRIKf9C(n<}4Nv-z@&ZBdOq3F42A&TEgMM!(0>Kb;2e* zcysxmT07|LuWpK<7JQR*4m@}gK+18(f{5W2B2eaK0Rz1E4BN24s4v-X@wBXp#a=Ir z=Ac0PdH%2!NhHkVRGNaqK8EkRDZv1GZVcURk2kSl3v*+o?Hx+ z;<$SmGdxv}-!BOpFc+o-?HTuj_LXP_b%qWxAKZK>tooDSI9;cgzB~njj@ulA}%Zb6a`i+tI?#xY!bH5Z1O9OpZ-cJmB z7_2Swq%g%e1Xa!Ytf|_iG9;#Jl`O5m<1qtkY|-dzrKd|x?Ddu@Vq%*J$9Zpkr#XfOim3a4mhe5>ie0?Ytz}E;@63Y;T_@H zDAvflL}A3~vIE8JLDNcc;r{-gEvi5g6eKbG2=v*={*?J=d$C~8$@=an^#ZE=y+B$Y zQO)K}<^3kYN{{*dSsEz+bcs{xK&JPosTF-n4@w|y!_FUj{r%cwrlu(M`=9-LB|13V zsir{BW_Hmj9IHfaHO7`4}hH-YSznD7c z>o(A^y|6V9G+80$%oOZa_ItmYGeT4oNIk3e?h=;4rMUf*C`qht_UEMPTcoV0`t2SR zm+w?SZz?2OVg6l(aBCUJJz%wKjBZ8$kk|QvCj;Y;3-kiB*Y^p-X|?@1(b%Sr$JHc5r&lJ0oH2d2 z-ba?=9porCR}Jdq1EhHibg}#&5Lc*q+T(YY8pLu_U-#h6z;lY<_+s`H>jyTrIqYYj`uOWA$}3+orj|4 zBcXp>v9Nv~uRTLB9Z1)@`S|W6V*Z^O#2>SQZg_7Td2n;=X;5w*T~nsQ;iR6f_|Ciy zc8h{@J|_i(RFc4>KgX^EV{oW->xr8IM_72{K99g+euwI;paV*q*D)QGU*cU}I7wN`T$ zb4Vz<03@wpx10LXJ8hf^rfNt|edkubmS?$uMNM`jv2G?}TFK`3 zO>2k+Jz9)mB4|^vFhP0oEfa-?XPj~`v36XVO z4LDV8uf_p*(ZC>-grBz7>PCjdSPd>#Ym)!uVByw+K|_axOMX@WwUHru6cm?{6aM~s ziRm)yVPa`PFG@k*tmhpcI>SV?4~|0S+M&Y@*eWmSIgw*Q*E=Q`{Wr}VndkBSA198* zbvc{%YaJ%Xsn%nIPh${Ks{vJpzO$CS569+P*^6HcelE+{8b=?us8WYCEZ@9s%{dW& zRE(-Py6RiAr?DmbVRwp$aD)diH|~$ z<&QobV|JQ|j#zY* zlS;eH>}lHxaQngGmI^;9nVSV91IGz_UCvtGh?U2fg+!d0yPa97U4-6zRIj_~d0Vz~ zI&Y;rb!9sDNkQx`yV9OiAA1~>_xl3VYGU})H!B=k@S-e#VcoAhPz^FByU|;i=)0uG zLb&yZUs>n^N2_z=KMGg9O0ON{kC(%qGQ=Mb87Z*2z`mpxXVyf#c6c%|1o6xy;0T$Kzg?Ee6y5{Tyj literal 0 HcmV?d00001 diff --git a/app/src/main/res/raw/ssnewdb.txt b/app/src/main/res/raw/ssnewdb.txt new file mode 100644 index 0000000..783e488 --- /dev/null +++ b/app/src/main/res/raw/ssnewdb.txt @@ -0,0 +1,158 @@ +A, A1, A2 HORIZON = (sol) See SOIL PROFILE. +A.H.D. = (sur) See DATUM. +A.P.I. = (mis) Syn. AERIAL PHOTOGRAPH INTERPRETATION. +ABANDONED MINE = (DERELICT MINE) (mm) A mine which has been inactive for some considerable time and for which no title is current or where the lease has been cancelled. +ABNEY LEVEL = (sur) See LEVEL. +ABRASION DETACHMENT = (gen) See DETACHMENT. +ABSORPTION AREA = (gen) Syn. WATER DISPOSAL AREA. +ABSORPTION BANK = (str) See BANK. +ACCELERATED EROSION = (gen) See EROSION. +ACCEPTABLE OUTLET = (str) Syn. STABLE OUTLET. +ACCRETION = (csd) Gradual addition of sand to a beach or lake shoreline during periods of light on-shore wind and/or lowered sea level. +ACID SOIL = (sol) A soil giving an acid reaction throughout most or all of the soil profite (precisely. helow a pH of 7.0; practically, below a pH of 6.5). Generally speaking, acid soils become a problem when the pH drops below 5.5. At this level, and particularly below 5.0, the following specific problems may occur - aluminium toxicity, manganese toxicity, calcium deficiency and/or molybdenum deficiency. Such problems adversely affect plant growth and root nodulation, which may result in a decline in plant cover and increase in erosion hazard. The term is frequently used to describe soils with acidity problems as above.Correction of the acidity is normally carried out by the application of appropriate amounts ot lime to bring the soil pH to a level of 6.0 - 6.5.See also pH. +ACIDITY= (sol) The chemical activity of hydrogen ions in soil expressed in terms ol pH. See also ACID SOIL, pH, +ACTIVE RECREATION= (urb)A level of land development which provides for ovals, camp sites or other activities requiring extensive clearing or levelling for facilities, Cf. PASSIVE RECREATION.See also RECREATIONAL CAPABILITY CLASSIFICATION. +ADSORPTION= (sol) The interaction of ions with the surfaces of soil materials, particularly with organic matter and inorganic colloidal substances comprising part of the clay fraction. In this way nutrients in solution, made up of ions, become attracted to sites on soil particles with an opposite charge. +AEOLIAN= (If m) A term applied to deposits of soil materials transported and/or arranged by wind. +AERIAL PHOTOGRAPH= (rrns)Any photograph taken of the surface of the earth from fixed wing aircraft, helicopters, balloons or spacecraft. There are two categories of aerial photography: Vertical . where an attempt is made to keep the optical axis of the camera perpendicular to the earth's surface. If the axis is exactly vertical, the photo is called a truly vertical photo and therefore contains zero TILT. However, in practice it is impossible to keep the camera axis vertical and small tilts of less than 3 degrees are tolerated, The resultant photos are referred to as near vertical and may be regarded as equivalent to truly vertical for most photo interpretation purposes.Oblique where the optical axis is deliberately tilted away from the vertical. If it is tilted sufficiently to include the horizon, the photo is called a high oblique and it the horizon does not appear, it is called a low oblique. Oblique aerial photographs cover more ground area than vertical aerial photographs exposed at the same altitude. +AERIAL PHOTOGRAPH INTERPRETATION= (API) (rms) A technique of obtaining information from aerial photographs, principally applied to the techniques involving the stereoscopic viewing of the photographs. This method enables the evaluation of terrain in three dimensions. lt is basically a deductive process that requires conscious or subconscious consideration of the elements of the image. The quality, reliability and efficiency of any interpretation are dependent on the personal experience and expertise of the interpreter. The acquisition ol such knowledge, either by field examination to establish ground truth, or by the study of available maps and reports, should, therefore be considered an essential part of any photo-interpretation job. +AERIAL PHOTOGRAPH INTERPRETATION= (Continued) API involves three basic steps:1.examine the photographs o get a three-dimensional perception.2.idenlify ground conditions by observing certain elements appearing in lhe pholographs: and 3.analysing specific problems by the association of ground conditions with one's background experience.No other technique can provide a three-dimensional overview of the terrain from which the inter-relations of topography, drainage, surface cover, geologic materials, and human activities on the landscape can be viewed and evaluated. (Reference: Rib, F-IT, and Liang, T. Recognition and Identification. In Landslides : Analysis and Control, Transportation Research Board, National Academy of Sciences, Washington D.C., U.S.A., Special Report 176, Chapter 3. 1978). +AFFORESTATION= (for) The establishment of a forest on land that has not previously, or not recently, been timbered. Cf. REAF FOR E STATION. +AGGRADATION= (gen) The process of building up of surfaces, such as streambeds or floodplains, by the deposition of sediment and/or colluvium, +AGGREGATE= (gen)A cluster of particles, held together by inter-particle forces or bonds. The term is also used to mean road gravel. See atso SOIL AGGREGATE. +AGROFORESTRY= (agr for) The integration of commercial tree growing into the operation of a farming enterprise. t involves the commercial utifisafion of native frees as welt as the planting and management of quicker-growing frees through afforestation, The aim is to ensure a long term viable enterprise based on timber and limber products, as part of the overall farm operation, +AGRONOMY= (agi-)The study of land management and associated practices for the establishment, growth and use of crops and pastures Involves an understanding of soils, land. climate, plant characteristics and animal husbandry in relation to crop and pasture production, +AIR SEEDER= (eng) See DRILL. +ALCOVE= (If m) A moderately inclined to very steep open depression with concave cross-section, such as the recess created in a hi//slope as the result of a slump, +ALKALINE SOIL= (sol) A soil giving an alkaline reaction throughout most or all o! the soil profile (precisely, above a pH of 7.0; practically, above a pH of 8.0). Many alkaline soils have a high pH indicated by the presence of calcium carbonale, and are suitable tor agriculture. However, others are problem soils because of salinity and/or sodicity. Soils with a pH above 9.5 are generally unsuitable for agriculture. See also SODIC SOIL, SALINE SOIL, pH. +ALKALINITY= (sol) The chemical condition of soil with a pH greater than 7.0. Often associated with saline soils and sodic soils. See also pH. +ALLUVIAL= (Ifni, sol) Describes material deposited by, or in transit in, flowing water. See also ALLUVIUM. +ALLUVIAL FAN= (Um) An accretion of sediments in a flowline characterised by radial slope lines inclined away from a point, giving it a typical fan' shape Such deposits may build up to eventually block and divert flows. +ALLUVIAL PLAIN= (If m) A large flat area of alluvium. Although it includes floodplains, the preferred use of the term is to describe former floodplains where there is no recent accumulation of sediment, +ALLUVIAL SOIL= (sol) A soil developed from recently deposited alluvium, normally characterised by little or no modification of the deposited material by soil-forming processes, 'particularly with respect to soil horizon development. +ALLUVIUM= (tim, sol) An extensive stream-laid deposit of unconsolidated material, including gravel, sand, silt and clay. Typically it forms lloodplains that develop alluvial soils, +ALPINE= (gen) Describes the area above the timber line in mountainous terrain which is determined by the occurrence of low temperatures. In Australia, the dominant vegetation consists of a snowgrass-herb community. +AMELIORANT= (sol) Syn. SOIL AMELIORANT. +ANAEROBIC= (sol) Describes soil conditions in which free oxygen is deficient and chemically, reducing processes prevail. Such conditions are usually found in waterlogged or poorly drained soils in which water has replaced soil air. Ant. AEROBIC. +ANGLE OF REPOSE= (eng) The stable angle between the horizontal and the maximum slope that loose material assumes through the influence of gravity. +ANIONIC BITUMEN EMULSION= (gen) See BITUMEN EMULSION. +ANNUAL CROPPING= (agr) A cropping system where one crop per year is grown on the same piece of land, +ANNUAL EXCEEDANCE PROBABILITY= (hyd) The chance that a particular storm or flood event will be equalled or exceeded in any year, expressed as a percentage. lt is the reciprocal of return period. For example, a 20 year return period is equivalent to a 5 per cent annual exceedance probability. +ANNUAL PASTURE= (agr) See PASTURE. +ANNUAL PLANT= (agr) A plant which completes its life cycle and dies within one year or less. The lite cycle includes production of roots, stems, leaves, flowers and finally seed for further regeneration. Cf. BIENNIAL PLANT, PERENNIAL PLANT. +ANTECEDENT MOISTURE CONTENT= (sol) The moisture content of a soil prior to a rainfall event. It has an important influence on the liketihood of runoff occurring as a result of subsequent rainfall, because antecedent moisture restricts the amount of infiltration which can take place. +ANTI-SEEP COLLAR= (eng) Syn. COLLAR, +ANTI-VORTEX DEVICE (eng)=A device, usually a vertical or horizontal plate, placed at the entrance of a pipe to prevent the formation of a vortex (whirlpool effect) in the water at the pipe entrance. +APEDAL= (soI) Describes a soil in which none of the soil material occurs in the form of peds in the moist state. Such a soil is without apparent structure and is typically massive or single grained. When disturbed it separates into primary particles or fragments which may be crushed to primary particles. Ant. PEDAL. +APRON= (eng) A layer of concrete, stone, timber, or other relatively permanent material placed at the entrance or outlet of a hydraulic structure, such as a culvert or chute, in the channel bed, to protect the structure against erosion. +AOUIFER= (sol) A porous soil or geological formation, often lying between impermeable sub-surface slrata, which holds water and through which water can percolate slowly over long distances and which yields ground water to springs and wells. Aquifers may, however, be unconfined and the water level subject to seasonal inflow. An AQUITAnO is also a groundwaterbearing formation but is insufficiently permeable to transmit and yield water in usable quantities. +AQUITARD= (gen) See AQUIFER. +ARABLE= (agr) Describes land suitable for the economic production of crops, usually involving regular cultivation. +ARID= (ram) Refers to climates or regions which lack sufficient raintau for crop production or extensive sown pastures. Usually defined as a climate with annual average rainlall less than 250 mm (10 inches). See also SEMI-ARID. +ARMOURING= (gen) The process of development of a layer of coarse particles on the surface of a soil which is capable of protecting the soil below from wind or flowing water. +ARMOURING LAYER= (gen) A layer of particles, some of which may be in the process of being moved by erosive forces, but which are deep enough to prevent access of Ihe moving wind or water Io the soil below. lt protects the underlying soil until il is broken by stock trampling or cultivation or until a stronger erosion event removes il. +ASPECT= (Ifm)The direction that a slope faces, measured at right angles lo the contour. +ASSAY= (mm) The determination of the total amount of one or more constituents of a rock or ore. +ASSOCIATION= (ram, alp) A stable plant community of definite composition, presenting a uniform appearance and growing in more or less uniform habitat conditions. +ASSOCIATION= (rms) The identificalion of an image on an aerial photograph by inference; that is, certain features can be inferred as occurring by the presence of other readily identifiable leatures. For example, in some areas soil types can be determined from vegetation types, the latter being the more readily identifiable features from the aerial photographs. +ASSOCIATION= (sol, lev) Syn. SOIL ASSOCIATION. +ATTERBERG LIMITS= (sol)The soil waler conlents al the solid/plastic and plastici liquid boundaries. Atterberg limits are based on the concept that a fine-grained soil can exist in any of three slates depending on ils water conlenl. Thus, on the addition of waler, a soil may proceed from the solid state through to the plastic and finally liquid states. The water contents at the boundaries between adjacenl slates are termed the plastic limit and the liquid limit, Water content is expressed as a percentage of the oven dry weight of soil.These limits are used to categorise(For categorise see:ATTERBERG LIMITS:PLASTIC LIMIT,ATTERBERG LIMITS:LIOUID LIMIT,ATTERBERG LIMITS:PLASTICITY INDEX) soil materials in terms of their likely engineering behaviour at different moisture contents such as in building or road foundations, Prior to earthwork construction, their determination assists the specification of required compaction levels, batter slopes and optimum moisture levels for construction. See also UNIFIED SOIL CLASSICATION SYSTEM, PLASTIC, SOIL PLASTICITY, LINEAR SHRINKAGE. +ATTERBERG LIMITS:PLASTIC LIMIT= (PL) The plaslic limit of a soil is the water content at which the soil passes from the solid to the plastic state. It is arbitrarily defined as the lowest water content at which the soil can be rolled into threads 3 mm in diameter without the threads breaking into pieces. (Australian Standard AS 1289.02.1 - 1977) +ATTERBERG LIMITS:LIOUID LIMIT= (LL) The liquid limit of a soil is the water content at which the soil passes from the ptastic to the liquid state. lt is arbitrarily defined as the water content at which two halves of a soil cake will flow together for a distance of 12 mm along the bottom of the groove separating the two halves, when dropped 25 times trom a distance of 10 mm at the rate of 2 drops/second, using standard apparatus. (AS 1289.01.1 - 1977) +ATTERBERG LIMITS:PLASTICITY INDEX= (Pl) The plasticity index of a soil is the numerical difference between the plastic limit and the liquid limit. (AS 1289.03.1 - 1977). +AUSTRALIAN HEIGHT DATUM= (sur) See DATUM. +AUTECOLOGY= (gen) The study of relationships between a single species and its environment. Cf. SYNECOLOGY. +AUTOMATIC LEVEL= (sur) See LEVEL. +AVAILABLE NUTRIENT= (sol) The portion of any element or compound in the soil that can be taken up and assimilated by plants to enhance their growth and development. See also PLANT NUTRIENT. +AVAILABLE SOIL WATER= (sol) That part of the water in the soil that can be absorbed by plant roots. The amount of water held between the moisture content prevailing at any point in time and the moisture content at which plant growth ceases.Plants have difficulty extracting moisture when the available soil water approaches wilting point. Where soil moisture can be controlled, the aim is to maintain it at a level where it can be readily extracted by plants, that is to prevent moisture depletion below about 50 per cent of the available range. See also FIELD CAPACITY. +AVAILABLE WATER-HOLDING CAPACITY= (sol)The amount of water in the soil, generally available to plants, that can be held between field capacity and the moisture content at which plant growth ceases. Sometimes also known as the PLANT-AVAILABLE WATER CAPACITY. +AVALANCHE= (gen) A form of mass movement that results in a characteristic long and narrow track down the steep slopes on which it typically occurs. Downhill motion is extremely rapid and it may occur under a variety of moisture conditions. +AVALANCHING= (ram, cad) The process of self-perpetuation that increases the intensityand severity of wind erosion down-wind. lt may be initiated by sa/tation whence the particles, as they hit the ground, dislodge more particles resulting in a cumulative effect down-wind. + +B, B1, B2,HORIZON= (sol) See SOIL PROFILE. +BACK-PUSH BANK= (Str) See BANK. +BACKPLAIN = (lfm) A large flat area comprising the part of a tloodp fain away from the watercourse beyond the /evee. It is often characterised by a high water table, fine sediments, and the presence of swamps or lakes. +BACKSIGHT= (sur) The first sight taken after setting up a level. A back sight is taken to a bench mark at the start of levelling and then to change points at each subsequent instrument set up. See also FORESIGHT,INTERMEDIATE SIGHT. +BACKWATER= (agi) A strep cropping term for surface water backed up by vegetated strips, typically on country of less than one per cent slope. Runoff is retarded as it moves through the vegetated strips with the result that velocity is also reduced on the cultivated strips above, provided that the strips are not too wide. See also STRIP WIDTH. +BAND SEEDING= (agr) Drilling seed and fertiliser in the one operation in separate but adjacent bands, +BANK= (tfm)Syn. STREAMBANK +BANK= (Str) A constructed earth embankment, incorporating a channel on the upslope side, typically traversing a slope to control and/or prevent the erosion of that slope. This is achieved by intercepting, diverting or storing runoff instead of permitting it to flow uninterrupted down the stope. The purpose of each bank is to increase the time of concent ration of runoff and to control its volume and velocity so that serious erosion will not occur.Where a series of banks is constructed it is possible, particularly in an arable situation and depending on the bank design criteria used, that some interbank erosion will occur. Complementary land management practices such as contour farming and conservation ti/fa ge carried out between the banks should then aim to prevent such erosion. Banks should be maintained to conform with their designed purpose.Apart from banks built for the above purposes there are also a number of banks designed for other more specific purposes such as waterspreading.Two basic construction methods are used. A CONVENTIONAL BANK is constructed by moving the soil downslope so that the excavation or channel is immediately above the bank. A BACK-PUSH BANK is constructed by moving the soil upslope so that the excavation is immediately below the bank. These are constructed where it is necessary to retain undisturbed vegetation on the upslope side, such as in critical disposal situations on highly erodible soils. +LEVEL BANK = (CONTOUR BANK) A bank that is constructed along the true contour,its channet being level, and which discharges at either or both ends depending on design requirements. Typically used on grazing land. +ABSORPTION BANK= (PONDAGE BANK) A level bank with a turn-up at each end designed to pond water to a pre-determined depth. Not normally used on impermeable soils or on arable land because of the undesirable effects of ponded water in the cropping situation. When designed to intercept inter/low the term INTERCEPTOR BANK may be used. +GRADED BANK= (GRADE BANK)A bank buitt with a design fall along the channel,to allow water to flow in a specified direction.Primarily used on arable land, but atso on grazing land to some extent. Design grades normally range from 0.1 to 0.5 per cent depending on soil type and design requirements. Some very long banks would be progressively increased in capacity, in order to handle the large flows which develop towards the outlet end. +DIVERSION BANK= A bank specifically designed to divert water, normatly to protect a cultivated area, a gully, eroded area, work or facility below, or to carry runoff to or from a dam or waterway away from the natural drainage line. Such banks are typically graded. +GAP SPREADER BANK = A level bank constructed to allow waler to be spread by a series of gaps in the bank. Excavation from below creates a level channel into which water flows through the gaps, and from which it spreads evenly over land downslope. Such banks are normally used in marginal arable areas, where large amounts of runoff are to be controlled and soils are relatively impermeable. +GAP ABSORPTION SPREADER BANK = A series of related absorption banks constructed on the same contour which allow water to be spread via the gaps between them. Excavation +DIVERSION SPREADER BANK = A bank that collects water from high runoffproducing areas and diverts and spreads out the flow to increase the production from a limited area downslope. Such banks normally consist of a diversion bank and a gap spreader bank joined by a continuous channel. They are particularly suitable for use in marginal arable areas. +CHECK BANK = A short level bank constructed lo stow and spread flows from other structures. +TRAINER BANK= A hank constructed to prevent flows from spreading or to direct runoff away Irom an - undesirable location and/or towards a stable outlet. Such a bank is designed so that runoff flows on natural vegetation and will only be guided or contained by it. The grade may be relatively steep as the bank may have to run partty across or directly up and down the slope. +WATERWAY BANK = A bank constructed at the side(s) of a waterway to retain runoff within the designed width. Such banks normally run directly up and down the slope. +PROTECTIVE BANK = A temporary bank constructed to prevent runoff flowing onto an unstable area. Once the area has been stabilised, typically by the establishment of an adequate vegetative cover, the bank may be removed, Such a bank is particularly uselul at the inlet of a constructed earth channel or waterway to prevent runoff entering until vegetation is established, In such cases the runoff must be temporarily diverted to a stable outlet at another location.Banks can be further characterised by their crosssectional shape which will depend upon land use, topography, soils and other design criteria: +BROAD-BASED BANK (ROLLOVER BANK) = A low profile bank with smoothed cross section and gentle batters which are weil compacted. The shape enables travel across them and tillage along their length with agricultural machinery. Such banks should be constructed so that the cross sections are not curved, to facilitate even sowing depths along each face. They are particutarly suited to arable lands of slope 2-6 per cent and to situations where easy access is required. Slopes from 6 to 10 per cent may necessitate shorter batter lengths which may not be suitable for the wider types of agricultural machinery.Broad-based banks are also well suited to situations where expansive soils occur, +RIDGE TYPE BANK (PEAK TYPE BANK) = A narrowbaed bank having a more or less triangular cross section. Particularly suited to the handling of large volumes of runoff and used frequently on slopes in excess of 10 per cent.In the design of banking systems there may be one or more KEY BANKS. A key bank is one which has a specific localion to achieve a special result. For example it may be a bank to collect discharge (rom a culvert at a property boundary and divert it to a waterway. To do this effectively it must collect that discharge as close as possible to the boundary and hence variation in its location will be limited. This bank becomes a key bank in the system and other banks should be spaced up or down slope from it. The location of such banks should be established before planning others. +BANK CAPACITY= (Str) The calculated or actual volume or discharge rate of a soil conservation bank. For a graded bank the important design requirement is for the bank to safety carry the design peak discharge! and this represents the bank capacity. For an absorption bank the important design requirement is for the bank lo hold a certain volume of runoff without overtopping, and this represents the bank capacity. See also DESIGN CAPACITY. +BANK SPACING= (sfr) The actual distance along the ground between adjacent soil conservation banks! used particularly when lalking to landholders. See also HORIZONTAL INTERVAL.VERTICAL INTERVAL. +BANKING SYSTEM= (str) A scheme involving the construction of a series of soil conservation banks to control erosion over a large area.Such a system is frequently integrated with a number of gully control structures and/or waterways. In some circumstances a parallel banking system allows for easier cultivation between the banks. +BAR= (csd)An offshore ridge of unconsolidated material submerged by high tide, lying al the mouth of a river or a short distance from and parallel to the beach. Bars tend to form in beach systems following periods of beach erosion and represent a temporary storage of beach sand which is returned during ensuing light weather +BAR= (Ifm) An elongated gently to moderatety inclined low ridge of unconsolidated sediment built up by channelted water flow. Typicatty occurs as part of a streambed as a resutt of tocafised retardance to ftow, causing deposition of sediment. +BARE FALLOWING= (agr) See FALLOWtNG. +BASAL COVER= (ram, agr) The proportion of the ground surface actually covered or occupied by the stem or stems of a ptant at ground tevel, expressed as a percentage. Cf. COVER. +BASE FLOW= (hyd) See TRICKLE FLOW. +BASE PLATE= (sur) A metal plate with a central high point on which the staff is placed at change points, where necessary, during levelling. +BASIN= (hyd) The area drained by a river. The term is also used to describe an area which, when surrounded by embankments, may be flood irrigated. +BATTER= (str) The excavated or constructed face of a dam wail, embankment or cutting! produced as a result of earthmoving operations involving cutting and filling.In describing batter grade. 1:3 or lin 3 means a fall (or rise) of i vertical metre in a horizontal distance of 3 metres.Batters created in the construction of soil conservation banks are identified by numbering them 1, 2 and 3 on the basis that the No. 2 batter is always the waterbearing lace of the embankment and the No, i batter is the excavation batter. Thus, on a conventional bank the No. 1 batter is upslope of the embankment the No. 2 batter is the uphilt side of the embankment (uphitl batter) and the No. 3 batter is the downhill side of the embankment (downhill batter). On a back-push bank the No. i batter is downslope of the embankment but the embankment batters are numbered similarly to those of a conventional bank, i.e. the No. 2 and 3 batters are the uphill and downhill batters respectively. Batters created in the construction ol gully c ntrol structures and dams are also identified by numbering them 1, 2 and 3 on the basis that the water-bearing face is the No. 2 batter, viz: * No. 1 batter the excavation batter typically tormed on the upstream of the ftoor of the storage. In this case it is denoted the upstream excavation batter. No. 2 batter the batter typically formed by the combination of the exposed face on the downstream side of the floor excavation (downstream excavation batter) and the constructed face on the upstream side of the embankment (upstream embankment batter). lt is always the batter which causes the water to pond.No. 3 batter . the batter formed on the downstream side, or outside, of the embankment and denoted the downstream embankment batter.The above descriptors tor GCS and dam batters are particularly applicable to structures with straight or curved embankments. For square or oblong structures the batters associated with the side embankments should be identified as left or right looking downstream. in conjunction with the numbering system (e.g. left hand No. 2 batter). See also CUT BATTER, FILL BATTER, DAM. +BATTER DROP-DOWN= (eng) A constructed and stabitised drain to carry runoff down a batter, typicatty down the tine of greatest stope. +BATTER STABILISATION= (gen) The process of stabilising batters and their environs. This may invotve vegetative and/or structurat measures. Revegetation ol exposed batters may be achieved by using grasses and legumes sown by hand, seed dritts or hydroseeders, with or without special mulches such as hay and bitumen emulsion, or various types of netting. n certain situations revegetation may invotve sodding or sprigging. Stabitisation of unstabte materiats, particutarty batters subject to mass movement, may require the use of trees such as witlows or poptars to provide more deep rooted stabitity. Masonry measures may inctude revetments, gabions and concrete waUs. Special attention is needed in designing drainage systems, inctuding the use of berms, to provide protection ot the batter surface against erosion by concentrated runoff. To assist stabilisation, batter slopes shoutd be constructed to an angte tess than the angle of repose. +BEACH= (Um, csd) A gentle or moderatety stoping shore at the margin of a sea or take, tormed by waves or tides. Generatty covered by loose granutar materials, but can be composed of a wide range of materiats from boutders to sitts. A beach is tateratty extensive retative to its width. +BEACH FACE= (lfm, cad) The section of the beach normalty exposed to the action of wave uprush. +BEACH RIDGE= (FULL) (lfm, cad) A long tow, mear, even-crested rise built up by wave action at a former shoreline, Such ridges are usually modilied by the wind and may occur singly or in a series of parallel ridges, +BEACH SCARP= (Um, cad) A laterally extensive precipitous tace along a beach or dune formed by erosive wave action where sand falls away under the inlluence of wave-assisted mass movement, +BED= (tim) A variously shaped channel floor which normally carries The flowing water within the channel. +BEDLOAD= (gen) The sediment lhat moves by sliding, rolling or bounding on or very near the bed of a channel due to the action of flowing water. lt is moved mainly by traclive and/or gravitalionat forces, but at velocities less than the surrounding flow. Cf. SUSPENDED SEDIMENT. +BEDROCK= (COUNTRY ROCK) (sol) Solid rock underlying the soil profile or other surface materials. lt does not necessarily represent the parent material of the overlying soil. +BELT TRANSECT= (ram, agr) A strip of vegetation along which and in which plants are mapped and/or other quantitative measurements such as cover are recorded. See also LINE TRANSECT, POINT TRANSECT. +BENCH= (eng) Syn. BERM. +BENCH= (mm) A strip of relatively level earth or rock breaking the continuity of a slope. +BENCH= (lfm) A small flat area breaking the continuity of a hillslope.Benches are usually associated with flat-lying strata. +BENCHMARK= (sur) A fixed point of reference used in levelling. +BENCHMARK SITE= (ram) A fenced off area of land used as a reference in the assessment of range/and condition. Benchmark sites are usually selected on the basis of having been relatively unaffected by grazing activities, as a consequence of distance from drinking water or inaccessibility to stock. +BENTONITE= (sol) A clay usually formed by the weathering of volcanic ash, and which is largely composed of montmoriflonite type clay minerals. t has great capacity to absorb water and swell accordingly. For this reason t is used to seal dams and/or earth embankments built of coarse materials or which contain a coarse textured seam causing them to leak. +BERM= (csd) A level area of loose sand between the upper limit of the swash zone and toe of the toredune, formed trom marine deposition. +BERM= (BENCH) (eng) A constructed ledge formed at one or more levels between the top and bottom of a batter. Its purpose is to intercept runoff and reduce slope instability. +BERM= (str) A constructed ledge on the excavation batter of a dam or tank which increases the storage capacity and/or enables the entrapment of debris before water enters the storage. The latter is achieved by inclining the berm outwards. The term is also applied to a structure used in border check irrigation to prevent sideways flow of water. +BERM DRAIN= (eng) See DRAIN. +BIENNIAL PLANT= (agr) A plant whose tile cycle extends for two years. The first year it produces roots, stems and leaves. In the second year it flowers, produces fruits and seeds for future regeneration, then dies. The term is also used loosely to describe short-lived perennial plants which rarely persist more than two years in sown pasture, such as red clover. Cf. ANNUAL PLANT, PERENNIAL PLANT. +BIFURCATION= (gen) Division into two branches. In a soil conservation context, it is used to describe the formation of two gullies from one, due to the inflow of runoff to a gully head from two separate sources. +BIOLOGICAL FERTILITY= (soI) See SOIL FERTILITY. +BIOMASS= (agr) The quantity of living material present at a given time within a given area, such as the weight of vegetative matter removed by clipping a quadrat. Total biomass within an area would include all living material, whether of plant or animal origin. +BITUMEN= (gen) A viscous hydrocarbon mixture commercially obtained from the destructive distillation of primary energy sources such as coal and crude oil. It retains a 'solid' character under normal air temperatures and for application must be heated. For soil conservation purposes bitumen emulsions are used in stabilisation programs. +BITUMEN EMULSION= (gen) A mixture of bitumen, emulsifying agent, stabilising agent and water which has low viscosity and may be applied without heating. Its production does not create any chemical change in the bìturnen, but the physical state is altered so that it is no longer a homogeneous mass but a series of minute particles, each coated with the emulsifying agent to keep them apart and suspended in the water. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..0359972 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #3F51B5 + #303F9F + #FF4081 + + #ffffff + #e8eefe + #3F51B5 + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..59a0b0c --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,3 @@ + + 16dp + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..7ce951b --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,78 @@ + + Android Style Demo + Settings + DetailsActivity + + a complete Dictionary App + + Open navigation drawer + Close navigation drawer + + + + User Name + Settings + Developer + Favourite + Add Own word + + + Word: + Description: + + + + + Small + Medium + Moderate + Large + Extra Large + + + 15 + 17 + 20 + 23 + 26 + + textSize + Text Size + + SwitchKey + Night Mode + Night Mode ON + Night Mode OFF + + + + + + Search + Speech to Text + + + + Communicate + Share + Send + + Home + Favourite + Add New + + Legal Notice + About + Copyright + Developer + + + word + write a description of word + Add word + + you don\'t add any favourite word yet. + You can add your favourite word from word details. That\'s are listed here + Add your own word + Search... + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..38e0a93 --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,34 @@ + + + + + + + + + + diff --git a/app/src/main/res/xml/searchable.xml b/app/src/main/res/xml/searchable.xml new file mode 100644 index 0000000..a47507c --- /dev/null +++ b/app/src/main/res/xml/searchable.xml @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/app/src/test/java/com/blogspot/shudiptotrafder/androidstyledemo/ExampleUnitTest.java b/app/src/test/java/com/blogspot/shudiptotrafder/androidstyledemo/ExampleUnitTest.java new file mode 100644 index 0000000..0a3eaf6 --- /dev/null +++ b/app/src/test/java/com/blogspot/shudiptotrafder/androidstyledemo/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.blogspot.shudiptotrafder.androidstyledemo; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..82ff274 --- /dev/null +++ b/build.gradle @@ -0,0 +1,26 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + + repositories { + maven { url 'https://maven.google.com' } + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.0.0-alpha3' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + maven { url 'https://maven.google.com' } + jcenter() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..aac7c9b --- /dev/null +++ b/gradle.properties @@ -0,0 +1,17 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..13372aef5e24af05341d49695ee84e5f9b594659 GIT binary patch literal 53636 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ⅅ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 H-+%o-(+5aQ literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..5bca468 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Sun Jun 11 18:20:24 BDT 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-milestone-1-all.zip diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..9d82f78 --- /dev/null +++ b/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..8a0b282 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..e7b4def --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +include ':app'