MainActivity.java:
Код: Выделить всё
package com.example;
import com.example.work.R;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private TextView startTimeTextView, endTimeTextView, todayTimeTextView, weekTimeTextView;
private Button startWorkButton, endWorkButton, resetWeekButton, showHelpButton;
private boolean working = false;
private long startTime = 0, endTime = 0;
private float[] workTimes = new float[7]; // Array to store weekly work times
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startTimeTextView = findViewById(R.id.startTimeTextView);
endTimeTextView = findViewById(R.id.endTimeTextView);
todayTimeTextView = findViewById(R.id.todayTimeTextView);
weekTimeTextView = findViewById(R.id.weekTimeTextView);
startWorkButton = findViewById(R.id.startWorkButton);
endWorkButton = findViewById(R.id.endWorkButton);
resetWeekButton = findViewById(R.id.resetWeekButton);
showHelpButton = findViewById(R.id.showHelpButton);
startWorkButton.setOnClickListener(view -> startWork());
endWorkButton.setOnClickListener(view -> endWork());
resetWeekButton.setOnClickListener(view -> resetWeek());
showHelpButton.setOnClickListener(view -> showHelp());
loadWorkTimes(); // Load work times from storage
updateUI(); // Update UI with loaded data
}
private void startWork() {
if (working) {
startTime = System.currentTimeMillis(); // Record start time in milliseconds
startTimeTextView.setText("Start Time: " + formatTime(startTime));
} else {
startTime = System.currentTimeMillis(); // Begin initial work session
startTimeTextView.setText("Start Time: " + formatTime(startTime));
endTime = 0; // Reset end time on new session
endTimeTextView.setText("End Time: ");
}
working = true; // Set working status to true
saveWorkingStatus(); // Save working status
updateUI();
}
private void endWork() {
if (!working) {
endTimeTextView.setText("You haven't started working yet!");
return;
}
endTime = System.currentTimeMillis(); // Record end time in milliseconds
float workDuration = (endTime - startTime) / 3600000.0f; // Convert milliseconds to hours
int dayOfWeek = getDayOfWeek();
workTimes[dayOfWeek] += workDuration; // Add work duration to the respective day
saveWorkTimes(); // Save updated work times
updateUI();
working = false; // Reset working status
saveWorkingStatus(); // Save working status
endTimeTextView.setText("End Time: " + formatTime(endTime));
}
private void resetWeek() {
for (int i = 0; i < workTimes.length; i++) {
workTimes[i] = 0; // Reset work times to zero
}
saveWorkTimes(); // Save reset work times
updateUI();
}
private void showHelp() {
// Show help dialog or message
new android.app.AlertDialog.Builder(this)
.setTitle("Help")
.setMessage("All commands:\n- Start Work: Start working session.\n- End Work: End working session.\n- Reset Week: Reset weekly work times.")
.setPositiveButton("OK", null)
.show();
}
private void updateUI() {
StringBuilder weekText = new StringBuilder();
weekText.append("Today: ").append(String.format(Locale.US, "%.3fh", workTimes[getDayOfWeek()])).append("\n");
float weekTotal = 0;
for (int i = 0; i < 7; i++) {
weekText.append("Day ").append(i).append(": ").append(String.format(Locale.US, "%.3fh", workTimes[i])).append("\n");
weekTotal += workTimes[i];
}
weekText.append("Week: ").append(String.format(Locale.US, "%.3fh", weekTotal)).append("\n");
weekTimeTextView.setText(weekText.toString());
if (startTime > 0) {
startTimeTextView.setText("Start Time: " + formatTime(startTime));
}
if (endTime > 0) {
endTimeTextView.setText("End Time: " + formatTime(endTime));
}
}
private String formatTime(long timeInMillis) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm", Locale.US);
return sdf.format(new Date(timeInMillis));
}
private int getDayOfWeek() {
return (int) ((System.currentTimeMillis() / (1000 * 60 * 60 * 24)) % 7); // Calculate day of week from milliseconds
}
private void saveWorkTimes() {
getSharedPreferences("workTimesPrefs", MODE_PRIVATE).edit().putString("workTimes", serializeWorkTimes()).apply();
}
private String serializeWorkTimes() {
StringBuilder sb = new StringBuilder();
for (float time : workTimes) {
sb.append(time).append(",");
}
return sb.toString();
}
private void loadWorkTimes() {
String workTimesString = getSharedPreferences("workTimesPrefs", MODE_PRIVATE).getString("workTimes", "0,0,0,0,0,0,0");
String[] workTimesArray = workTimesString.split(",");
for (int i = 0; i < workTimesArray.length; i++) {
workTimes[i] = Float.parseFloat(workTimesArray[i]);
}
}
private void saveWorkingStatus() {
getSharedPreferences("workingPrefs", MODE_PRIVATE).edit().putBoolean("working", working).apply();
}
}
Код: Выделить всё
Код: Выделить всё
Структура папок
app/java/com.example/ work/MainActivity.java
app/res/layout/activity_main.xml
app/manifests/AndroidManifest.xml
Не могли бы вы помочь мне это исправить? Я никогда не создавал приложения с помощью Android Studio, так что для меня все в новинку? Буду очень благодарен.
Подробнее здесь: https://stackoverflow.com/questions/786 ... it-android
Мобильная версия