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 0b680a1b..e873a2bc 100644 --- a/app/src/main/java/com/github/gotify/messages/MessagesActivity.java +++ b/app/src/main/java/com/github/gotify/messages/MessagesActivity.java @@ -43,8 +43,10 @@ import com.github.gotify.Utils; import com.github.gotify.api.Api; import com.github.gotify.api.ApiException; +import com.github.gotify.api.Callback; 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.ClientApi; import com.github.gotify.client.api.MessageApi; import com.github.gotify.client.model.Application; @@ -60,6 +62,7 @@ import com.github.gotify.messages.provider.MessageState; import com.github.gotify.messages.provider.MessageWithImage; import com.github.gotify.picasso.PicassoHandler; +import com.github.gotify.service.MessagingDatabase; import com.github.gotify.service.WebSocketService; import com.github.gotify.settings.SettingsActivity; import com.github.gotify.sharing.ShareActivity; @@ -171,6 +174,7 @@ public void onDrawerClosed(View drawerView) { new SelectApplicationAndUpdateMessages(true) .execute(selectAppIdOnDrawerClose); selectAppIdOnDrawerClose = null; + invalidateOptionsMenu(); } } }); @@ -192,6 +196,10 @@ public void onDrawerClosed(View drawerView) { } public void onRefreshAll(View view) { + refreshAll(); + } + + public void refreshAll() { try { picassoHandler.evict(); } catch (IOException e) { @@ -560,6 +568,7 @@ protected void onPostExecute(Boolean update) { @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.messages_action, menu); + menu.findItem(R.id.action_delete_app).setVisible(appId != MessageState.ALL_MESSAGES); return super.onCreateOptionsMenu(menu); } @@ -568,9 +577,36 @@ public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_delete_all) { new DeleteMessages().execute(appId); } + if (item.getItemId() == R.id.action_delete_app) { + android.app.AlertDialog.Builder alert = new android.app.AlertDialog.Builder(this); + alert.setTitle(R.string.delete_app); + alert.setMessage(R.string.ack); + alert.setPositiveButton(R.string.yes, (dialog, which) -> deleteApp(appId)); + alert.setNegativeButton(R.string.no, (dialog, which) -> dialog.dismiss()); + alert.show(); + } return super.onContextItemSelected(item); } + private void deleteApp(Long appId) { + MessagingDatabase db = new MessagingDatabase(this); + db.forceUnregisterApp(appId); + db.close(); + + ApiClient client = + ClientFactory.clientToken(settings.url(), settings.sslSettings(), settings.token()); + + client.createService(ApplicationApi.class) + .deleteApp(appId) + .enqueue( + Callback.callInUI( + this, + (ignored) -> refreshAll(), + (e) -> + Utils.showSnackBar( + this, getString(R.string.error_delete_app)))); + } + private class LoadMore extends AsyncTask> { @Override diff --git a/app/src/main/java/com/github/gotify/service/MessagingDatabase.kt b/app/src/main/java/com/github/gotify/service/MessagingDatabase.kt index 71571f93..3f4b01ec 100644 --- a/app/src/main/java/com/github/gotify/service/MessagingDatabase.kt +++ b/app/src/main/java/com/github/gotify/service/MessagingDatabase.kt @@ -47,10 +47,10 @@ class MessagingDatabase(context: Context) : SQLiteOpenHelper(context, DB_NAME, n db.delete(TABLE_APPS,selection,selectionArgs) } - fun forceUnregisterApp(packageName: String){ + fun forceUnregisterApp(appId: Long){ val db = writableDatabase - val selection = "$FIELD_PACKAGE_NAME = ?" - val selectionArgs = arrayOf(packageName) + val selection = "$FIELD_APP_ID = ?" + val selectionArgs = arrayOf(appId.toString()) db.delete(TABLE_APPS,selection,selectionArgs) } diff --git a/app/src/main/res/menu/messages_action.xml b/app/src/main/res/menu/messages_action.xml index 3aa89356..5382c587 100644 --- a/app/src/main/res/menu/messages_action.xml +++ b/app/src/main/res/menu/messages_action.xml @@ -3,4 +3,8 @@ android:title="@string/delete_all" android:id="@+id/action_delete_all" android:orderInCategory="100"/> + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 39c28489..5b07d3d9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -25,6 +25,8 @@ Connection closed, trying to establish a new one. Received %d messages while being disconnected Delete all + Delete this application + Could not delete this app Delete logs Copy logs Logs copied @@ -48,6 +50,8 @@ Refresh all Do you really want to logout? Yes + No + Are you sure? Missed messages New Messages Listening to %s