diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 1d59082..e2a4e7f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -65,6 +65,23 @@
android:name="android.support.PARENT_ACTIVITY"
android:value=".view.MainActivity" />
+
+
+
+
+
+
+
+
0 && !clientKey.isEmpty();
+ }
}
diff --git a/app/src/main/java/com/mattintech/simplelogupload/view/MainActivity.java b/app/src/main/java/com/mattintech/simplelogupload/view/MainActivity.java
index ed842c1..8afeb43 100644
--- a/app/src/main/java/com/mattintech/simplelogupload/view/MainActivity.java
+++ b/app/src/main/java/com/mattintech/simplelogupload/view/MainActivity.java
@@ -25,6 +25,7 @@ import com.mattintech.simplelogupload.controller.ShareIntentHandler;
import com.mattintech.simplelogupload.controller.UploadController;
import com.mattintech.simplelogupload.service.FileUploadForegroundService;
import com.mattintech.simplelogupload.util.PermissionUtil;
+import com.mattintech.simplelogupload.util.PreferencesUtil;
import java.io.File;
import java.util.List;
@@ -48,6 +49,16 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
+ // Check if setup is required
+ if (!PreferencesUtil.isSetupCompleted(this) || !PreferencesUtil.areServerSettingsConfigured(this)) {
+ // Navigate to welcome activity
+ Intent intent = new Intent(this, WelcomeActivity.class);
+ startActivity(intent);
+ finish();
+ return;
+ }
+
setContentView(R.layout.activity_main);
uploadController = new UploadController(this);
diff --git a/app/src/main/java/com/mattintech/simplelogupload/view/ServerSetupActivity.java b/app/src/main/java/com/mattintech/simplelogupload/view/ServerSetupActivity.java
new file mode 100644
index 0000000..77b6651
--- /dev/null
+++ b/app/src/main/java/com/mattintech/simplelogupload/view/ServerSetupActivity.java
@@ -0,0 +1,112 @@
+package com.mattintech.simplelogupload.view;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.Button;
+import android.widget.Toast;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.google.android.material.textfield.TextInputEditText;
+import com.mattintech.simplelogupload.R;
+import com.mattintech.simplelogupload.constant.AppConstants;
+import com.mattintech.simplelogupload.util.PreferencesUtil;
+
+/**
+ * Activity for server setup
+ */
+public class ServerSetupActivity extends AppCompatActivity {
+ private static final String TAG = AppConstants.APP_TAG + "ServerSetupActivity";
+
+ private TextInputEditText serverAddressInput;
+ private TextInputEditText serverPortInput;
+ private TextInputEditText clientKeyInput;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_server_setup);
+
+ // Initialize UI components
+ serverAddressInput = findViewById(R.id.serverAddressInput);
+ serverPortInput = findViewById(R.id.serverPortInput);
+ clientKeyInput = findViewById(R.id.clientKeyInput);
+ Button finishSetupButton = findViewById(R.id.finishSetupButton);
+
+ // Set up action bar
+ if (getSupportActionBar() != null) {
+ getSupportActionBar().setTitle("Server Setup");
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ }
+
+ // Set up button click listener
+ finishSetupButton.setOnClickListener(v -> saveSettings());
+ }
+
+ /**
+ * Save settings to SharedPreferences
+ */
+ private void saveSettings() {
+ try {
+ // Get values from input fields
+ String serverAddress = serverAddressInput.getText().toString().trim();
+ String serverPortStr = serverPortInput.getText().toString().trim();
+ String clientKey = clientKeyInput.getText().toString().trim();
+
+ // Validate input
+ if (TextUtils.isEmpty(serverAddress)) {
+ serverAddressInput.setError("Server address is required");
+ return;
+ }
+
+ if (TextUtils.isEmpty(serverPortStr)) {
+ serverPortInput.setError("Server port is required");
+ return;
+ }
+
+ int serverPort;
+ try {
+ serverPort = Integer.parseInt(serverPortStr);
+ if (serverPort <= 0 || serverPort > 65535) {
+ serverPortInput.setError("Port must be between 1 and 65535");
+ return;
+ }
+ } catch (NumberFormatException e) {
+ serverPortInput.setError("Invalid port number");
+ return;
+ }
+
+ if (TextUtils.isEmpty(clientKey)) {
+ clientKeyInput.setError("Client key is required");
+ return;
+ }
+
+ // Save settings
+ PreferencesUtil.setServerAddress(this, serverAddress);
+ PreferencesUtil.setServerPort(this, serverPort);
+ PreferencesUtil.setClientKey(this, clientKey);
+ PreferencesUtil.setSetupCompleted(this, true);
+
+ Log.d(TAG, "Server setup completed successfully");
+ Toast.makeText(this, "Setup completed successfully!", Toast.LENGTH_SHORT).show();
+
+ // Navigate to main activity
+ Intent intent = new Intent(ServerSetupActivity.this, MainActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ startActivity(intent);
+ finish();
+
+ } catch (Exception e) {
+ Log.e(TAG, "Error saving settings", e);
+ Toast.makeText(this, "Error saving settings: " + e.getMessage(), Toast.LENGTH_LONG).show();
+ }
+ }
+
+ @Override
+ public boolean onSupportNavigateUp() {
+ onBackPressed();
+ return true;
+ }
+}
diff --git a/app/src/main/java/com/mattintech/simplelogupload/view/SettingsActivity.java b/app/src/main/java/com/mattintech/simplelogupload/view/SettingsActivity.java
index be59fab..8110644 100644
--- a/app/src/main/java/com/mattintech/simplelogupload/view/SettingsActivity.java
+++ b/app/src/main/java/com/mattintech/simplelogupload/view/SettingsActivity.java
@@ -53,9 +53,17 @@ public class SettingsActivity extends AppCompatActivity {
* Load current settings from SharedPreferences
*/
private void loadSettings() {
- serverAddressInput.setText(PreferencesUtil.getServerAddress(this));
- serverPortInput.setText(String.valueOf(PreferencesUtil.getServerPort(this)));
- clientKeyInput.setText(PreferencesUtil.getClientKey(this));
+ String serverAddress = PreferencesUtil.getServerAddress(this);
+ int serverPort = PreferencesUtil.getServerPort(this);
+ String clientKey = PreferencesUtil.getClientKey(this);
+
+ serverAddressInput.setText(serverAddress);
+ if (serverPort > 0) {
+ serverPortInput.setText(String.valueOf(serverPort));
+ } else {
+ serverPortInput.setText("");
+ }
+ clientKeyInput.setText(clientKey);
}
/**
diff --git a/app/src/main/java/com/mattintech/simplelogupload/view/WelcomeActivity.java b/app/src/main/java/com/mattintech/simplelogupload/view/WelcomeActivity.java
new file mode 100644
index 0000000..c883fda
--- /dev/null
+++ b/app/src/main/java/com/mattintech/simplelogupload/view/WelcomeActivity.java
@@ -0,0 +1,35 @@
+package com.mattintech.simplelogupload.view;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.widget.Button;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.mattintech.simplelogupload.R;
+
+/**
+ * Welcome activity for first-time setup
+ */
+public class WelcomeActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_welcome);
+
+ // Hide action bar for cleaner look
+ if (getSupportActionBar() != null) {
+ getSupportActionBar().hide();
+ }
+
+ // Set up next button
+ Button nextButton = findViewById(R.id.nextButton);
+ nextButton.setOnClickListener(v -> {
+ // Proceed to server setup activity
+ Intent intent = new Intent(WelcomeActivity.this, ServerSetupActivity.class);
+ startActivity(intent);
+ // No finish() here to allow back navigation
+ });
+ }
+}
diff --git a/app/src/main/res/layout/activity_server_setup.xml b/app/src/main/res/layout/activity_server_setup.xml
new file mode 100644
index 0000000..01ee407
--- /dev/null
+++ b/app/src/main/res/layout/activity_server_setup.xml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+