Refactored, final version

This commit is contained in:
minhtrannhat 2023-09-16 21:01:20 -04:00
parent bafdbbe5a7
commit af3d8a8761
Signed by: minhtrannhat
GPG Key ID: E13CFA85C53F8062
6 changed files with 55 additions and 44 deletions

View File

@ -3,6 +3,8 @@ package com.example.assignment1;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
// To manage current count of events
// and maximum count of events
public class CountSharedPreferenceHelper { public class CountSharedPreferenceHelper {
private final SharedPreferences sharedPreferences; private final SharedPreferences sharedPreferences;
@ -25,6 +27,8 @@ public class CountSharedPreferenceHelper {
return sharedPreferences.getString("counterButtonEventsList", "").length(); return sharedPreferences.getString("counterButtonEventsList", "").length();
} }
// the events list is just one string with number 1, 2, 3 in it
// i.e "123112233331231231122332"
public void setEventsList(String buttonEventsList) { public void setEventsList(String buttonEventsList) {
SharedPreferences.Editor editor = sharedPreferences.edit(); SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("counterButtonEventsList", buttonEventsList); editor.putString("counterButtonEventsList", buttonEventsList);

View File

@ -1,17 +1,19 @@
package com.example.assignment1; package com.example.assignment1;
public enum CounterButton { // There are only 3 buttons available to select
// so Enum seemed to be the suitable choice of data structure here
public enum CounterButtonNames {
FIRST("counter_1_button_name"), FIRST("counter_1_button_name"),
SECOND("counter_2_button_name"), SECOND("counter_2_button_name"),
THIRD("counter_3_button_name"); THIRD("counter_3_button_name");
private String counter_button_name; private String counter_button_name;
CounterButton(String counterButtonName) { CounterButtonNames(String counterButtonName) {
this.counter_button_name = counterButtonName; this.counter_button_name = counterButtonName;
} }
public String getCounterButton() { public String getCounterButtonName() {
return counter_button_name; return counter_button_name;
} }
} }

View File

@ -13,13 +13,13 @@ public class CounterButtonSharedPreferenceHelper {
sharedPreferences = context.getSharedPreferences("counter_button", Context.MODE_PRIVATE); sharedPreferences = context.getSharedPreferences("counter_button", Context.MODE_PRIVATE);
} }
public void saveCounterButtonName(CounterButton counterButton, String eventButtonName) { public void saveCounterButtonName(CounterButtonNames counterButtonNames, String eventButtonName) {
SharedPreferences.Editor editor = sharedPreferences.edit(); SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(counterButton.getCounterButton(), eventButtonName); editor.putString(counterButtonNames.getCounterButtonName(), eventButtonName);
editor.apply(); editor.apply();
} }
public String getCounterButtonName(CounterButton counterButton) { public String getCounterButtonName(CounterButtonNames counterButtonNames) {
return sharedPreferences.getString(counterButton.getCounterButton(), ""); return sharedPreferences.getString(counterButtonNames.getCounterButtonName(), "");
} }
} }

View File

