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.SharedPreferences;
// To manage current count of events
// and maximum count of events
public class CountSharedPreferenceHelper {
private final SharedPreferences sharedPreferences;
@ -25,6 +27,8 @@ public class CountSharedPreferenceHelper {
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) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("counterButtonEventsList", buttonEventsList);

View File

@ -1,17 +1,19 @@
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"),
SECOND("counter_2_button_name"),
THIRD("counter_3_button_name");
private String counter_button_name;
CounterButton(String counterButtonName) {
CounterButtonNames(String counterButtonName) {
this.counter_button_name = counterButtonName;
}
public String getCounterButton() {
public String getCounterButtonName() {
return counter_button_name;
}
}

View File

@ -13,13 +13,13 @@ public class CounterButtonSharedPreferenceHelper {
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();
editor.putString(counterButton.getCounterButton(), eventButtonName);
editor.putString(counterButtonNames.getCounterButtonName(), eventButtonName);
editor.apply();
}
public String getCounterButtonName(CounterButton counterButton) {
return sharedPreferences.getString(counterButton.getCounterButton(), "");
public String getCounterButtonName(CounterButtonNames counterButtonNames) {
return sharedPreferences.getString(counterButtonNames.getCounterButtonName(), "");
}
}

View File

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

View File

@ -34,6 +34,7 @@ public class SettingsActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
// initializations
myToolbar = (Toolbar) findViewById(R.id.settings_toolbar);
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);
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_2_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
setSupportActionBar(myToolbar);
assert getSupportActionBar() != null;
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //show back button
// the display mode is showed by default
goToSettingsActivityDisplayMode();
}
@ -62,15 +64,14 @@ public class SettingsActivity extends AppCompatActivity {
protected void 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();
} else {
counter_1_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.FIRST));
counter_2_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.SECOND));
counter_3_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.THIRD));
maximum_counts_edit_text.setHint(String.format(Integer.toString(countSharedPrefHelper.getCurrentCount())));
counter_1_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.FIRST));
counter_2_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.SECOND));
counter_3_name_edit_text.setHint(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.THIRD));
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);
maximum_counts_edit_text.setEnabled(true);
counter_1_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.FIRST));
counter_2_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.SECOND));
counter_3_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButton.THIRD));
counter_1_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.FIRST));
counter_2_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.SECOND));
counter_3_name_edit_text.setText(counterButtonSharedPrefHelper.getCounterButtonName(CounterButtonNames.THIRD));
maximum_counts_edit_text.setText(String.format(Integer.toString(countSharedPrefHelper.getMaxCount())));
String curr_text1 = counter_1_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();
int curr_maximum_count = Integer.parseInt(maximum_counts_edit_text.getText().toString());
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
@ -136,17 +136,16 @@ public class SettingsActivity extends AppCompatActivity {
String text3 = counter_3_name_edit_text.getText().toString();
int maximum_count = Integer.parseInt(maximum_counts_edit_text.getText().toString());
counterButtonSharedPrefHelper.saveCounterButtonName(CounterButton.FIRST, text1);
counterButtonSharedPrefHelper.saveCounterButtonName(CounterButton.SECOND, text2);
counterButtonSharedPrefHelper.saveCounterButtonName(CounterButton.THIRD, text3);
counterButtonSharedPrefHelper.saveCounterButtonName(CounterButtonNames.FIRST, text1);
counterButtonSharedPrefHelper.saveCounterButtonName(CounterButtonNames.SECOND, text2);
counterButtonSharedPrefHelper.saveCounterButtonName(CounterButtonNames.THIRD, text3);
countSharedPrefHelper.saveMaxCount(maximum_count);
// if the fields been changed, we reset the count and the events list
if (
!(curr_text1.equals(text1)) ||
!(curr_text2.equals(text2)) ||
!(curr_text3.equals(text3)) ||
!(maximum_count == curr_maximum_count)
!(curr_text3.equals(text3))
){
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() {
try {
int countInput = Integer.parseInt(maximum_counts_edit_text.getText().toString());

View File

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