mirror of
https://github.com/TimeCrafters/TimeCraftersConfigurationTool.git
synced 2025-12-15 05:02:33 +00:00
WIP: App works again (with a few ux issues)
This commit is contained in:
@@ -3,7 +3,9 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="org.timecrafters.TimeCraftersConfigurationTool">
|
||||
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="29" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
@@ -11,6 +13,7 @@
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
|
||||
<application
|
||||
android:enableOnBackInvokedCallback="true"
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
@@ -20,7 +23,8 @@
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
tools:targetApi="31">
|
||||
android:hasFragileUserData="true"
|
||||
tools:targetApi="34">
|
||||
<service
|
||||
android:name=".tacnet.TACNETServerService"
|
||||
android:enabled="true"
|
||||
@@ -40,7 +44,7 @@
|
||||
|
||||
<activity
|
||||
android:exported="true"
|
||||
android:name=".LauncherActivity"
|
||||
android:name=".MainActivity"
|
||||
android:label="@string/app_name">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
@@ -49,8 +53,6 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity android:name=".MainActivity" />
|
||||
|
||||
<receiver
|
||||
android:enabled="true"
|
||||
android:exported="true"
|
||||
|
||||
@@ -1,21 +1,15 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.Backend;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.dialogs.PermissionsRequestDialog;
|
||||
|
||||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
|
||||
public class LauncherActivity extends AppCompatActivity {
|
||||
private static final int REQUEST_WRITE_PERMISSION = 70;
|
||||
// private static final int REQUEST_WRITE_PERMISSION = 70;
|
||||
private static final String TAG = "LauncherActivity";
|
||||
private static final long timerDelay = 2_000;
|
||||
private static final long timerQuickDelay = 250; // Give LauncherActivity enough time to do first paint
|
||||
@@ -31,33 +25,14 @@ public class LauncherActivity extends AppCompatActivity {
|
||||
getSupportActionBar().hide();
|
||||
}
|
||||
|
||||
if (havePermissions()) {
|
||||
if (Backend.instance() == null) {
|
||||
new Backend();
|
||||
}
|
||||
|
||||
if (Backend.instance().getSettings().mobileDisableLauncherDelay) {
|
||||
startTimer(timerQuickDelay);
|
||||
} else {
|
||||
startTimer(timerDelay);
|
||||
}
|
||||
} else {
|
||||
new PermissionsRequestDialog().show(getSupportFragmentManager(), null);
|
||||
if (Backend.instance() == null) {
|
||||
new Backend(getApplicationContext());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
|
||||
switch (requestCode) {
|
||||
case REQUEST_WRITE_PERMISSION: {
|
||||
if (grantResults.length > 0 && grantResults[0] == PERMISSION_GRANTED) {
|
||||
// Permission granted
|
||||
startTimer(timerDelayAfterPermissionRequest);
|
||||
} else {
|
||||
// Permission not given
|
||||
new PermissionsRequestDialog().show(getSupportFragmentManager(), null);
|
||||
}
|
||||
}
|
||||
if (Backend.instance().getSettings().mobileDisableLauncherDelay) {
|
||||
startTimer(timerQuickDelay);
|
||||
} else {
|
||||
startTimer(timerDelay);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,14 +47,4 @@ public class LauncherActivity extends AppCompatActivity {
|
||||
}
|
||||
}, milliseconds);
|
||||
}
|
||||
|
||||
private boolean havePermissions() {
|
||||
return ContextCompat.checkSelfPermission(LauncherActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
public void requestStoragePermissions() {
|
||||
ActivityCompat.requestPermissions(LauncherActivity.this,
|
||||
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||
REQUEST_WRITE_PERMISSION);
|
||||
}
|
||||
}
|
||||
@@ -8,8 +8,10 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.navigation.NavController;
|
||||
@@ -53,10 +55,9 @@ public class MainActivity extends AppCompatActivity {
|
||||
NavigationUI.setupWithNavController(navView, navController);
|
||||
|
||||
if (Backend.instance() == null) {
|
||||
new Backend();
|
||||
new Backend(getApplicationContext());
|
||||
}
|
||||
|
||||
Backend.instance().applicationContext = getApplicationContext();
|
||||
Backend.instance().mainActivity = this;
|
||||
|
||||
if (Backend.instance().getSettings().mobileShowNavigationLabels) {
|
||||
@@ -77,7 +78,11 @@ public class MainActivity extends AppCompatActivity {
|
||||
registerReceiver(new TACNETOnBootReceiver(), new IntentFilter(Intent.ACTION_BOOT_COMPLETED));
|
||||
|
||||
if (getIntent().getBooleanExtra("navigate_to_tacnet", false)) {
|
||||
navController.navigate(R.id.navigation_tacnet);
|
||||
//--- Emulate clicking on menu item...
|
||||
navView.getMenu().performIdentifierAction(R.id.navigation_tacnet, 0);
|
||||
|
||||
//--- ...because using this function breaks the Editor nav button, for reasons :|
|
||||
// navController.navigate(R.id.navigation_tacnet, null);
|
||||
}
|
||||
|
||||
startTACNETStatusIndictator();
|
||||
|
||||
@@ -67,13 +67,15 @@ public class Backend {
|
||||
return storage;
|
||||
}
|
||||
|
||||
public Backend() {
|
||||
public Backend(Context applicationContext) {
|
||||
if (Backend.instance() != null) {
|
||||
throw(new RuntimeException("Backend instance already exists!"));
|
||||
} else {
|
||||
instance = this;
|
||||
}
|
||||
|
||||
this.applicationContext = applicationContext;
|
||||
|
||||
loadSettings();
|
||||
if (!settings.config.isEmpty()) {
|
||||
loadConfig(settings.config);
|
||||
@@ -120,6 +122,18 @@ public class Backend {
|
||||
return lastServerError;
|
||||
}
|
||||
|
||||
public String getRootPath() {
|
||||
return String.format("%s%s", applicationContext.getExternalFilesDir("").getAbsolutePath(), File.separator + "TimeCrafters_Configuration_Tool");
|
||||
}
|
||||
|
||||
public String getConfigsPath() {
|
||||
return String.format("%s%s", getRootPath(), File.separator + "/configs");
|
||||
}
|
||||
|
||||
public String getSettingsPath() {
|
||||
return String.format("%s%s", getRootPath(), File.separator + "settings.json");
|
||||
}
|
||||
|
||||
public Config getConfig() {
|
||||
return config;
|
||||
}
|
||||
@@ -147,7 +161,7 @@ public class Backend {
|
||||
public boolean hasConfigChanged() { return configChanged; }
|
||||
|
||||
public String configPath(String name) {
|
||||
return TAC.CONFIGS_PATH + File.separator + name + ".json";
|
||||
return getConfigsPath() + File.separator + name + ".json";
|
||||
}
|
||||
|
||||
public void loadConfig(String name) {
|
||||
@@ -249,7 +263,7 @@ public class Backend {
|
||||
public ArrayList<String> configsList() {
|
||||
ArrayList<String> list = new ArrayList<>();
|
||||
|
||||
File directory = new File(TAC.CONFIGS_PATH);
|
||||
File directory = new File(getConfigsPath());
|
||||
FilenameFilter filter = new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(File dir, String name) {
|
||||
@@ -302,7 +316,7 @@ public class Backend {
|
||||
}
|
||||
|
||||
public void loadSettings() {
|
||||
File settingsFile = new File(TAC.SETTINGS_PATH);
|
||||
File settingsFile = new File(getSettingsPath());
|
||||
|
||||
if (!settingsFile.exists()) {
|
||||
Log.i(TAG, "Writing default settings.json");
|
||||
@@ -319,7 +333,7 @@ public class Backend {
|
||||
|
||||
public void saveSettings() {
|
||||
Log.i(TAG, "Settings: " + gsonForSettings().toJson(settings));
|
||||
writeToFile(TAC.SETTINGS_PATH, gsonForSettings().toJson(settings));
|
||||
writeToFile(getSettingsPath(), gsonForSettings().toJson(settings));
|
||||
}
|
||||
|
||||
public void sortGroups() {
|
||||
@@ -369,7 +383,7 @@ public class Backend {
|
||||
}
|
||||
|
||||
public void writeDefaultSettings() {
|
||||
settings = new Settings(TACNET.DEFAULT_HOSTNAME, TACNET.DEFAULT_PORT, "", false, false, false);
|
||||
settings = new Settings(TACNET.DEFAULT_HOSTNAME, TACNET.DEFAULT_PORT, "", true, false, false);
|
||||
saveSettings();
|
||||
}
|
||||
|
||||
@@ -402,7 +416,7 @@ public class Backend {
|
||||
|
||||
public boolean writeToFile(String filePath, String content) {
|
||||
try {
|
||||
if (filePath.startsWith(TAC.ROOT_PATH)) {
|
||||
if (filePath.startsWith(getRootPath())) {
|
||||
createFolders(filePath);
|
||||
|
||||
FileWriter writer = new FileWriter(filePath);
|
||||
@@ -422,8 +436,8 @@ public class Backend {
|
||||
}
|
||||
|
||||
private void createFolders(String filePath) throws IOException {
|
||||
File rootPath = new File(TAC.ROOT_PATH);
|
||||
File configsPath = new File(TAC.CONFIGS_PATH);
|
||||
File rootPath = new File(getRootPath());
|
||||
File configsPath = new File(getConfigsPath());
|
||||
|
||||
if (!rootPath.exists()) {
|
||||
rootPath.mkdir();
|
||||
|
||||
@@ -1,25 +1,15 @@
|
||||
package org.timecrafters.TimeCraftersConfigurationTool.backend;
|
||||
|
||||
import android.app.Application;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class TAC {
|
||||
// TODO: Update filesystem handling
|
||||
public static final String ROOT_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "TimeCrafters_Configuration_Tool",
|
||||
CONFIGS_PATH = ROOT_PATH + File.separator + "/configs",
|
||||
SETTINGS_PATH = ROOT_PATH + File.separator + "settings.json";
|
||||
|
||||
public static final int CONFIG_SPEC_VERSION = 2;
|
||||
|
||||
// Set COMPETITION_MODE to true to disable automatic TACNET server start
|
||||
public static final boolean BUILD_COMPETITION_MODE = false;
|
||||
public static final boolean BUILD_AUTO_START = true;
|
||||
|
||||
static public boolean allowAutoServerStart() {
|
||||
return !TAC.BUILD_COMPETITION_MODE &&
|
||||
TAC.BUILD_AUTO_START ||
|
||||
Backend.instance() != null && Backend.instance().getSettings().mobileStartServerAtBoot;
|
||||
return Backend.instance().getSettings().mobileStartServerAtBoot;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ public class ActionDialog extends TimeCraftersDialog {
|
||||
|
||||
Backend.instance().sortActions(group);
|
||||
Backend.instance().configChanged();
|
||||
ActionsFragment fragment = (ActionsFragment) getFragmentManager().getPrimaryNavigationFragment();
|
||||
ActionsFragment fragment = (ActionsFragment) getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populateActions();
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ public class AddFromPresetDialog extends TimeCraftersDialog {
|
||||
bundle.putBoolean("is_cloning_preset", true);
|
||||
bundle.putInt("group_index", index);
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "clone_group_preset");
|
||||
dialog.show(getParentFragmentManager(), "clone_group_preset");
|
||||
|
||||
dismiss();
|
||||
}
|
||||
@@ -107,7 +107,7 @@ public class AddFromPresetDialog extends TimeCraftersDialog {
|
||||
bundle.putInt("group_index", getArguments().getInt("group_index"));
|
||||
bundle.putInt("action_index", index);
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "clone_action_preset");
|
||||
dialog.show(getParentFragmentManager(), "clone_action_preset");
|
||||
|
||||
dismiss();
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ public class CloneDialog extends TimeCraftersDialog {
|
||||
|
||||
Backend.instance().sortActions(group);
|
||||
Backend.instance().configChanged();
|
||||
ActionsFragment fragment = (ActionsFragment) getFragmentManager().getPrimaryNavigationFragment();
|
||||
ActionsFragment fragment = (ActionsFragment) getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populateActions();
|
||||
}
|
||||
@@ -124,7 +124,7 @@ public class CloneDialog extends TimeCraftersDialog {
|
||||
|
||||
Backend.instance().sortGroups();
|
||||
Backend.instance().configChanged();
|
||||
GroupsFragment fragment = (GroupsFragment) getFragmentManager().getPrimaryNavigationFragment();
|
||||
GroupsFragment fragment = (GroupsFragment) getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populateGroups();
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ public class ConfigurationDialog extends TimeCraftersDialog {
|
||||
}
|
||||
}
|
||||
|
||||
ConfigurationsFragment fragment = (ConfigurationsFragment) getFragmentManager().getPrimaryNavigationFragment();
|
||||
ConfigurationsFragment fragment = (ConfigurationsFragment) getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populateConfigFiles();
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ public class GroupDialog extends TimeCraftersDialog {
|
||||
|
||||
Backend.instance().sortGroups();
|
||||
Backend.instance().configChanged();
|
||||
GroupsFragment fragment = (GroupsFragment) getFragmentManager().getPrimaryNavigationFragment();
|
||||
GroupsFragment fragment = (GroupsFragment) getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populateGroups();
|
||||
}
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
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.LauncherActivity;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.MainActivity;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.R;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.backend.TAC;
|
||||
import org.timecrafters.TimeCraftersConfigurationTool.library.TimeCraftersDialog;
|
||||
|
||||
public class PermissionsRequestDialog extends TimeCraftersDialog {
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
setCancelable(false);
|
||||
|
||||
View root = super.onCreateView(inflater, container, savedInstanceState);
|
||||
|
||||
((TextView)root.findViewById(R.id.dialog_title)).setText("Storage Permission Required");
|
||||
LinearLayout view = root.findViewById(R.id.dialog_content);
|
||||
view.addView(getLayoutInflater().inflate(R.layout.dialog_permission_request, null));
|
||||
((TextView)view.findViewById(R.id.message)).setText("Permission is required to access external storage:\n\n" + TAC.ROOT_PATH);
|
||||
|
||||
Button quitButton = view.findViewById(R.id.quit_button);
|
||||
Button continueButton = view.findViewById(R.id.continue_button);
|
||||
|
||||
quitButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
dismiss();
|
||||
((MainActivity) getActivity()).close();
|
||||
}
|
||||
});
|
||||
|
||||
continueButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
dismiss();
|
||||
((LauncherActivity) getActivity()).requestStoragePermissions();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
return root;
|
||||
}
|
||||
}
|
||||
@@ -190,10 +190,10 @@ public class PresetDialog extends TimeCraftersDialog {
|
||||
Backend.instance().getConfig().getPresets().getGroups().add(groupClone);
|
||||
Backend.instance().sortGroupPresets();
|
||||
|
||||
GroupsFragment fragment = (GroupsFragment) getFragmentManager().getPrimaryNavigationFragment();
|
||||
GroupsFragment fragment = (GroupsFragment) getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
Snackbar.make(fragment.getActivity().findViewById(R.id.snackbar_host), "Saved group preset: " + presetName, Snackbar.LENGTH_LONG).show();
|
||||
} else { // Don't repopulate presets when it is not possible
|
||||
PresetsFragment fragment = (PresetsFragment) getFragmentManager().getPrimaryNavigationFragment();
|
||||
PresetsFragment fragment = (PresetsFragment) getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
Backend.instance().sortGroupPresets();
|
||||
fragment.populatePresets();
|
||||
@@ -224,10 +224,10 @@ public class PresetDialog extends TimeCraftersDialog {
|
||||
Backend.instance().getConfig().getPresets().getActions().add(actionClone);
|
||||
Backend.instance().sortActionsPresets();
|
||||
|
||||
ActionsFragment fragment = (ActionsFragment) getFragmentManager().getPrimaryNavigationFragment();
|
||||
ActionsFragment fragment = (ActionsFragment) getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
Snackbar.make(fragment.getActivity().findViewById(R.id.snackbar_host), "Saved action preset: " + presetName, Snackbar.LENGTH_LONG).show();
|
||||
} else { // Don't repopulate presets when it is not possible
|
||||
PresetsFragment fragment = (PresetsFragment) getFragmentManager().getPrimaryNavigationFragment();
|
||||
PresetsFragment fragment = (PresetsFragment) getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
Backend.instance().sortActionsPresets();
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@ public class VariableDialog extends TimeCraftersDialog {
|
||||
|
||||
Backend.instance().sortVariables(action);
|
||||
Backend.instance().configChanged();
|
||||
VariablesFragment fragment = (VariablesFragment) getFragmentManager().getPrimaryNavigationFragment();
|
||||
VariablesFragment fragment = (VariablesFragment) getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populateVariables();
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ public class PacketHandler {
|
||||
return;
|
||||
}
|
||||
|
||||
final String path = TAC.CONFIGS_PATH + File.separator + configName + ".json";
|
||||
final String path = Backend.instance().getConfigsPath() + File.separator + configName + ".json";
|
||||
|
||||
Backend.instance().writeToFile(path, json);
|
||||
|
||||
@@ -145,7 +145,7 @@ public class PacketHandler {
|
||||
Log.i(TAG, "Got request for config: " + packet.getContent());
|
||||
Packet pkt;
|
||||
if (Backend.instance().configsList().contains(configName)) {
|
||||
final String path = TAC.CONFIGS_PATH + File.separator + configName + ".json";
|
||||
final String path = Backend.instance().getConfigsPath() + File.separator + configName + ".json";
|
||||
|
||||
String content = Backend.instance().readFromFile(path);
|
||||
pkt = packetUploadConfig(configName, content);
|
||||
|
||||
@@ -61,7 +61,7 @@ public class TACNETConnectionService extends Service {
|
||||
private void foregroundify() {
|
||||
Intent notificationIntent = new Intent(this, MainActivity.class);
|
||||
notificationIntent.putExtra("navigate_to_tacnet", true);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_MUTABLE);
|
||||
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
|
||||
.setContentTitle("TACNET Connection")
|
||||
|
||||
@@ -38,7 +38,7 @@ public class TACNETServerService extends Service {
|
||||
@Override
|
||||
public void onCreate() {
|
||||
if (Backend.instance() == null) {
|
||||
new Backend();
|
||||
new Backend(getApplicationContext());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ public class TACNETServerService extends Service {
|
||||
private void foregroundify() {
|
||||
Intent notificationIntent = new Intent(this, MainActivity.class);
|
||||
notificationIntent.putExtra("navigate_to_tacnet", true);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, FLAG_UPDATE_CURRENT);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_MUTABLE | FLAG_UPDATE_CURRENT);
|
||||
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
|
||||
.setContentTitle("TACNET Server")
|
||||
|
||||
@@ -78,7 +78,7 @@ public class ActionsFragment extends TimeCraftersFragment {
|
||||
}
|
||||
bundle.putInt("group_index", getArguments().getInt("group_index"));
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "add_action");
|
||||
dialog.show(getParentFragmentManager(), "add_action");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -164,7 +164,7 @@ public class ActionsFragment extends TimeCraftersFragment {
|
||||
bundle.putInt("group_index", getArguments().getInt("group_index"));
|
||||
bundle.putInt("action_index", group.getActions().indexOf(action));
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "edit_action");
|
||||
dialog.show(getParentFragmentManager(), "edit_action");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -184,7 +184,7 @@ public class ActionsFragment extends TimeCraftersFragment {
|
||||
Backend.instance().configChanged();
|
||||
Backend.getStorage().remove(deleteActionKey);
|
||||
|
||||
ActionsFragment fragment = (ActionsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment();
|
||||
ActionsFragment fragment = (ActionsFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populateActions();
|
||||
}
|
||||
@@ -192,7 +192,7 @@ public class ActionsFragment extends TimeCraftersFragment {
|
||||
};
|
||||
Backend.getStorage().put(deleteActionKey, actionRunner);
|
||||
|
||||
dialog.show(getFragmentManager(), deleteActionKey);
|
||||
dialog.show(getParentFragmentManager(), deleteActionKey);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -217,7 +217,7 @@ public class ActionsFragment extends TimeCraftersFragment {
|
||||
bundle.putInt("group_index", getArguments().getInt("group_index"));
|
||||
bundle.putInt("action_index", action_index);
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "clone_dialog");
|
||||
dialog.show(getParentFragmentManager(), "clone_dialog");
|
||||
return true;
|
||||
} else if (itemID == R.id.save_as_preset) {
|
||||
PresetDialog dialog = new PresetDialog();
|
||||
@@ -226,7 +226,7 @@ public class ActionsFragment extends TimeCraftersFragment {
|
||||
bundle.putInt("action_index", action_index);
|
||||
bundle.putBoolean("is_new_preset", true);
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "preset_dialog");
|
||||
dialog.show(getParentFragmentManager(), "preset_dialog");
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@@ -256,7 +256,7 @@ public class ActionsFragment extends TimeCraftersFragment {
|
||||
}
|
||||
bundle.putInt("group_index", getArguments().getInt("group_index"));
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "add_from_preset_dialog");
|
||||
dialog.show(getParentFragmentManager(), "add_from_preset_dialog");
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
||||
@@ -62,7 +62,7 @@ public class GroupsFragment extends TimeCraftersFragment {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
GroupDialog dialog = new GroupDialog();
|
||||
dialog.show(getFragmentManager(), "add_group");
|
||||
dialog.show(getParentFragmentManager(), "add_group");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -141,7 +141,7 @@ public class GroupsFragment extends TimeCraftersFragment {
|
||||
bundle.putInt("group_index", config.getGroups().indexOf(group));
|
||||
dialog.setArguments(bundle);
|
||||
|
||||
dialog.show(getFragmentManager(), "rename_group");
|
||||
dialog.show(getParentFragmentManager(), "rename_group");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -162,7 +162,7 @@ public class GroupsFragment extends TimeCraftersFragment {
|
||||
Backend.instance().configChanged();
|
||||
Backend.getStorage().remove(deleteActionKey);
|
||||
|
||||
GroupsFragment fragment = (GroupsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment();
|
||||
GroupsFragment fragment = (GroupsFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populateGroups();
|
||||
}
|
||||
@@ -170,7 +170,7 @@ public class GroupsFragment extends TimeCraftersFragment {
|
||||
};
|
||||
Backend.getStorage().put(deleteActionKey, action);
|
||||
|
||||
dialog.show(getFragmentManager(), deleteActionKey);
|
||||
dialog.show(getParentFragmentManager(), deleteActionKey);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -194,7 +194,7 @@ public class GroupsFragment extends TimeCraftersFragment {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt("group_index", group_index);
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "clone_dialog");
|
||||
dialog.show(getParentFragmentManager(), "clone_dialog");
|
||||
|
||||
return true;
|
||||
} else if (itemID == R.id.save_as_preset) {
|
||||
@@ -203,7 +203,7 @@ public class GroupsFragment extends TimeCraftersFragment {
|
||||
bundle.putBoolean("is_new_preset", true);
|
||||
bundle.putInt("group_index", group_index);
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "preset_dialog");
|
||||
dialog.show(getParentFragmentManager(), "preset_dialog");
|
||||
|
||||
return true;
|
||||
} else {
|
||||
@@ -230,7 +230,7 @@ public class GroupsFragment extends TimeCraftersFragment {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putBoolean("show_actions", false);
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "add_from_preset_dialog");
|
||||
dialog.show(getParentFragmentManager(), "add_from_preset_dialog");
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
||||
@@ -79,7 +79,7 @@ public class VariablesFragment extends TimeCraftersFragment {
|
||||
}
|
||||
bundle.putInt("action_index", getArguments().getInt("action_index"));
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "add_variable");
|
||||
dialog.show(getParentFragmentManager(), "add_variable");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -122,7 +122,7 @@ public class VariablesFragment extends TimeCraftersFragment {
|
||||
bundle.putInt("action_index", getArguments().getInt("action_index"));
|
||||
bundle.putInt("variable_index", action.getVariables().indexOf(variable));
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "edit_variable");
|
||||
dialog.show(getParentFragmentManager(), "edit_variable");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -142,7 +142,7 @@ public class VariablesFragment extends TimeCraftersFragment {
|
||||
Backend.instance().configChanged();
|
||||
Backend.getStorage().remove(deleteActionKey);
|
||||
|
||||
VariablesFragment fragment = (VariablesFragment) dialog.getFragmentManager().getPrimaryNavigationFragment();
|
||||
VariablesFragment fragment = (VariablesFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populateVariables();
|
||||
}
|
||||
@@ -150,7 +150,7 @@ public class VariablesFragment extends TimeCraftersFragment {
|
||||
};
|
||||
Backend.getStorage().put(deleteActionKey, actionRunner);
|
||||
|
||||
dialog.show(getFragmentManager(), deleteActionKey);
|
||||
dialog.show(getParentFragmentManager(), deleteActionKey);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ public class ConfigurationsFragment extends TimeCraftersFragment {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
ConfigurationDialog dialog = new ConfigurationDialog();
|
||||
dialog.show(getFragmentManager(), "add_configuration");
|
||||
dialog.show(getParentFragmentManager(), "add_configuration");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -93,7 +93,7 @@ public class ConfigurationsFragment extends TimeCraftersFragment {
|
||||
bundle.putString("config_name", configFile);
|
||||
dialog.setArguments(bundle);
|
||||
|
||||
dialog.show(getFragmentManager(), "rename_configuration");
|
||||
dialog.show(getParentFragmentManager(), "rename_configuration");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -118,7 +118,7 @@ public class ConfigurationsFragment extends TimeCraftersFragment {
|
||||
Backend.instance().loadConfig("");
|
||||
}
|
||||
|
||||
ConfigurationsFragment fragment = (ConfigurationsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment();
|
||||
ConfigurationsFragment fragment = (ConfigurationsFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populateConfigFiles();
|
||||
}
|
||||
@@ -131,7 +131,7 @@ public class ConfigurationsFragment extends TimeCraftersFragment {
|
||||
Backend.getStorage().put(deleteActionKey, action);
|
||||
dialog.setArguments(bundle);
|
||||
|
||||
dialog.show(getFragmentManager(), deleteActionKey);
|
||||
dialog.show(getParentFragmentManager(), deleteActionKey);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ public class PresetsFragment extends TimeCraftersFragment {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt("group_index", group_index);
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "preset_dialog");
|
||||
dialog.show(getParentFragmentManager(), "preset_dialog");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -109,7 +109,7 @@ public class PresetsFragment extends TimeCraftersFragment {
|
||||
Backend.instance().configChanged();
|
||||
}
|
||||
|
||||
PresetsFragment fragment = (PresetsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment();
|
||||
PresetsFragment fragment = (PresetsFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populatePresets();
|
||||
}
|
||||
@@ -118,7 +118,7 @@ public class PresetsFragment extends TimeCraftersFragment {
|
||||
Backend.getStorage().put(deletePresetKey, action);
|
||||
dialog.setArguments(bundle);
|
||||
|
||||
dialog.show(getFragmentManager(), deletePresetKey);
|
||||
dialog.show(getParentFragmentManager(), deletePresetKey);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -163,7 +163,7 @@ public class PresetsFragment extends TimeCraftersFragment {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt("action_index", action_index);
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(getFragmentManager(), "preset_dialog");
|
||||
dialog.show(getParentFragmentManager(), "preset_dialog");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -187,7 +187,7 @@ public class PresetsFragment extends TimeCraftersFragment {
|
||||
Backend.instance().configChanged();
|
||||
}
|
||||
|
||||
PresetsFragment fragment = (PresetsFragment) dialog.getFragmentManager().getPrimaryNavigationFragment();
|
||||
PresetsFragment fragment = (PresetsFragment) dialog.getParentFragmentManager().getPrimaryNavigationFragment();
|
||||
if (fragment != null) {
|
||||
fragment.populatePresets();
|
||||
}
|
||||
@@ -196,7 +196,7 @@ public class PresetsFragment extends TimeCraftersFragment {
|
||||
Backend.getStorage().put(deletePresetKey, action);
|
||||
dialog.setArguments(bundle);
|
||||
|
||||
dialog.show(getFragmentManager(), deletePresetKey);
|
||||
dialog.show(getParentFragmentManager(), deletePresetKey);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -36,7 +36,6 @@ public class TACNETHostFragment extends TimeCraftersFragment {
|
||||
final View root = inflater.inflate(R.layout.fragment_tacnet_host, viewGroup, false);
|
||||
final LinearLayout container = (LinearLayout) root;
|
||||
|
||||
|
||||
if (Backend.instance().tacnet().status() != TACNET.Status.NOT_CONNECTED) {
|
||||
inflateTACNETConnectionStatus(container);
|
||||
} else if (Backend.instance().getServer() != null) {
|
||||
|
||||
@@ -13,32 +13,30 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginBottom="56dp"
|
||||
app:defaultNavHost="true"
|
||||
app:layout_constraintBottom_toTopOf="@id/nav_view"
|
||||
app:layout_constraintHorizontal_bias="0.0"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.0"
|
||||
app:navGraph="@navigation/mobile_navigation" />
|
||||
app2:defaultNavHost="true"
|
||||
app2:layout_constraintBottom_toTopOf="@id/nav_view"
|
||||
app2:layout_constraintHorizontal_bias="0.0"
|
||||
app2:layout_constraintLeft_toLeftOf="parent"
|
||||
app2:layout_constraintRight_toRightOf="parent"
|
||||
app2:layout_constraintTop_toTopOf="parent"
|
||||
app2:layout_constraintVertical_bias="0.0"
|
||||
app2:navGraph="@navigation/mobile_navigation"
|
||||
tools:layout="@layout/partial_editor" />
|
||||
|
||||
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
android:id="@+id/snackbar_host"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="@id/nav_host_fragment"
|
||||
app:layout_constraintStart_toStartOf="@id/nav_host_fragment" />
|
||||
android:layout_height="56dp"
|
||||
app2:layout_constraintBottom_toTopOf="@id/nav_view" />
|
||||
|
||||
<com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
android:id="@+id/nav_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="56dp"
|
||||
android:visibility="visible"
|
||||
app2:menu="@menu/bottom_nav_menu"
|
||||
app2:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/nav_host_fragment"
|
||||
app:menu="@menu/bottom_nav_menu"
|
||||
tools:visibility="visible" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
Reference in New Issue
Block a user