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")
+