package com.awesomedroidapps.appstoragedatareader.demo;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.Toast;
import com.awesomedroidapps.appstoragedatareader.demo.entity.PersonInfo;
import com.awesomedroidapps.inappstoragereader.Utils;
import java.util.ArrayList;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class AppStorageDemoActivity extends AppCompatActivity {
//Views in the database
@BindView(R.id.database_container)
LinearLayout databaseContainer;
@BindView(R.id.first_name)
EditText firstName;
@BindView(R.id.last_name)
EditText lastName;
@BindView(R.id.address)
EditText address;
@BindView(R.id.submit)
Button submit;
//Views in the shared preference.
@BindView(R.id.shared_preference_container)
LinearLayout sharedPreferenceContainer;
@BindView(R.id.shared_preference_key)
EditText sharedPreferenceKey;
@BindView(R.id.shared_preference_value)
EditText sharedPreferenceValue;
@BindView(R.id.shared_preference_spinner)
Spinner sharedPreferenceSpinner;
private int currentView = Constants.DATABASE_VIEW;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_appstorage_demo);
ButterKnife.bind(this);
//Initially show Table View.
showTableView();
fillDefaultValuesInTable();
fillDefaultValuesInSharedPreferences();
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item,
getSpinnerArray());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sharedPreferenceSpinner.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.appstorage_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.menu_table:
showTableView();
break;
case R.id.menu_shared_preference:
showSharedPreferencesView();
break;
case R.id.menu_refresh:
refreshUI();
break;
}
return super.onOptionsItemSelected(item);
}
private void showTableView() {
currentView = Constants.DATABASE_VIEW;
databaseContainer.setVisibility(View.VISIBLE);
sharedPreferenceContainer.setVisibility(View.GONE);
}
private void showSharedPreferencesView() {
currentView = Constants.SHARED_PREFERENCE_VIEW;
sharedPreferenceContainer.setVisibility(View.VISIBLE);
databaseContainer.setVisibility(View.GONE);
}
private void refreshUI() {
switch (currentView) {
case Constants.DATABASE_VIEW:
firstName.setText(Constants.EMPTY_STRING);
lastName.setText(Constants.EMPTY_STRING);
address.setText(Constants.EMPTY_STRING);
break;
case Constants.SHARED_PREFERENCE_VIEW:
sharedPreferenceKey.setText(Constants.EMPTY_STRING);
sharedPreferenceValue.setText(Constants.EMPTY_STRING);
sharedPreferenceSpinner.setSelection(Constants.ZERO_INDEX);
break;
}
}
@OnClick(R.id.submit)
public void submit() {
switch (currentView) {
case Constants.DATABASE_VIEW:
enterValuesIntoDB();
break;
case Constants.SHARED_PREFERENCE_VIEW:
enterValuesIntoSharedPreferences();
break;
}
}
private void enterValuesIntoDB() {
String firstNameStr = firstName.getText().toString();
String lastNameStr = lastName.getText().toString();
String addressStr = address.getText().toString();
if (Utils.isEmpty(firstNameStr) && Utils.isEmpty(lastNameStr) && Utils.isEmpty(addressStr)) {
showToast(string(R.string.table_empty_values_error_msg));
return;
}
PersonInfo personInfo = new PersonInfo();
personInfo.setFirstName(firstNameStr);
personInfo.setLastName(lastNameStr);
personInfo.setAddress(addressStr);
long insertResponse = insertIntoDatabase(personInfo);
if (insertResponse == Constants.INVALID_INSERT_RESPONSE) {
showToast(string(R.string.table_insert_failure));
} else {
showToast(string(R.string.table_insert_success));
}
}
private void enterValuesIntoSharedPreferences() {
if (!(sharedPreferenceSpinner.getSelectedItem() instanceof String)) {
return;
}
SharedPreferenceDataType selectedDataType = SharedPreferenceDataType.getDataType((String)
sharedPreferenceSpinner.getSelectedItem());
if (selectedDataType == SharedPreferenceDataType.UNKNOWN) {
showToast(getString(R.string.shared_preference_datatype_error));
return;
}
String keyStr = sharedPreferenceKey.getText().toString();
String valueStr = sharedPreferenceValue.getText().toString();
if (Utils.isEmpty(keyStr) || Utils.isEmpty(valueStr)) {
showToast(getString(R.string.shared_preference_key_value_error));
return;
}
insertIntoSharedPreference(keyStr, valueStr, selectedDataType,
Constants.PERSON_INFO_SHARED_PREFERENCES1);
showToast(string(R.string.shared_preferences_insert_success));
}
private void fillDefaultValuesInTable() {
String[] defaultFirstNames = getResources().getStringArray(R.array.defaultFirstNames);
String[] defaultLastNames = getResources().getStringArray(R.array.defaultLastNames);
String[] defaultAddresses = getResources().getStringArray(R.array.defaultAddresses);
for (int i = 0; i < defaultFirstNames.length; i++) {
PersonInfo personInfo = new PersonInfo();
personInfo.setFirstName(defaultFirstNames[i]);
personInfo.setLastName(defaultLastNames[i]);
personInfo.setAddress(defaultAddresses[i]);
insertIntoDatabase(personInfo);
}
}
private void fillDefaultValuesInSharedPreferences() {
String[] defaultKeys = getResources().getStringArray(R.array.defaultPersonInfoKeys1);
String[] defaultValues = getResources().getStringArray(R.array.defaultPersonInfoValues1);
for (int i = 0; i < defaultKeys.length; i++) {
insertIntoSharedPreference(defaultKeys[i], defaultValues[i], SharedPreferenceDataType
.STRING, Constants.PERSON_INFO_SHARED_PREFERENCES1);
}
defaultKeys = getResources().getStringArray(R.array.defaultPersonInfoKeys2);
defaultValues = getResources().getStringArray(R.array.defaultPersonInfoValues2);
for (int i = 0; i < defaultKeys.length; i++) {
insertIntoSharedPreference(defaultKeys[i], defaultValues[i], SharedPreferenceDataType
.STRING, Constants.PERSON_INFO_SHARED_PREFERENCES2);
}
}
private long insertIntoDatabase(PersonInfo personInfo) {
DataReaderSqliteOpenHelper helper = new DataReaderSqliteOpenHelper(this);
return helper.insert(personInfo);
}
private void insertIntoSharedPreference(String key, String value, SharedPreferenceDataType
dataType, String fileName) {
if (Utils.isEmpty(key) || value == null) {
return;
}
SharedPreferences sharedPreferences =
getSharedPreferences(fileName, Context
.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
switch (dataType) {
case STRING:
editor.putString(key, value);
break;
case INT:
try {
int intVal = Integer.parseInt(value);
editor.putInt(key, intVal);
} catch (Exception e) {
showToast(getString(R.string.shared_preferences_error_integer));
return;
}
break;
}
editor.commit();
}
private String string(int resId) {
return getResources().getString(resId);
}
private void showToast(String message) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onStop() {
super.onStop();
}
private ArrayList<String> getSpinnerArray() {
ArrayList<String> spinnerArrayList = new ArrayList<>();
for (SharedPreferenceDataType sharedPreferenceDataType : SharedPreferenceDataType.values()) {
spinnerArrayList.add(sharedPreferenceDataType.getType());
}
return spinnerArrayList;
}
}