@ -2,7 +2,6 @@ package com.example.assignment1;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.TextView; import android.widget.TextView;
@ -31,6 +30,7 @@ public class MainActivity extends AppCompatActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
// initialization
settingsButton = findViewById(R.id.settings_button); settingsButton = findViewById(R.id.settings_button);
showCountsButton = findViewById(R.id.show_counts_button); showCountsButton = findViewById(R.id.show_counts_button);
@ -43,7 +43,6 @@ public class MainActivity extends AppCompatActivity {
counterButtonSharedPrefHelper = new CounterButtonSharedPreferenceHelper(MainActivity.this); counterButtonSharedPrefHelper = new CounterButtonSharedPreferenceHelper(MainActivity.this);
countSharedPreferenceHelper = new CountSharedPreferenceHelper(MainActivity.this); countSharedPreferenceHelper = new CountSharedPreferenceHelper(MainActivity.this);
settingsButton.setOnClickListener(new View.OnClickListener() { settingsButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@ -55,7 +54,7 @@ public class MainActivity extends AppCompatActivity {
showCountsButton.setOnClickListener(new View.OnClickListener() { showCountsButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
// Create an Intent to start the SettingsActivity // Create an Intent to start the DataActivity
goToDataActivity(); goToDataActivity();
} }
}); });
@ -86,16 +85,18 @@ public class MainActivity extends AppCompatActivity {
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
if (counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.FIRST).trim().isEmpty() || // go to settings activity in edit mode
counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.SECOND).trim().isEmpty() || if (counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.FIRST).trim().isEmpty() ||
counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.THIRD).trim().isEmpty()) { counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.SECOND).trim().isEmpty() ||
counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.THIRD).trim().isEmpty()) {
Toast.makeText(getApplicationContext(), "Event Button(s) can not be empty", Toast.LENGTH_SHORT).show(); Toast.makeText(getApplicationContext(), "Event Button(s) can not be empty", Toast.LENGTH_SHORT).show();
goToSettingsActivity(); goToSettingsActivity();
// everything field is good, no edit needed
} else { } else {
firstCounterButton.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.FIRST)); firstCounterButton.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.FIRST));
secondCounterButton.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.SECOND)); secondCounterButton.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.SECOND));
thirdCounterButton.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.THIRD)); thirdCounterButton.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.THIRD));
counter.setText(String.format(Integer.toString(countSharedPreferenceHelper.getCurrentCount()))); counter.setText(String.format(Integer.toString(countSharedPreferenceHelper.getCurrentCount())));
} }
@ -114,10 +115,12 @@ public class MainActivity extends AppCompatActivity {
private void incrementCounter(String counterNumber) { private void incrementCounter(String counterNumber) {
try { try {
if (Integer.parseInt(counter.getText().toString()) < countSharedPreferenceHelper.getMaxCount()) { if (Integer.parseInt(counter.getText().toString()) < countSharedPreferenceHelper.getMaxCount()) {
// add the event into the events list
// the events list is just one string with number 1, 2, 3 in it
// i.e "123112233331231231122332"
countSharedPreferenceHelper.setEventsList(countSharedPreferenceHelper.getEventsList() + counterNumber); countSharedPreferenceHelper.setEventsList(countSharedPreferenceHelper.getEventsList() + counterNumber);
Log.d("MainActivity", countSharedPreferenceHelper.getEventsList()); // update the counter
String currentValue = counter.getText().toString(); String currentValue = counter.getText().toString();
int intValue = Integer.parseInt(currentValue); int intValue = Integer.parseInt(currentValue);
int newValue = intValue + 1; int newValue = intValue + 1;

View File

@ -34,6 +34,7 @@ public class SettingsActivity extends AppCompatActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings); setContentView(R.layout.activity_settings);
// initializations
myToolbar = (Toolbar) findViewById(R.id.settings_toolbar); myToolbar = (Toolbar) findViewById(R.id.settings_toolbar);
saveButton = (Button) findViewById(R.id.saveButton); saveButton = (Button) findViewById(R.id.saveButton);
@ -42,6 +43,7 @@ public class SettingsActivity extends AppCompatActivity {
counter_3_name_edit_text = (EditText) findViewById(R.id.counter_3_edit_text); counter_3_name_edit_text = (EditText) findViewById(R.id.counter_3_edit_text);
maximum_counts_edit_text = (EditText) findViewById(R.id.maximum_counts_edit_text); maximum_counts_edit_text = (EditText) findViewById(R.id.maximum_counts_edit_text);
// set the max lengths for event buttons names
counter_1_name_edit_text.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)}); counter_1_name_edit_text.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});
counter_2_name_edit_text.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)}); counter_2_name_edit_text.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});
counter_3_name_edit_text.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)}); counter_3_name_edit_text.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});
@ -51,10 +53,10 @@ public class SettingsActivity extends AppCompatActivity {
// enable toolbar/actionbar // enable toolbar/actionbar
setSupportActionBar(myToolbar); setSupportActionBar(myToolbar);
assert getSupportActionBar() != null; assert getSupportActionBar() != null;
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //show back button getSupportActionBar().setDisplayHomeAsUpEnabled(true); //show back button
// the display mode is showed by default
goToSettingsActivityDisplayMode(); goToSettingsActivityDisplayMode();
} }
@ -62,15 +64,14 @@ public class SettingsActivity extends AppCompatActivity {
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
if (counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.FIRST).equals("") || counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.SECOND).equals("") || counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.THIRD).equals("")) { // the event buttons names are not satisfactory, must be edited
if (counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.FIRST).equals("") || counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.SECOND).equals("") || counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.THIRD).equals("")) {
goToSettingsActivityEditMode(); goToSettingsActivityEditMode();
} else { } else {
counter_1_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.FIRST)); counter_1_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.FIRST));
counter_2_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.SECOND)); counter_2_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.SECOND));
counter_3_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.THIRD)); counter_3_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.THIRD));
maximum_counts_edit_text.setHint(String.format(Integer.toString(countSharedPrefHelper.getCurrentCount()))); maximum_counts_edit_text.setHint(String.format(Integer.toString(countSharedPrefHelper.getMaxCount())));
} }
} }
@ -115,15 +116,14 @@ public class SettingsActivity extends AppCompatActivity {
counter_3_name_edit_text.setEnabled(true); counter_3_name_edit_text.setEnabled(true);
maximum_counts_edit_text.setEnabled(true); maximum_counts_edit_text.setEnabled(true);
counter_1_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.FIRST)); counter_1_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.FIRST));
counter_2_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.SECOND)); counter_2_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.SECOND));
counter_3_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.THIRD)); counter_3_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.THIRD));
maximum_counts_edit_text.setText(String.format(Integer.toString(countSharedPrefHelper.getMaxCount()))); maximum_counts_edit_text.setText(String.format(Integer.toString(countSharedPrefHelper.getMaxCount())));
String curr_text1 = counter_1_name_edit_text.getText().toString(); String curr_text1 = counter_1_name_edit_text.getText().toString();
String curr_text2 = counter_2_name_edit_text.getText().toString(); String curr_text2 = counter_2_name_edit_text.getText().toString();
String curr_text3 = counter_3_name_edit_text.getText().toString(); String curr_text3 = counter_3_name_edit_text.getText().toString();
int curr_maximum_count = Integer.parseInt(maximum_counts_edit_text.getText().toString());
saveButton.setOnClickListener(new View.OnClickListener() { saveButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -136,17 +136,16 @@ public class SettingsActivity extends AppCompatActivity {
String text3 = counter_3_name_edit_text.getText().toString(); String text3 = counter_3_name_edit_text.getText().toString();
int maximum_count = Integer.parseInt(maximum_counts_edit_text.getText().toString()); int maximum_count = Integer.parseInt(maximum_counts_edit_text.getText().toString());
counterButtonSharedPrefHelper.saveCounterButtonName(CounterButton.FIRST, text1); counterButtonSharedPrefHelper.saveCounterButtonName(CounterButtonNames.FIRST, text1);
counterButtonSharedPrefHelper.saveCounterButtonName(CounterButton.SECOND, text2); counterButtonSharedPrefHelper.saveCounterButtonName(CounterButtonNames.SECOND, text2);
counterButtonSharedPrefHelper.saveCounterButtonName(CounterButton.THIRD, text3); counterButtonSharedPrefHelper.saveCounterButtonName(CounterButtonNames.THIRD, text3);
countSharedPrefHelper.saveMaxCount(maximum_count); countSharedPrefHelper.saveMaxCount(maximum_count);
// if the fields been changed, we reset the count and the events list // if the fields been changed, we reset the count and the events list
if ( if (
!(curr_text1.equals(text1)) || !(curr_text1.equals(text1)) ||
!(curr_text2.equals(text2)) || !(curr_text2.equals(text2)) ||
!(curr_text3.equals(text3)) || !(curr_text3.equals(text3))
!(maximum_count == curr_maximum_count)
){ ){
countSharedPrefHelper.setEventsList(""); countSharedPrefHelper.setEventsList("");
} }
@ -157,6 +156,7 @@ public class SettingsActivity extends AppCompatActivity {
}); });
} }
// check if the max count field is valid or not
protected Boolean check_max_count_input() { protected Boolean check_max_count_input() {
try { try {
int countInput = Integer.parseInt(maximum_counts_edit_text.getText().toString()); int countInput = Integer.parseInt(maximum_counts_edit_text.getText().toString());

View File

@ -39,6 +39,7 @@ public class dataActivity extends AppCompatActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data); setContentView(R.layout.activity_data);
// initializations
myToolbar = (Toolbar) findViewById(R.id.data_toolbar); myToolbar = (Toolbar) findViewById(R.id.data_toolbar);
firstCounterButtonName = findViewById(R.id.counter_1_data_name); firstCounterButtonName = findViewById(R.id.counter_1_data_name);
secondCounterButtonName = findViewById(R.id.counter_2_data_name); secondCounterButtonName = findViewById(R.id.counter_2_data_name);
@ -52,8 +53,8 @@ public class dataActivity extends AppCompatActivity {
counterButtonSharedPrefHelper = new CounterButtonSharedPreferenceHelper(dataActivity.this); counterButtonSharedPrefHelper = new CounterButtonSharedPreferenceHelper(dataActivity.this);
countSharedPrefHelper = new CountSharedPreferenceHelper(dataActivity.this); countSharedPrefHelper = new CountSharedPreferenceHelper(dataActivity.this);
// set up the actionbar
setSupportActionBar(myToolbar); setSupportActionBar(myToolbar);
assert getSupportActionBar() != null; assert getSupportActionBar() != null;
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //show back button getSupportActionBar().setDisplayHomeAsUpEnabled(true); //show back button
} }
@ -62,15 +63,16 @@ public class dataActivity extends AppCompatActivity {
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
firstCounterButtonName.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.FIRST)); firstCounterButtonName.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.FIRST));
secondCounterButtonName.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.SECOND)); secondCounterButtonName.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.SECOND));
thirdCounterButtonName.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.THIRD)); thirdCounterButtonName.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.THIRD));
currentCounter.setText(String.format(Integer.toString(countSharedPrefHelper.getCurrentCount()))); currentCounter.setText(String.format(Integer.toString(countSharedPrefHelper.getCurrentCount())));
firstCounter.setText(countSharedPrefHelper.getNumberOfEventInEventsList('1')); firstCounter.setText(countSharedPrefHelper.getNumberOfEventInEventsList('1'));
secondCounter.setText(countSharedPrefHelper.getNumberOfEventInEventsList('2')); secondCounter.setText(countSharedPrefHelper.getNumberOfEventInEventsList('2'));
thirdCounter.setText(countSharedPrefHelper.getNumberOfEventInEventsList('3')); thirdCounter.setText(countSharedPrefHelper.getNumberOfEventInEventsList('3'));
// by default, show the events list with names
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, constructListViewWithNames()); ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, constructListViewWithNames());
ListView listView = findViewById(R.id.eventsListView); ListView listView = findViewById(R.id.eventsListView);
@ -80,6 +82,7 @@ public class dataActivity extends AppCompatActivity {
showingNames = false; showingNames = false;
} }
// for the actionbar menu
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.data_activity_menu, menu); getMenuInflater().inflate(R.menu.data_activity_menu, menu);
return true; return true;
@ -109,6 +112,7 @@ public class dataActivity extends AppCompatActivity {
listView.setAdapter(adapter); listView.setAdapter(adapter);
// toggle the names
showingNames = !showingNames; showingNames = !showingNames;
return true; return true;
@ -118,12 +122,10 @@ public class dataActivity extends AppCompatActivity {
} }
private String[] constructListViewWithNames() { private String[] constructListViewWithNames() {
Map<String, String> replacements = new HashMap<>(); Map<String, String> replacements = new HashMap<>();
replacements.put("1", counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.FIRST)); replacements.put("1", counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.FIRST));
replacements.put("2", counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.SECOND)); replacements.put("2", counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.SECOND));
replacements.put("3", counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.THIRD)); replacements.put("3", counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.THIRD));
return Arrays.stream(constructListViewWithoutNames()).map(value -> replacements.getOrDefault(value, value)).toArray(String[]::new); return Arrays.stream(constructListViewWithoutNames()).map(value -> replacements.getOrDefault(value, value)).toArray(String[]::new);
} }