mirror of
https://github.com/TimeCrafters/TimeCraftersConfigurationTool.git
synced 2025-12-15 05:02:33 +00:00
Added TACNETDialog for showing tacnet error messages, when connecting to server actionbar will show connection status colors, packetError is now processed, server now sends correctly formatted error message when there is already a client connected.
This commit is contained in:
@@ -2,11 +2,15 @@ package org.timecrafters.TimeCraftersConfigurationTool;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.navigation.NavController;
|
||||
import androidx.navigation.Navigation;
|
||||
@@ -18,6 +22,7 @@ import com.google.android.material.bottomnavigation.LabelVisibilityMode;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.TAC;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.TACNET;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.tacnet.TACNETOnBootReceiver;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.tacnet.TACNETServerService;
|
||||
|
||||
@@ -46,6 +51,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
Backend.instance().applicationContext = getApplicationContext();
|
||||
Backend.instance().mainActivity = this;
|
||||
|
||||
if (Backend.instance().getSettings().mobileShowNavigationLabels) {
|
||||
navView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
|
||||
@@ -67,6 +73,32 @@ public class MainActivity extends AppCompatActivity {
|
||||
if (getIntent().getBooleanExtra("navigate_to_tacnet", false)) {
|
||||
Navigation.findNavController(this, R.id.nav_host_fragment).navigate(R.id.navigation_tacnet);
|
||||
}
|
||||
|
||||
startTACNETStatusIndictator();
|
||||
}
|
||||
|
||||
private void startTACNETStatusIndictator() {
|
||||
final Handler handler = new Handler(getMainLooper());
|
||||
|
||||
handler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final TACNET tacnet = Backend.instance().tacnet();
|
||||
final ActionBar actionBar = getSupportActionBar();
|
||||
|
||||
if (tacnet.isConnected()) {
|
||||
actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.tacnetConnectionConnected)));
|
||||
} else if (tacnet.isConnecting()) {
|
||||
actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.tacnetConnectionConnecting)));
|
||||
} else if (tacnet.isConnectionError()) {
|
||||
actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.tacnetConnectionConnectionError)));
|
||||
} else {
|
||||
actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.colorPrimary)));
|
||||
}
|
||||
|
||||
handler.postDelayed(this, 500);
|
||||
}
|
||||
}, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -4,7 +4,6 @@ import android.content.Context;
|
||||
import android.media.AudioAttributes;
|
||||
import android.media.AudioManager;
|
||||
import android.media.MediaPlayer;
|
||||
import android.media.SoundPool;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
@@ -13,8 +12,8 @@ import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.R;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.MainActivity;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group;
|
||||
@@ -44,10 +43,6 @@ import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
@@ -59,6 +54,7 @@ public class Backend {
|
||||
static private HashMap<String, Object> storage = new HashMap<>();
|
||||
static private Backend instance;
|
||||
public Context applicationContext;
|
||||
public MainActivity mainActivity;
|
||||
private TACNET tacnet;
|
||||
private Server server;
|
||||
private Exception lastServerError;
|
||||
|
||||
@@ -35,8 +35,10 @@ public class TACNET {
|
||||
connection.connect(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Log.d(TAG, "run: " + connection.lastSocketError());
|
||||
Backend.instance().startErrorSound(Backend.instance().applicationContext);
|
||||
if (connection != null) {
|
||||
Log.d(TAG, "run: " + connection.lastSocketError());
|
||||
Backend.instance().startErrorSound(Backend.instance().applicationContext);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.dialogs;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.R;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog;
|
||||
|
||||
public class TACNETDialog extends TimeCraftersDialog {
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
setCancelable(false);
|
||||
|
||||
View root = super.onCreateView(inflater, container, savedInstanceState);
|
||||
|
||||
root.findViewById(R.id.titlebar).setBackgroundColor(getResources().getColor(R.color.tacnetPrimary));
|
||||
((TextView)root.findViewById(R.id.dialog_title)).setText(getArguments().getString("title", ""));
|
||||
LinearLayout view = root.findViewById(R.id.dialog_content);
|
||||
view.addView(getLayoutInflater().inflate(R.layout.dialog_tacnet, null));
|
||||
((TextView)view.findViewById(R.id.message)).setText(getArguments().getString("message", ""));
|
||||
|
||||
final Button closeButton = view.findViewById(R.id.close_button);
|
||||
|
||||
closeButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
return root;
|
||||
}
|
||||
}
|
||||
@@ -167,7 +167,7 @@ public class Client {
|
||||
}
|
||||
|
||||
public boolean isConnected() {
|
||||
return this.socket != null && !this.socket.isClosed();
|
||||
return this.socket != null && !this.socket.isClosed() && packetsReceived > 0;
|
||||
}
|
||||
|
||||
public boolean isBound() {
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.tacnet;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.LauncherActivity;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.Config;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.TAC;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.dialogs.TACNETDialog;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
@@ -101,8 +104,22 @@ public class PacketHandler {
|
||||
private void handleHandShake(Packet packet) {}
|
||||
// NO-OP
|
||||
private void handleHeartBeat(Packet packet) {}
|
||||
// NO-OP
|
||||
private void handleError(Packet packet) {}
|
||||
|
||||
private void handleError(Packet packet) {
|
||||
if (hostIsAConnection && Backend.instance().mainActivity != null) {
|
||||
String[] split = packet.getContent().split("\\" + Packet.PROTOCOL_SEPERATOR, 2);
|
||||
final String title = split[0];
|
||||
final String message = split[1];
|
||||
|
||||
final TACNETDialog dialog = new TACNETDialog();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("title", title);
|
||||
bundle.putString("message", message);
|
||||
dialog.setArguments(bundle);
|
||||
|
||||
dialog.show(Backend.instance().mainActivity.getSupportFragmentManager(), "TACNETMessage");
|
||||
}
|
||||
}
|
||||
|
||||
private void handleUploadConfig(Packet packet) {
|
||||
String[] split = packet.getContent().split("\\" + Packet.PROTOCOL_SEPERATOR, 2);
|
||||
@@ -290,7 +307,7 @@ public class PacketHandler {
|
||||
return Packet.create(Packet.PacketType.HEARTBEAT, Packet.PROTOCOL_HEARTBEAT);
|
||||
}
|
||||
|
||||
static private Packet packetError(String errorTitle, String errorMessage) {
|
||||
static public Packet packetError(String errorTitle, String errorMessage) {
|
||||
return Packet.create(Packet.PacketType.ERROR, errorTitle + Packet.PROTOCOL_SEPERATOR + errorMessage);
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ public class Server {
|
||||
|
||||
if (activeClient != null && !activeClient.isClosed()) {
|
||||
Log.i(TAG, "Too many clients, already have one connected!");
|
||||
client.close("Too many clients!");
|
||||
client.close( PacketHandler.packetError("Too many clients!", "Already have one connected!").toString() );
|
||||
|
||||
} else {
|
||||
this.activeClient = client;
|
||||
|
||||
41
app/src/main/res/layout/dialog_tacnet.xml
Normal file
41
app/src/main/res/layout/dialog_tacnet.xml
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/message"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/button_margin_left"
|
||||
android:layout_marginLeft="@dimen/button_margin_left"
|
||||
android:layout_marginTop="@dimen/button_margin_top"
|
||||
android:layout_marginEnd="@dimen/button_margin_right"
|
||||
android:layout_marginRight="@dimen/button_margin_right"
|
||||
android:layout_marginBottom="@dimen/button_margin_bottom"
|
||||
android:textColor="@android:color/black" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/close_button"
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="Close" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -25,6 +25,10 @@
|
||||
<color name="tacnetPrimary">#003f7f</color>
|
||||
<color name="tacnetSecondary">#007f7f</color>
|
||||
|
||||
<color name="tacnetConnectionConnecting">#ff8800</color>
|
||||
<color name="tacnetConnectionConnected">@color/tacnetPrimary</color>
|
||||
<color name="tacnetConnectionConnectionError">@color/colorDanger</color>
|
||||
|
||||
<color name="switchOn">#ff8800</color>
|
||||
|
||||
<color name="dialogBackground">#ddd</color>
|
||||
|
||||
Reference in New Issue
Block a user