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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +