diff --git a/.project b/.project
new file mode 100644
index 0000000..3964dd3
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ android
+ Project android created by Buildship.
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectbuilder
+
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectnature
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 395523f..4726443 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -47,7 +47,8 @@
android:label="@string/title_activity_settings" />
+ android:theme="@style/AppTheme.NoActionBar"
+ android:label="Push message">
diff --git a/app/src/main/java/com/github/gotify/Utils.java b/app/src/main/java/com/github/gotify/Utils.java
index 9ef319e..fb9df51 100644
--- a/app/src/main/java/com/github/gotify/Utils.java
+++ b/app/src/main/java/com/github/gotify/Utils.java
@@ -1,14 +1,12 @@
package com.github.gotify;
import android.app.Activity;
-import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.text.format.DateUtils;
import android.view.View;
-import android.widget.Toast;
import androidx.annotation.NonNull;
import com.github.gotify.client.JSON;
import com.github.gotify.log.Log;
@@ -103,11 +101,6 @@ public class Utils {
if (data.length != 1) {
throw new IllegalArgumentException("must be one element");
}
-
return data[0];
}
-
- public static void showLongToast(Context context, String message) {
- Toast.makeText(context, message, Toast.LENGTH_LONG).show();
- }
}
diff --git a/app/src/main/java/com/github/gotify/messages/MessagesActivity.java b/app/src/main/java/com/github/gotify/messages/MessagesActivity.java
index 16ceb16..3f9224b 100644
--- a/app/src/main/java/com/github/gotify/messages/MessagesActivity.java
+++ b/app/src/main/java/com/github/gotify/messages/MessagesActivity.java
@@ -62,6 +62,7 @@ import com.github.gotify.messages.provider.MessageWithImage;
import com.github.gotify.picasso.PicassoHandler;
import com.github.gotify.service.WebSocketService;
import com.github.gotify.settings.SettingsActivity;
+import com.github.gotify.sharing.ShareActivity;
import com.google.android.material.navigation.NavigationView;
import com.google.android.material.snackbar.BaseTransientBottomBar;
import com.google.android.material.snackbar.Snackbar;
@@ -301,6 +302,9 @@ public class MessagesActivity extends AppCompatActivity
startActivity(new Intent(this, LogsActivity.class));
} else if (id == R.id.settings) {
startActivity(new Intent(this, SettingsActivity.class));
+ } else if (id == R.id.push_message) {
+ Intent intent = new Intent(MessagesActivity.this, ShareActivity.class);
+ startActivity(intent);
}
drawer.closeDrawer(GravityCompat.START);
diff --git a/app/src/main/java/com/github/gotify/sharing/ShareActivity.java b/app/src/main/java/com/github/gotify/sharing/ShareActivity.java
index c6dbe4b..065a096 100644
--- a/app/src/main/java/com/github/gotify/sharing/ShareActivity.java
+++ b/app/src/main/java/com/github/gotify/sharing/ShareActivity.java
@@ -1,82 +1,141 @@
package com.github.gotify.sharing;
-import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.EditText;
+import android.widget.Spinner;
+import android.widget.Toast;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import com.github.gotify.R;
import com.github.gotify.Settings;
-import com.github.gotify.Utils;
import com.github.gotify.api.Api;
import com.github.gotify.api.ApiException;
import com.github.gotify.api.ClientFactory;
import com.github.gotify.client.ApiClient;
-import com.github.gotify.client.api.ApplicationApi;
import com.github.gotify.client.api.MessageApi;
import com.github.gotify.client.model.Application;
import com.github.gotify.client.model.Message;
import com.github.gotify.log.Log;
+import com.github.gotify.messages.provider.ApplicationHolder;
+import java.util.ArrayList;
import java.util.List;
import static com.github.gotify.Utils.first;
-public class ShareActivity extends Activity {
- private ApiClient client;
+public class ShareActivity extends AppCompatActivity {
private Settings settings;
+ private ApplicationHolder appsHolder;
+
+ @BindView(R.id.title)
+ EditText edtTxtTitle;
+
+ @BindView(R.id.content)
+ EditText edtTxtContent;
+
+ @BindView(R.id.edtTxtPriority)
+ EditText edtTxtPriority;
+
+ @BindView(R.id.appSpinner)
+ Spinner appSpinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_share);
+ ButterKnife.bind(this);
+
+ Log.i("Entering " + getClass().getSimpleName());
+ setSupportActionBar(findViewById(R.id.toolbar));
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setDisplayShowCustomEnabled(true);
+ }
settings = new Settings(this);
- handleShareIntent();
- }
- private void handleShareIntent() {
Intent intent = getIntent();
- String action = intent.getAction();
String type = intent.getType();
-
- if (Intent.ACTION_SEND.equals(action) && type != null) {
- if ("text/plain".equals(type)) {
- String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
- if (sharedText != null) {
- Message message = new Message();
- message.setMessage(sharedText);
- message.setTitle("Shared content");
- message.setPriority((long) 5);
-
- client =
- ClientFactory.clientToken(
- settings.url(), settings.sslSettings(), settings.token());
-
- new GetApps().execute(message);
- }
+ if (Intent.ACTION_SEND.equals(intent.getAction()) && "text/plain".equals(type)) {
+ String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
+ if (sharedText != null) {
+ edtTxtContent.setText(sharedText);
}
}
+
+ ApiClient client =
+ ClientFactory.clientToken(settings.url(), settings.sslSettings(), settings.token());
+ appsHolder = new ApplicationHolder(this, client);
+ appsHolder.onUpdate(() -> populateSpinner(appsHolder.get()));
+ appsHolder.request();
}
- private class GetApps extends AsyncTask {
- @Override
- protected Void doInBackground(Message... messages) {
- try {
- ApplicationApi applicationApi = client.createService(ApplicationApi.class);
- List apps = Api.execute(applicationApi.getApps());
- client =
- ClientFactory.clientToken(
- settings.url(), settings.sslSettings(), apps.get(0).getToken());
- new SendSharedContent().execute(first(messages));
- } catch (ApiException apiException) {
- Log.e("Failed getting apps", apiException);
- }
-
- return null;
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
}
+ return super.onOptionsItemSelected(item);
}
- private class SendSharedContent extends AsyncTask {
+ @OnClick(R.id.push_button)
+ public void pushMessage(View view) {
+ String titleText = edtTxtTitle.getText().toString();
+ String contentText = edtTxtContent.getText().toString();
+ String priority = edtTxtPriority.getText().toString();
+ int appIndex = appSpinner.getSelectedItemPosition();
+
+ if (contentText.isEmpty()) {
+ Toast.makeText(this, "Content should not be empty.", Toast.LENGTH_LONG).show();
+ return;
+ } else if (priority.isEmpty()) {
+ Toast.makeText(this, "Priority should be number.", Toast.LENGTH_LONG).show();
+ return;
+ }
+
+ Message message = new Message();
+ if (!titleText.isEmpty()) {
+ message.setTitle(titleText);
+ }
+ message.setMessage(contentText);
+ message.setPriority(Long.parseLong(priority));
+ new PushMessage(appsHolder.get().get(appIndex).getToken()).execute(message);
+ }
+
+ private void populateSpinner(List apps) {
+ List appNameList = new ArrayList<>();
+ for (Application app : apps) {
+ appNameList.add(app.getName());
+ }
+
+ ArrayAdapter adapter =
+ new ArrayAdapter<>(
+ this, android.R.layout.simple_spinner_dropdown_item, appNameList);
+ appSpinner.setAdapter(adapter);
+ }
+
+ private class PushMessage extends AsyncTask {
+ private String token;
+
+ public PushMessage(String token) {
+ this.token = token;
+ }
+
@Override
protected String doInBackground(Message... messages) {
+ List apps = appsHolder.get();
+ ApiClient pushClient =
+ ClientFactory.clientToken(settings.url(), settings.sslSettings(), token);
+
try {
- MessageApi messageApi = client.createService(MessageApi.class);
+ MessageApi messageApi = pushClient.createService(MessageApi.class);
Api.execute(messageApi.createMessage(first(messages)));
return "Pushed!";
} catch (ApiException apiException) {
@@ -87,7 +146,7 @@ public class ShareActivity extends Activity {
@Override
protected void onPostExecute(String message) {
- Utils.showLongToast(ShareActivity.this, message);
+ Toast.makeText(ShareActivity.this, message, Toast.LENGTH_LONG).show();
ShareActivity.this.finish();
}
}
diff --git a/app/src/main/res/drawable/ic_send.xml b/app/src/main/res/drawable/ic_send.xml
new file mode 100644
index 0000000..ac34cb9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_send.xml
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml
index a087c86..af2a382 100644
--- a/app/src/main/res/drawable/ic_settings.xml
+++ b/app/src/main/res/drawable/ic_settings.xml
@@ -1,5 +1,7 @@
+ android:viewportWidth="20"
+ android:width="24dp"
+ xmlns:android="http://schemas.android.com/apk/res/android">
diff --git a/app/src/main/res/layout/activity_share.xml b/app/src/main/res/layout/activity_share.xml
new file mode 100644
index 0000000..1c20d6b
--- /dev/null
+++ b/app/src/main/res/layout/activity_share.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/messages_menu.xml b/app/src/main/res/menu/messages_menu.xml
index 28241bf..2ab5007 100644
--- a/app/src/main/res/menu/messages_menu.xml
+++ b/app/src/main/res/menu/messages_menu.xml
@@ -15,6 +15,12 @@
+
- https://push.example.com
Username
Password
- Show Advanced Options
Disable SSL Validation
Select CA Certificate
Select a Certificate File
@@ -68,4 +67,11 @@
Appearance
Theme
theme
+ Push message
+ App:
+ Priority:
+ Push Message
+ Title
+ Content
+ Priority
diff --git a/build.gradle b/build.gradle
index b0cb412..a7504b3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.6.3'
+ classpath 'com.android.tools.build:gradle:4.0.0'
// NOTE: Do not place your application dependencies here; they belong
diff --git a/client/build.gradle b/client/build.gradle
index 409ba3d..564e4d5 100644
--- a/client/build.gradle
+++ b/client/build.gradle
@@ -10,7 +10,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.6.3'
+ classpath 'com.android.tools.build:gradle:4.0.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
}
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 551967a..5be00d5 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Fri May 08 13:09:14 CEST 2020
+#Fri Jul 10 21:53:51 EEST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-rc-4-all.zip