diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 314b2b1..395523f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -45,6 +45,15 @@ android:name=".settings.SettingsActivity" android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_settings" /> + + + + + + + @@ -55,4 +64,4 @@ - \ No newline at end of file + diff --git a/app/src/main/java/com/github/gotify/Utils.java b/app/src/main/java/com/github/gotify/Utils.java index 739c5a1..9ef319e 100644 --- a/app/src/main/java/com/github/gotify/Utils.java +++ b/app/src/main/java/com/github/gotify/Utils.java @@ -1,12 +1,14 @@ 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; @@ -96,4 +98,16 @@ public class Utils { if (str == null) return null; return new Buffer().writeUtf8(str).inputStream(); } + + public static T first(T[] data) { + 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 107f0dc..16ceb16 100644 --- a/app/src/main/java/com/github/gotify/messages/MessagesActivity.java +++ b/app/src/main/java/com/github/gotify/messages/MessagesActivity.java @@ -71,6 +71,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import static com.github.gotify.Utils.first; import static java.util.Collections.emptyList; public class MessagesActivity extends AppCompatActivity @@ -695,12 +696,4 @@ public class MessagesActivity extends AppCompatActivity adapter.setItems(messageWithImages); adapter.notifyDataSetChanged(); } - - private T first(T[] data) { - if (data.length != 1) { - throw new IllegalArgumentException("must be one element"); - } - - return data[0]; - } } diff --git a/app/src/main/java/com/github/gotify/sharing/ShareActivity.java b/app/src/main/java/com/github/gotify/sharing/ShareActivity.java new file mode 100644 index 0000000..c6dbe4b --- /dev/null +++ b/app/src/main/java/com/github/gotify/sharing/ShareActivity.java @@ -0,0 +1,94 @@ +package com.github.gotify.sharing; + +import android.app.Activity; +import android.content.Intent; +import android.os.AsyncTask; +import android.os.Bundle; +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 java.util.List; + +import static com.github.gotify.Utils.first; + +public class ShareActivity extends Activity { + private ApiClient client; + private Settings settings; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + 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); + } + } + } + } + + 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; + } + } + + private class SendSharedContent extends AsyncTask { + @Override + protected String doInBackground(Message... messages) { + try { + MessageApi messageApi = client.createService(MessageApi.class); + Api.execute(messageApi.createMessage(first(messages))); + return "Pushed!"; + } catch (ApiException apiException) { + Log.e("Failed sending message", apiException); + return "Oops! Something went wrong..."; + } + } + + @Override + protected void onPostExecute(String message) { + Utils.showLongToast(ShareActivity.this, message); + ShareActivity.this.finish(); + } + } +}