Disallow push message if no applications exist

Fixes #179
This commit is contained in:
Sternagfonkel
2021-07-27 20:20:19 +02:00
committed by GitHub
parent 0a7a04885f
commit b35d5af258
5 changed files with 164 additions and 84 deletions

View File

@@ -13,6 +13,7 @@ import java.util.List;
public class ApplicationHolder {
private List<Application> state;
private Runnable onUpdate;
private Runnable onUpdateFailed;
private Activity activity;
private ApiClient client;
@@ -35,11 +36,12 @@ public class ApplicationHolder {
private void onReceiveApps(List<Application> apps) {
state = apps;
onUpdate.run();
if (onUpdate != null) onUpdate.run();
}
private void onFailedApps(ApiException e) {
Utils.showSnackBar(activity, "Could not request applications, see logs.");
if (onUpdateFailed != null) onUpdateFailed.run();
}
public List<Application> get() {
@@ -49,4 +51,8 @@ public class ApplicationHolder {
public void onUpdate(Runnable runnable) {
this.onUpdate = runnable;
}
public void onUpdateFailed(Runnable runnable) {
this.onUpdateFailed = runnable;
}
}

View File

@@ -6,7 +6,9 @@ import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.Toast;
import androidx.appcompat.app.ActionBar;
@@ -46,6 +48,12 @@ public class ShareActivity extends AppCompatActivity {
@BindView(R.id.appSpinner)
Spinner appSpinner;
@BindView(R.id.push_button)
Button pushMessageButton;
@BindView(R.id.missingAppsContainer)
LinearLayout missingAppsInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -73,7 +81,16 @@ public class ShareActivity extends AppCompatActivity {
ApiClient client =
ClientFactory.clientToken(settings.url(), settings.sslSettings(), settings.token());
appsHolder = new ApplicationHolder(this, client);
appsHolder.onUpdate(() -> populateSpinner(appsHolder.get()));
appsHolder.onUpdate(
() -> {
List<Application> apps = appsHolder.get();
populateSpinner(apps);
boolean appsAvailable = !apps.isEmpty();
pushMessageButton.setEnabled(appsAvailable);
missingAppsInfo.setVisibility(appsAvailable ? View.GONE : View.VISIBLE);
});
appsHolder.onUpdateFailed(() -> pushMessageButton.setEnabled(false));
appsHolder.request();
}
@@ -98,6 +115,11 @@ public class ShareActivity extends AppCompatActivity {
} else if (priority.isEmpty()) {
Toast.makeText(this, "Priority should be number.", Toast.LENGTH_LONG).show();
return;
} else if (appIndex == Spinner.INVALID_POSITION) {
// For safety, e.g. loading the apps needs too much time (maybe a timeout) and
// the user tries to push without an app selected.
Toast.makeText(this, "An app must be selected.", Toast.LENGTH_LONG).show();
return;
}
Message message = new Message();