diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9a5796 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.idea \ No newline at end of file diff --git a/AndroidPersistentData/app/src/main/AndroidManifest.xml b/AndroidPersistentData/app/src/main/AndroidManifest.xml index a301a9a..6201cbb 100644 --- a/AndroidPersistentData/app/src/main/AndroidManifest.xml +++ b/AndroidPersistentData/app/src/main/AndroidManifest.xml @@ -19,6 +19,7 @@ + \ No newline at end of file diff --git a/AndroidPersistentData/app/src/main/java/expert/android/quoccuong/androidpersistentdata/MainActivity.java b/AndroidPersistentData/app/src/main/java/expert/android/quoccuong/androidpersistentdata/MainActivity.java index 64e055f..353b43c 100644 --- a/AndroidPersistentData/app/src/main/java/expert/android/quoccuong/androidpersistentdata/MainActivity.java +++ b/AndroidPersistentData/app/src/main/java/expert/android/quoccuong/androidpersistentdata/MainActivity.java @@ -1,10 +1,16 @@ package expert.android.quoccuong.androidpersistentdata; +import android.content.Intent; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; @@ -18,6 +24,9 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; +import expert.android.quoccuong.androidpersistentdata.settings.SettingsActivity; +import expert.android.quoccuong.androidpersistentdata.settings.UserSettingsChangeListener; + public class MainActivity extends BaseActivity implements View.OnClickListener{ private EditText edtMessage; @@ -26,7 +35,10 @@ public class MainActivity extends BaseActivity implements View.OnClickListener{ private static final String FILENAME = "sample.txt"; + private SharedPreferences sharedPreferences; + private UserAction recentUserAction; + private UserSettingsChangeListener listener; enum UserAction { READ, WRITE @@ -46,6 +58,9 @@ protected void onCreate(Bundle savedInstanceState) { btnRead.setOnClickListener(this); Log.d("Cuong", "OnCreate"); + +// sharedPreferences = getSharedPreferences(getPackageName(), MODE_PRIVATE); context + sharedPreferences = getPreferences(MODE_PRIVATE); // activity } @Override @@ -69,7 +84,8 @@ protected void onResume() { private void populateTheReadText() { recentUserAction = UserAction.READ; - try { + txtMessage.setText(sharedPreferences.getString("sample_key", "String not found")); + /*try { if (arePermissionGranted(EXTERNAL_STORAGE_READ_WRITE_PERMISSION)) { txtMessage.setText(readTextFromExternalStorage(FILENAME)); txtMessage.setVisibility(View.VISIBLE); @@ -80,14 +96,17 @@ private void populateTheReadText() { } catch (IOException e) { e.printStackTrace(); txtMessage.setVisibility(View.GONE); - } + }*/ } private void writeContentToFile() { recentUserAction = UserAction.WRITE; String text = edtMessage.getText().toString(); if (!TextUtils.isEmpty(text)) { - try { + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putString("sample_key", text); + editor.commit(); + /*try { if (arePermissionGranted(EXTERNAL_STORAGE_READ_WRITE_PERMISSION)) { writeToExternalStorageFile(FILENAME, text); } else { @@ -96,7 +115,7 @@ private void writeContentToFile() { } } catch (IOException e) { e.printStackTrace(); - } + }*/ } } @@ -111,4 +130,32 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis } } } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater menuInflater = getMenuInflater(); + menuInflater.inflate(R.menu.menu_main_activity, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + + listener = new UserSettingsChangeListener(getApplicationContext()); + switch (item.getItemId()) { + case R.id.menu_settings: + startActivity(new Intent(getApplicationContext(), SettingsActivity.class)); + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).registerOnSharedPreferenceChangeListener(listener); + break; + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).unregisterOnSharedPreferenceChangeListener(listener); + } } diff --git a/AndroidPersistentData/app/src/main/java/expert/android/quoccuong/androidpersistentdata/settings/SettingsActivity.java b/AndroidPersistentData/app/src/main/java/expert/android/quoccuong/androidpersistentdata/settings/SettingsActivity.java new file mode 100644 index 0000000..3c9bd19 --- /dev/null +++ b/AndroidPersistentData/app/src/main/java/expert/android/quoccuong/androidpersistentdata/settings/SettingsActivity.java @@ -0,0 +1,20 @@ +package expert.android.quoccuong.androidpersistentdata.settings; + +import android.os.Bundle; +import android.preference.PreferenceActivity; +import android.support.annotation.Nullable; + +import expert.android.quoccuong.androidpersistentdata.R; + +/** + * Created by CuongDuong on 1/17/2018. + */ + +public class SettingsActivity extends PreferenceActivity { + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.user_pref_settings); + } +} diff --git a/AndroidPersistentData/app/src/main/java/expert/android/quoccuong/androidpersistentdata/settings/UserSettingsChangeListener.java b/AndroidPersistentData/app/src/main/java/expert/android/quoccuong/androidpersistentdata/settings/UserSettingsChangeListener.java new file mode 100644 index 0000000..6dcbeb4 --- /dev/null +++ b/AndroidPersistentData/app/src/main/java/expert/android/quoccuong/androidpersistentdata/settings/UserSettingsChangeListener.java @@ -0,0 +1,23 @@ +package expert.android.quoccuong.androidpersistentdata.settings; + +import android.content.Context; +import android.content.SharedPreferences; +import android.widget.Toast; + +/** + * Created by CuongDuong on 1/17/2018. + */ + +public class UserSettingsChangeListener implements SharedPreferences.OnSharedPreferenceChangeListener { + + private Context mContext; + + public UserSettingsChangeListener(Context mContext) { + this.mContext = mContext; + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) { + Toast.makeText(mContext, s + " value changed: " + sharedPreferences.getString(s, "Unknow"), Toast.LENGTH_SHORT).show(); + } +} diff --git a/AndroidPersistentData/app/src/main/res/layout/activity_main.xml b/AndroidPersistentData/app/src/main/res/layout/activity_main.xml index 618794d..8eb6cf9 100644 --- a/AndroidPersistentData/app/src/main/res/layout/activity_main.xml +++ b/AndroidPersistentData/app/src/main/res/layout/activity_main.xml @@ -40,6 +40,6 @@ android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:text="Hello World!" - android:visibility="gone" /> + android:visibility="visible" /> \ No newline at end of file diff --git a/AndroidPersistentData/app/src/main/res/menu/menu_main_activity.xml b/AndroidPersistentData/app/src/main/res/menu/menu_main_activity.xml new file mode 100644 index 0000000..b4e2d93 --- /dev/null +++ b/AndroidPersistentData/app/src/main/res/menu/menu_main_activity.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/AndroidPersistentData/app/src/main/res/xml/user_pref_settings.xml b/AndroidPersistentData/app/src/main/res/xml/user_pref_settings.xml new file mode 100644 index 0000000..be6dbd8 --- /dev/null +++ b/AndroidPersistentData/app/src/main/res/xml/user_pref_settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/android_image/android_data_persistent/shared_preferences.png b/android_image/android_data_persistent/shared_preferences.png new file mode 100644 index 0000000..9d5f1ae Binary files /dev/null and b/android_image/android_data_persistent/shared_preferences.png differ diff --git a/android_image/android_data_persistent/shared_preferences_2.png b/android_image/android_data_persistent/shared_preferences_2.png new file mode 100644 index 0000000..26ea103 Binary files /dev/null and b/android_image/android_data_persistent/shared_preferences_2.png differ diff --git a/android_image/android_data_persistent/shared_preferences_3.png b/android_image/android_data_persistent/shared_preferences_3.png new file mode 100644 index 0000000..8a14cd7 Binary files /dev/null and b/android_image/android_data_persistent/shared_preferences_3.png differ diff --git a/android_image/android_data_persistent/shared_preferences_4.png b/android_image/android_data_persistent/shared_preferences_4.png new file mode 100644 index 0000000..405c0c3 Binary files /dev/null and b/android_image/android_data_persistent/shared_preferences_4.png differ diff --git a/android_image/android_data_persistent/shared_preferences_5.png b/android_image/android_data_persistent/shared_preferences_5.png new file mode 100644 index 0000000..b327551 Binary files /dev/null and b/android_image/android_data_persistent/shared_preferences_5.png differ diff --git a/android_image/android_data_persistent/shared_preferences_6.png b/android_image/android_data_persistent/shared_preferences_6.png new file mode 100644 index 0000000..91364f0 Binary files /dev/null and b/android_image/android_data_persistent/shared_preferences_6.png differ diff --git a/note.txt b/note.txt index 1999a4c..9049483 100644 --- a/note.txt +++ b/note.txt @@ -139,3 +139,26 @@ And we may want to share it with another app in that case you have to use Custom 4. Path of file: data/data/ in Device File Explorer. +---------------------------- +SHARED PREFERENCES + +1. Store non sensitive data (language, fontsize, audio volume, cache username...) in xml. + +2. and no parsing + +3. Data types: boolean, float, int, long, String, Set + +4. get: +_ Context.getSharedPreferences +_ Activity.getPreferences + +5. put and get + +_ PUT: +SharedPreferences.Editor editor = sharedPreferences.edit(); +editor.putString("sample_key", text); +editor.commit(); + +_ GET: +sharedPreferences.getString("sample_key", "String not found") +