diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5b46c8ad26cf74c2bc95fd6e1e4a6ba40f775faa..5e08fb93adc8654ecf14c22d050d882a36472506 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 c333d2fbde6440bac18ae2091c3fd1f94f2ba43b..3ee817471c44c8fb24fdc68d4264f1ed265c331f 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 8b00f4c4d43fbb5d960e14f407fe05c15c8a4155..6eed8d2196ef4d353955ec98f170a550f3a38a2d 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 525ae03d183e9d8a1be1c77b241803752bc9301b..33644c911b643b3397d69a7ac0efb927bd1af6df 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 b2d19464201f4405e317207914f6362053e0a8e4..ed35f704fbcee23297c5d095b4dbb17e4cbb22cc 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 + } }