From bedb39cd44acbeb92d2892039e9d5447934fedbf Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Thu, 8 Mar 2018 20:31:48 +0100 Subject: [PATCH] Implement sharing of links and plain text --- app/src/main/AndroidManifest.xml | 30 ++++++++------ .../quasseldroid_ng/ui/chat/ChatActivity.kt | 19 +++++++-- .../quasseldroid_ng/ui/chat/InputEditor.kt | 5 +++ .../accounts/AccountSelectionActivity.kt | 29 +++----------- .../util/service/ServiceBoundActivity.kt | 40 ++++++++++++++++--- 5 files changed, 79 insertions(+), 44 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5b46c8ad2..5e08fb93a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,10 +14,23 @@ android:theme="@style/Theme.SplashTheme"> <activity android:name=".ui.chat.ChatActivity" - android:exported="false" + android:exported="true" android:label="@string/app_name" - android:launchMode="singleInstance" - android:windowSoftInputMode="adjustResize" /> + android:launchMode="singleTask" + android:windowSoftInputMode="adjustResize"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <action android:name="android.intent.action.VIEW" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + <intent-filter> + <action android:name="android.intent.action.SEND" /> + <category android:name="android.intent.category.DEFAULT" /> + <data android:mimeType="text/plain" /> + </intent-filter> + </activity> + <activity android:name=".ui.setup.accounts.AccountSetupActivity" android:exported="false" @@ -38,16 +51,9 @@ android:windowSoftInputMode="adjustResize" /> <activity android:name=".ui.setup.accounts.AccountSelectionActivity" - android:exported="true" + android:exported="false" android:label="@string/app_name" - android:windowSoftInputMode="adjustResize"> - <intent-filter> - <action android:name="android.intent.action.MAIN" /> - <action android:name="android.intent.action.VIEW" /> - - <category android:name="android.intent.category.LAUNCHER" /> - </intent-filter> - </activity> + android:windowSoftInputMode="adjustResize" /> <service android:name=".service.QuasselService" diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt index c333d2fbd..3ee817471 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt @@ -1,7 +1,6 @@ package de.kuschku.quasseldroid_ng.ui.chat import android.annotation.TargetApi -import android.app.Activity import android.arch.lifecycle.Observer import android.arch.lifecycle.ViewModelProviders import android.content.Context @@ -39,6 +38,7 @@ import de.kuschku.quasseldroid_ng.settings.AppearanceSettings import de.kuschku.quasseldroid_ng.settings.BacklogSettings import de.kuschku.quasseldroid_ng.settings.Settings import de.kuschku.quasseldroid_ng.ui.settings.SettingsActivity +import de.kuschku.quasseldroid_ng.ui.setup.accounts.AccountSelectionActivity import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread import de.kuschku.quasseldroid_ng.util.helper.* @@ -123,6 +123,17 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit } + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + if (intent != null) { + when { + intent.type == "text/plain" -> { + inputEditor.share(intent.getStringExtra(Intent.EXTRA_TEXT)) + } + } + } + } + override fun onCreate(savedInstanceState: Bundle?) { handler.onCreate() super.onCreate(savedInstanceState) @@ -385,8 +396,10 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc putBoolean(Keys.Status.reconnect, false) } } - setResult(Activity.RESULT_OK) - finish() + + val intent = Intent(this, AccountSelectionActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP + startActivityForResult(intent, REQUEST_SELECT_ACCOUNT) } true } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/InputEditor.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/InputEditor.kt index 8b00f4c4d..6eed8d219 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/InputEditor.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/InputEditor.kt @@ -222,4 +222,9 @@ class InputEditor(private val editText: EditText) { editText.setSelection(editText.text.length) } } + + fun share(text: CharSequence?) { + editText.setText(text) + editText.setSelection(editText.text.length) + } } \ No newline at end of file diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionActivity.kt index 525ae03d1..33644c911 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionActivity.kt @@ -2,19 +2,16 @@ package de.kuschku.quasseldroid_ng.ui.setup.accounts import android.app.Activity import android.content.Context -import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import de.kuschku.quasseldroid_ng.Keys -import de.kuschku.quasseldroid_ng.ui.chat.ChatActivity import de.kuschku.quasseldroid_ng.ui.setup.SetupActivity -import de.kuschku.quasseldroid_ng.util.helper.editApply +import de.kuschku.quasseldroid_ng.util.helper.editCommit class AccountSelectionActivity : SetupActivity() { companion object { - const val REQUEST_CHAT = 0 - const val REQUEST_CREATE_FIRST = 1 - const val REQUEST_CREATE_NEW = 2 + const val REQUEST_CREATE_FIRST = 0 + const val REQUEST_CREATE_NEW = 1 } override val fragments = listOf( @@ -23,13 +20,12 @@ class AccountSelectionActivity : SetupActivity() { private lateinit var statusPreferences: SharedPreferences override fun onDone(data: Bundle) { - statusPreferences.editApply { + statusPreferences.editCommit { putLong(Keys.Status.selectedAccount, data.getLong(Keys.Status.selectedAccount, -1)) putBoolean(Keys.Status.reconnect, true) } - val intent = Intent(this, ChatActivity::class.java) - intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP - startActivityForResult(intent, REQUEST_CHAT) + setResult(Activity.RESULT_OK) + finish() } override fun onCreate(savedInstanceState: Bundle?) { @@ -39,18 +35,5 @@ class AccountSelectionActivity : SetupActivity() { val selectedAccount = statusPreferences.getLong(Keys.Status.selectedAccount, -1) data.putLong(Keys.Status.selectedAccount, selectedAccount) setInitData(data) - - if (statusPreferences.getBoolean(Keys.Status.reconnect, false) && selectedAccount != -1L) { - val intent = Intent(this, ChatActivity::class.java) - intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP - startActivityForResult(intent, REQUEST_CHAT) - } - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == REQUEST_CHAT && resultCode == Activity.RESULT_CANCELED) { - finish() - } } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt index b2d194642..ed35f704f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/service/ServiceBoundActivity.kt @@ -3,6 +3,7 @@ package de.kuschku.quasseldroid_ng.util.service import android.app.Activity import android.arch.lifecycle.LiveData import android.content.Context +import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import android.support.annotation.ColorRes @@ -14,6 +15,7 @@ import de.kuschku.quasseldroid_ng.R import de.kuschku.quasseldroid_ng.settings.AppearanceSettings import de.kuschku.quasseldroid_ng.settings.ConnectionSettings import de.kuschku.quasseldroid_ng.settings.Settings +import de.kuschku.quasseldroid_ng.ui.setup.accounts.AccountSelectionActivity import de.kuschku.quasseldroid_ng.util.helper.sharedPreferences import de.kuschku.quasseldroid_ng.util.helper.updateRecentsHeaderIfExisting @@ -32,17 +34,18 @@ abstract class ServiceBoundActivity : AppCompatActivity(), protected lateinit var connectionSettings: ConnectionSettings protected var accountId: Long = -1 + private var startedSelection = false + override fun onCreate(savedInstanceState: Bundle?) { connection.context = this appearanceSettings = Settings.appearance(this) connectionSettings = Settings.connection(this) - accountId = getSharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE) - ?.getLong(Keys.Status.selectedAccount, -1) ?: -1 + + checkConnection() setTheme(appearanceSettings.theme.style) super.onCreate(savedInstanceState) - connection.start() updateRecentsHeader() } @@ -79,11 +82,32 @@ abstract class ServiceBoundActivity : AppCompatActivity(), } private fun checkConnection() { + accountId = getSharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE) + ?.getLong(Keys.Status.selectedAccount, -1) ?: -1 + if (!sharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE) { getBoolean(Keys.Status.reconnect, false) - }) { - setResult(Activity.RESULT_OK) - finish() + } || accountId == -1L) { + + if (!startedSelection) { + startActivityForResult( + Intent(this, AccountSelectionActivity::class.java), REQUEST_SELECT_ACCOUNT + ) + startedSelection = true + } + } else { + connection.start() + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == REQUEST_SELECT_ACCOUNT) { + startedSelection = false + + if (resultCode == Activity.RESULT_CANCELED) { + finish() + } } } @@ -91,4 +115,8 @@ abstract class ServiceBoundActivity : AppCompatActivity(), connection.unbind() connection.stop() } + + companion object { + const val REQUEST_SELECT_ACCOUNT = 0 + } } -- GitLab