aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/net')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/World.kt22
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt13
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/LicenseActivity.kt14
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt53
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/ManageAccountsActivity.kt16
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/OAuthActivity.kt11
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/SettingActivity.kt9
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/data/Account.kt3
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/data/DbHelper.kt3
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/data/ExtractionWord.kt2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/Tweet.kt9
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/preference/UserPreferenceHelper.kt4
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/ColoredRelativeLayout.kt5
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/Confirmation.kt8
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/PopupMenu.kt2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/SettingFragment.kt2
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/ThreeStateButton.kt4
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/ToggleableImageButton.kt4
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/adapter/PageListAdapter.kt97
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/DisposeDialog.kt10
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/dialog/StackableDialogFragment.kt5
21 files changed, 161 insertions, 135 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/World.kt b/app/src/main/java/net/lacolaco/smileessence/World.kt
index 7b980cd6..4c38c653 100644
--- a/app/src/main/java/net/lacolaco/smileessence/World.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/World.kt
@@ -2,9 +2,8 @@ package net.lacolaco.smileessence
import android.content.Intent
import android.support.annotation.StringRes
-import de.keyboardsurfer.android.widget.crouton.Configuration
-import de.keyboardsurfer.android.widget.crouton.Crouton
-import de.keyboardsurfer.android.widget.crouton.Style
+import android.support.design.widget.Snackbar
+import kotlinx.android.synthetic.main.layout_main.*
import net.lacolaco.smileessence.activity.MainActivity
import net.lacolaco.smileessence.compat.Twitter4J
import net.lacolaco.smileessence.data.Account
@@ -225,16 +224,9 @@ class World(val account: Account) {
} else {
UIHandler().post {
if (isMainActivityActive) {
- Logger.debug(String.format("notify(crouton): %s", text))
- val conf = Configuration.Builder()
- conf.setDuration(NOTIFICATION_DURATION)
- val bstyle = Style.Builder()
- bstyle.setConfiguration(conf.build())
- bstyle.setBackgroundColorValue(if (type == NotificationType.ALERT)
- Style.holoRedLight
- else
- Style.holoBlueLight)
- Crouton.makeText(activity, text, bstyle.build()).show()
+ // TODO: Make errors distinguishable
+ Logger.debug("notify(snackbar): $text")
+ Snackbar.make(activity.viewPager, text, Snackbar.LENGTH_SHORT).show()
} else {
Logger.debug(String.format("notify(toast): %s", text))
Application.toast(text)
@@ -247,8 +239,4 @@ class World(val account: Account) {
INFO,
ALERT
}
-
- companion object {
- private val NOTIFICATION_DURATION = 1000
- }
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt
index 317d782b..506178ad 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.kt
@@ -1,9 +1,8 @@
package net.lacolaco.smileessence.activity
-import android.app.Activity
-import android.app.AlertDialog
import android.os.Bundle
-import android.support.v4.app.NavUtils
+import android.support.v7.app.AlertDialog
+import android.support.v7.app.AppCompatActivity
import android.text.TextUtils
import android.view.*
import android.widget.AbsListView
@@ -13,10 +12,9 @@ import kotlinx.android.synthetic.main.list_item_simple_text.view.*
import kotlinx.android.synthetic.main.part_edittext.view.*
import net.lacolaco.smileessence.R
import net.lacolaco.smileessence.data.ExtractionWord
-import net.lacolaco.smileessence.logging.Logger
import net.lacolaco.smileessence.view.adapter.UnorderedCustomListAdapter
-class EditExtractionActivity : Activity() {
+class EditExtractionActivity : AppCompatActivity() {
private val adapter by lazy {
object : UnorderedCustomListAdapter<ExtractionWord>() {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
@@ -28,9 +26,10 @@ class EditExtractionActivity : Activity() {
}
override fun onCreate(savedInstanceState: Bundle?) {
- Logger.debug("onCreate")
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_edit_list)
+ setSupportActionBar(toolbar)
+ supportActionBar!!.setDisplayHomeAsUpEnabled(true)
adapter.addAll(ExtractionWord.cached())
adapter.update()
@@ -97,7 +96,7 @@ class EditExtractionActivity : Activity() {
dialog.show()
}
android.R.id.home -> {
- NavUtils.navigateUpFromSameTask(this)
+ finish()
return true
}
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/LicenseActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/LicenseActivity.kt
index 1c71ef17..b166d1af 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/LicenseActivity.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/LicenseActivity.kt
@@ -1,33 +1,27 @@
package net.lacolaco.smileessence.activity
-import android.app.Activity
import android.os.Bundle
-import android.support.v4.app.NavUtils
+import android.support.v7.app.AppCompatActivity
import android.view.MenuItem
import android.widget.TextView
import kotlinx.android.synthetic.main.layout_license.*
import net.lacolaco.smileessence.R
import java.util.*
-class LicenseActivity : Activity() {
-
- // --------------------- GETTER / SETTER METHODS ---------------------
-
+class LicenseActivity : AppCompatActivity() {
private val fileNames: List<String>
get() {
val apacheFiles = ArrayList<String>()
apacheFiles.add(getString(R.string.library_name_twitter4j))
- apacheFiles.add(getString(R.string.library_name_crouton))
apacheFiles.add(getString(R.string.library_name_volley))
apacheFiles.add(getString(R.string.library_name_twitter_text))
return apacheFiles
}
- // ------------------------ OVERRIDE METHODS ------------------------
-
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_license)
+ setSupportActionBar(toolbar)
setFiles()
}
@@ -35,7 +29,7 @@ class LicenseActivity : Activity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
- NavUtils.navigateUpFromSameTask(this)
+ finish()
return true
}
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt
index 983da6cf..f75f88a4 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt
@@ -1,22 +1,20 @@
package net.lacolaco.smileessence.activity
-import android.app.Activity
import android.app.ActivityManager
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.drawable.BitmapDrawable
-import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.support.v4.view.ViewPager
+import android.support.v7.app.AppCompatActivity
import android.support.v7.graphics.Palette
import android.text.TextUtils
import android.view.Menu
import android.view.MenuItem
import android.view.WindowManager
-import de.keyboardsurfer.android.widget.crouton.Crouton
import kotlinx.android.synthetic.main.layout_main.*
import net.lacolaco.smileessence.Application
import net.lacolaco.smileessence.R
@@ -38,7 +36,7 @@ import java.io.InputStream
import java.net.URL
import java.util.regex.Pattern
-class MainActivity : Activity(), ViewPager.OnPageChangeListener {
+class MainActivity : AppCompatActivity(), ViewPager.OnPageChangeListener {
val world: World by lazy {
val uri = intent.data ?: throw IllegalStateException("[BUG] data not set")
val userIdValue = uri.getQueryParameter("user_id") ?: throw IllegalStateException("[BUG] user_id not set")
@@ -94,8 +92,10 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
private fun setTitle() {
title = String.format("%s / %s", world.account.user.screenName, pagerAdapter.getName(viewPager.currentItem))
val label = getString(R.string.app_name) + " - @" + world.account.user.screenName
- setTaskDescription(ActivityManager.TaskDescription(label, null, world.account.themeColor))
- window.statusBarColor = world.account.themeColor
+ if (android.os.Build.VERSION.SDK_INT >= 21) {
+ setTaskDescription(ActivityManager.TaskDescription(label, null, world.account.themeColor))
+ window.statusBarColor = world.account.themeColor
+ }
launchBg { world.account.syncProfileAndSaveIfNecessary() }
if (!world.account.user.profileImageUrl.startsWith("http"))
@@ -129,7 +129,7 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
val dPalette = bg { Palette.from(bitmap).generate() }
val scaledBitmap = dScaledBitmap.await()
- actionBar.setHomeAsUpIndicator(BitmapDrawable(resources, scaledBitmap))
+ toolbar.navigationIcon = BitmapDrawable(resources, scaledBitmap)
val palette = dPalette.await()
val swatch = if (world.account.useDarkTheme)
@@ -139,11 +139,14 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
if (swatch == null) {
Logger.info("Unable to get a theme color of @${world.account.user.screenName}")
} else {
- actionBar.setBackgroundDrawable(ColorDrawable(swatch.rgb))
- window.statusBarColor = swatch.rgb
- setTaskDescription(ActivityManager.TaskDescription(label, bitmap, swatch.rgb))
+ //actionBar.setBackgroundDrawable(ColorDrawable(swatch.rgb))
+ toolbar.setBackgroundColor(swatch.rgb)
+ if (android.os.Build.VERSION.SDK_INT >= 21) {
+ window.statusBarColor = swatch.rgb
+ setTaskDescription(ActivityManager.TaskDescription(label, bitmap, swatch.rgb))
+ }
world.account.themeColor = swatch.rgb
- launchBg { world.account.save() }
+ //launchBg { world.account.save() }
}
}
}
@@ -229,7 +232,7 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode) {
REQUEST_GET_PICTURE_FROM_GALLERY -> {
- if (resultCode != Activity.RESULT_OK) {
+ if (resultCode != RESULT_OK) {
Logger.error(requestCode)
world.notifyError(R.string.notice_select_image_failed)
finish()
@@ -250,9 +253,10 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
val account = world.account
setTheme(if (account.useDarkTheme) R.style.theme_dark else R.style.theme_light)
setContentView(R.layout.layout_main)
+ setSupportActionBar(toolbar)
viewPager.addOnPageChangeListener(this)
- actionBar.setDisplayHomeAsUpEnabled(true)
+ //actionBar.setDisplayHomeAsUpEnabled(true)
// TODO: tab order?
val args = Bundle()
@@ -303,29 +307,6 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
- override fun onDestroy() {
- Crouton.cancelAllCroutons()
- // Workaround for LeakCanary
- fixCroutonLeak()
- Logger.debug("onDestroy")
- super.onDestroy()
- }
-
- private fun fixCroutonLeak() {
- try {
- val klass = Class.forName("de.keyboardsurfer.android.widget.crouton.DefaultAnimationsBuilder")
- val slideInDownAnimation = klass.getDeclaredField("slideInDownAnimation")
- slideInDownAnimation.isAccessible = true
- slideInDownAnimation.set(null, null)
- val slideOutUpAnimation = klass.getDeclaredField("slideOutUpAnimation")
- slideOutUpAnimation.isAccessible = true
- slideOutUpAnimation.set(null, null)
- } catch (e: Exception) {
- Logger.error("crouton fix error: " + e)
- }
- }
-
-
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.main, menu)
return true
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/ManageAccountsActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/ManageAccountsActivity.kt
index d53e94a7..5bf1b5f3 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/ManageAccountsActivity.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/ManageAccountsActivity.kt
@@ -1,19 +1,19 @@
package net.lacolaco.smileessence.activity
-import android.app.Activity
import android.content.ComponentName
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.os.Process
+import android.support.v7.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.BaseAdapter
-import kotlinx.android.synthetic.main.layout_edit_list.*
+import kotlinx.android.synthetic.main.layout_manage_accounts.*
import kotlinx.android.synthetic.main.list_item_account.view.*
import net.lacolaco.smileessence.Application
import net.lacolaco.smileessence.R
@@ -26,7 +26,7 @@ import net.lacolaco.smileessence.util.launchUi
import net.lacolaco.smileessence.view.confirm
import java.util.*
-class ManageAccountsActivity : Activity() {
+class ManageAccountsActivity : AppCompatActivity() {
private val adapter by lazy { EditAccountsAdapter() }
private lateinit var receivedIntent: Intent
@@ -48,7 +48,8 @@ class ManageAccountsActivity : Activity() {
return
}
- setContentView(R.layout.layout_edit_list)
+ setContentView(R.layout.layout_manage_accounts)
+ setSupportActionBar(toolbar)
listview_edit_list.adapter = adapter
listview_edit_list.setOnItemClickListener { adapterView: AdapterView<*>, view1: View, i: Int, l: Long ->
@@ -115,7 +116,8 @@ class ManageAccountsActivity : Activity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
- R.id.menu_edit_list_add -> startActivityForResult(Intent(this, OAuthActivity::class.java), REQUEST_OAUTH)
+ R.id.menu_edit_list_add ->
+ startActivityForResult(Intent(this, OAuthActivity::class.java), REQUEST_OAUTH)
android.R.id.home -> safeFinish()
else -> return super.onOptionsItemSelected(item)
}
@@ -131,7 +133,7 @@ class ManageAccountsActivity : Activity() {
if (currentWorld != null) {
goToWorld(currentWorld)
} else {
- setResult(Activity.RESULT_CANCELED)
+ setResult(RESULT_CANCELED)
finish()
}
}
@@ -142,7 +144,7 @@ class ManageAccountsActivity : Activity() {
}
private fun receiveOAuth(requestCode: Int, resultCode: Int, data: Intent?) {
- if (resultCode == Activity.RESULT_OK) {
+ if (resultCode == RESULT_OK) {
launchUi {
data!!
adapter.add(bg {
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/OAuthActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/OAuthActivity.kt
index 334c84cc..21fe612f 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/OAuthActivity.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/OAuthActivity.kt
@@ -1,8 +1,8 @@
package net.lacolaco.smileessence.activity
-import android.app.Activity
import android.content.Intent
import android.os.Bundle
+import android.support.v7.app.AppCompatActivity
import android.text.Editable
import android.text.TextWatcher
import kotlinx.android.synthetic.main.layout_oauth.*
@@ -14,7 +14,7 @@ import net.lacolaco.smileessence.util.launchUi
import twitter4j.TwitterFactory
import twitter4j.auth.RequestToken
-class OAuthActivity : Activity(), TextWatcher {
+class OAuthActivity : AppCompatActivity(), TextWatcher {
private var token: String? = null
private var tokenSecret: String? = null
@@ -38,10 +38,11 @@ class OAuthActivity : Activity(), TextWatcher {
intent.putExtra(KEY_TOKEN_SECRET, accessToken.tokenSecret)
intent.putExtra(KEY_USER_ID, accessToken.userId)
intent.putExtra(KEY_SCREEN_NAME, accessToken.screenName)
- setResult(Activity.RESULT_OK, intent)
+ setResult(RESULT_OK, intent)
} catch (e: Exception) {
+ e.printStackTrace()
Application.toast(R.string.notice_error_authenticate)
- setResult(Activity.RESULT_CANCELED)
+ setResult(RESULT_CANCELED)
}
finish()
}
@@ -63,7 +64,7 @@ class OAuthActivity : Activity(), TextWatcher {
} catch (e: Exception) {
Logger.error(e)
Application.toast(R.string.notice_error_authenticate_request)
- setResult(Activity.RESULT_CANCELED)
+ setResult(RESULT_CANCELED)
finish()
}
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/SettingActivity.kt b/app/src/main/java/net/lacolaco/smileessence/activity/SettingActivity.kt
index d7f1101f..47f44dd0 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/SettingActivity.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/SettingActivity.kt
@@ -1,21 +1,22 @@
package net.lacolaco.smileessence.activity
-import android.app.Activity
import android.os.Bundle
-import android.support.v4.app.NavUtils
+import android.support.v7.app.AppCompatActivity
import android.view.MenuItem
+import kotlinx.android.synthetic.main.layout_setting.*
import net.lacolaco.smileessence.R
-class SettingActivity : Activity() {
+class SettingActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_setting)
+ setSupportActionBar(toolbar)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
- NavUtils.navigateUpFromSameTask(this)
+ finish()
return true
}
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/data/Account.kt b/app/src/main/java/net/lacolaco/smileessence/data/Account.kt
index b5327d5a..d9efd4b9 100644
--- a/app/src/main/java/net/lacolaco/smileessence/data/Account.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/data/Account.kt
@@ -2,6 +2,7 @@ package net.lacolaco.smileessence.data
import android.content.ContentValues
import net.lacolaco.smileessence.entity.User
+import net.lacolaco.smileessence.logging.Logger
import twitter4j.Twitter
import twitter4j.TwitterFactory
import twitter4j.TwitterStream
@@ -86,6 +87,7 @@ class Account private constructor(
}
}
}
+ Logger.error(cache.size)
}
fun register(token: String, tokenSecret: String, userId: Long, screenName: String): Account {
@@ -108,6 +110,7 @@ class Account private constructor(
values.put("theme", account.themeIndex)
values.put("theme_color", account.themeColor)
db.insertOrThrow("accounts", null, values)
+ Logger.error(cache.size)
}
cache[userId] = account
diff --git a/app/src/main/java/net/lacolaco/smileessence/data/DbHelper.kt b/app/src/main/java/net/lacolaco/smileessence/data/DbHelper.kt
index 7fe81e66..772ff959 100644
--- a/app/src/main/java/net/lacolaco/smileessence/data/DbHelper.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/data/DbHelper.kt
@@ -7,7 +7,7 @@ import android.database.sqlite.SQLiteOpenHelper
class DbHelper private constructor(context: Context) :
SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {
override fun onCreate(db: SQLiteDatabase) {
- // Schema v0
+ // Schema v1
db.execSQL("""
CREATE TABLE accounts (
id INTEGER PRIMARY KEY,
@@ -18,6 +18,7 @@ class DbHelper private constructor(context: Context) :
theme INTEGER NOT NULL
)
""")
+ onUpgrade(db, 1, DATABASE_VERSION)
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
diff --git a/app/src/main/java/net/lacolaco/smileessence/data/ExtractionWord.kt b/app/src/main/java/net/lacolaco/smileessence/data/ExtractionWord.kt
index 7c1e1384..7f541c4b 100644
--- a/app/src/main/java/net/lacolaco/smileessence/data/ExtractionWord.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/data/ExtractionWord.kt
@@ -11,7 +11,7 @@ class ExtractionWord private constructor(val patternString: String) {
fun remove() {
DbHelper.instance.writableDatabase.use { db ->
if (db.delete("extraction_words", "pattern_string = ?", arrayOf(patternString)) == 0)
- throw IllegalStateException("Could not remove patternString=${patternString} from extraction_words")
+ throw IllegalStateException("Could not remove patternString=$patternString from extraction_words")
}
cache!!.remove(this)
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.kt b/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.kt
index fbb45641..17ee6799 100644
--- a/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.kt
@@ -17,10 +17,11 @@ class Tweet private constructor(st: twitter4j.Status, myUserId: Long) : EntitySu
val isRetweet = retweetedTweet != null
val originalTweet = retweetedTweet ?: this
val text: String = retweetedTweet?.text ?: extractText(st, false)
- val inReplyToStatusId: Long? =
- if (isRetweet) retweetedTweet!!.inReplyToStatusId
- else if (st.inReplyToStatusId != -1L) st.inReplyToStatusId
- else null
+ val inReplyToStatusId: Long? = when {
+ isRetweet -> retweetedTweet!!.inReplyToStatusId
+ st.inReplyToStatusId != -1L -> st.inReplyToStatusId
+ else -> null
+ }
var favoriteCount: Int = st.favoriteCount
get() = retweetedTweet?.favoriteCount ?: field
private set
diff --git a/app/src/main/java/net/lacolaco/smileessence/preference/UserPreferenceHelper.kt b/app/src/main/java/net/lacolaco/smileessence/preference/UserPreferenceHelper.kt
index 4f175026..23bae89e 100644
--- a/app/src/main/java/net/lacolaco/smileessence/preference/UserPreferenceHelper.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/preference/UserPreferenceHelper.kt
@@ -9,10 +9,6 @@ class UserPreferenceHelper private constructor() {
private val preferences: SharedPreferences
get() = PreferenceManager.getDefaultSharedPreferences(Application.instance)
- // --------------------- HELPER METHODS ---------------------
- val themeIndex: Int
- get() = get(R.string.key_setting_theme, 0)
-
val textSize: Int
get() = get(R.string.key_setting_text_size, 10)
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/ColoredRelativeLayout.kt b/app/src/main/java/net/lacolaco/smileessence/view/ColoredRelativeLayout.kt
index 5d15c2bc..3e37411d 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/ColoredRelativeLayout.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/ColoredRelativeLayout.kt
@@ -7,8 +7,9 @@ import android.util.AttributeSet
import android.widget.RelativeLayout
import net.lacolaco.smileessence.R
-
-class ColoredRelativeLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, defStyleRes: Int = 0) : RelativeLayout(context, attrs, defStyleAttr, defStyleRes) {
+// XXX: 4th argument defStyleRes: Int = 0 isn't available in API 19
+class ColoredRelativeLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :
+ RelativeLayout(context, attrs, defStyleAttr) {
private val paint = Paint()
private val highlightColors = IntArray(4)
private var showAccent = false
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/Confirmation.kt b/app/src/main/java/net/lacolaco/smileessence/view/Confirmation.kt
index 6d25db2e..40e0e3fa 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/Confirmation.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/Confirmation.kt
@@ -1,11 +1,11 @@
package net.lacolaco.smileessence.view
-import android.app.Activity
-import android.app.AlertDialog
import android.app.Fragment
+import android.support.v7.app.AlertDialog
+import android.support.v7.app.AppCompatActivity
import net.lacolaco.smileessence.R
-fun Activity.confirm(resId: Int, vararg rest: Any, onOk: () -> Unit) {
+fun AppCompatActivity.confirm(resId: Int, vararg rest: Any, onOk: () -> Unit) {
val dialog = AlertDialog.Builder(this)
.setTitle(getString(resId, *rest))
.setPositiveButton(R.string.alert_dialog_ok) { _, _ -> onOk() }
@@ -15,4 +15,4 @@ fun Activity.confirm(resId: Int, vararg rest: Any, onOk: () -> Unit) {
}
fun Fragment.confirm(resId: Int, vararg rest: Any, onOk: () -> Unit) =
- activity.confirm(resId, rest = *rest, onOk = onOk)
+ (activity as AppCompatActivity).confirm(resId, rest = *rest, onOk = onOk)
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/PopupMenu.kt b/app/src/main/java/net/lacolaco/smileessence/view/PopupMenu.kt
index 794f77fd..bb765792 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/PopupMenu.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/PopupMenu.kt
@@ -5,7 +5,7 @@ import android.view.MenuItem
import android.view.View
class PopupMenu(context: Context, anchor: View) {
- private val popupMenu = android.widget.PopupMenu(context, anchor)
+ private val popupMenu = android.support.v7.widget.PopupMenu(context, anchor)
private val menuItems = LinkedHashMap<MenuItem, (MenuItem) -> Unit>()
init {
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/SettingFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/SettingFragment.kt
index 019e02b5..c2aa6ec0 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/SettingFragment.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/SettingFragment.kt
@@ -1,6 +1,5 @@
package net.lacolaco.smileessence.view
-import android.app.AlertDialog
import android.content.Intent
import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
@@ -9,6 +8,7 @@ import android.preference.EditTextPreference
import android.preference.ListPreference
import android.preference.Preference
import android.preference.PreferenceFragment
+import android.support.v7.app.AlertDialog
import android.text.TextUtils
import kotlinx.android.synthetic.main.dialog_app_info.view.*
import net.lacolaco.smileessence.Application
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/ThreeStateButton.kt b/app/src/main/java/net/lacolaco/smileessence/view/ThreeStateButton.kt
index 0f496385..8e516c36 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/ThreeStateButton.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/ThreeStateButton.kt
@@ -2,11 +2,11 @@ package net.lacolaco.smileessence.view
import android.content.Context
import android.graphics.drawable.Drawable
+import android.support.v7.widget.AppCompatButton
import android.util.AttributeSet
-import android.widget.Button
import net.lacolaco.smileessence.R
-class ThreeStateButton @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = android.R.attr.buttonStyle, defStyleRes: Int = 0) : Button(context, attrs, defStyleAttr, defStyleRes) {
+class ThreeStateButton @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = android.R.attr.buttonStyle) : AppCompatButton(context, attrs, defStyleAttr) {
var state = STATE_OFF
set(s) {
field = s
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/ToggleableImageButton.kt b/app/src/main/java/net/lacolaco/smileessence/view/ToggleableImageButton.kt
index f83bcf56..cb1fd60e 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/ToggleableImageButton.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/ToggleableImageButton.kt
@@ -2,11 +2,13 @@ package net.lacolaco.smileessence.view
import android.content.Context
import android.graphics.drawable.Drawable
+import android.support.v7.widget.AppCompatButton
+import android.support.v7.widget.AppCompatImageButton
import android.util.AttributeSet
import android.widget.ImageButton
import net.lacolaco.smileessence.R
-class ToggleableImageButton @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = android.R.attr.imageButtonStyle, defStyleRes: Int = 0) : ImageButton(context, attrs, defStyleAttr, defStyleRes) {
+class ToggleableImageButton @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = android.R.attr.imageButtonStyle) : AppCompatImageButton(context, attrs, defStyleAttr) {
private val onSrc: Drawable
private val offSrc: Drawable
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/PageListAdapter.kt b/app/src/main/java/net/lacolaco/smileessence/view/adapter/PageListAdapter.kt
index 2e739faa..452eb3f6 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/PageListAdapter.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/PageListAdapter.kt
@@ -1,18 +1,27 @@
package net.lacolaco.smileessence.view.adapter
+import android.app.Fragment
+import android.app.FragmentManager
+import android.app.FragmentTransaction
import android.os.Bundle
-import android.support.v13.app.FragmentPagerAdapter
+import android.support.v4.view.PagerAdapter
+import android.view.View
+import android.view.ViewGroup
+import net.lacolaco.smileessence.BuildConfig
import net.lacolaco.smileessence.activity.MainActivity
import net.lacolaco.smileessence.logging.Logger
import net.lacolaco.smileessence.view.page.PageFragment
import java.lang.ref.WeakReference
import java.util.*
-class PageListAdapter(_activity: MainActivity) : FragmentPagerAdapter(_activity.fragmentManager) {
+class PageListAdapter(_activity: MainActivity) : PagerAdapter() {
+ private val mFragmentManager: FragmentManager = _activity.fragmentManager
+ private var mCurTransaction: FragmentTransaction? = null
+ private var mCurrentPrimaryItem: Fragment? = null
private val pages = ArrayList<PageInfo>()
private val fragmentCache = HashMap<Int, WeakReference<PageFragment>>()
- @Synchronized override fun getItem(position: Int): PageFragment {
+ @Synchronized fun getItem(position: Int): PageFragment {
val pf: PageFragment
val info = pages[position]
try {
@@ -38,24 +47,11 @@ class PageListAdapter(_activity: MainActivity) : FragmentPagerAdapter(_activity.
return pages.size
}
- fun addPage(klass: Class<out PageFragment>, name: String, args: Bundle) {
- this.addPage(klass, name, args, true)
- }
-
fun addPage(klass: Class<out PageFragment>, name: String, args: Bundle, notifyChanged: Boolean) {
pages.add(PageInfo(klass, name, args))
if (notifyChanged) notifyDataSetChanged()
}
- @Synchronized
- fun removePage(position: Int): Boolean {
- //if (removePageWithoutNotify(position)) {
- // refreshListNavigation();
- // return true;
- //}
- return pages.removeAt(position) != null // TODO
- }
-
fun getName(pos: Int): String {
return pages[pos].name
}
@@ -71,4 +67,73 @@ class PageListAdapter(_activity: MainActivity) : FragmentPagerAdapter(_activity.
}
private class PageInfo internal constructor(val fragmentClass: Class<out PageFragment>, val name: String, val args: Bundle)
+
+ override fun startUpdate(container: ViewGroup) {
+ assert(container.id != View.NO_ID)
+ }
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ if (mCurTransaction == null) {
+ mCurTransaction = mFragmentManager.beginTransaction()
+ }
+
+ val itemId = position.toLong()
+
+ // Do we already have this fragment?
+ val name = "android:switcher:${container.id}:$itemId"
+ var fragment: Fragment? = mFragmentManager.findFragmentByTag(name)
+ if (fragment != null) {
+ if (BuildConfig.DEBUG)
+ Logger.verbose("Attaching item #$itemId: f=$fragment")
+ mCurTransaction!!.attach(fragment)
+ } else {
+ fragment = getItem(position)
+ if (BuildConfig.DEBUG)
+ Logger.verbose("Adding item #$itemId: f=$fragment")
+ mCurTransaction!!.add(container.id, fragment, "android:switcher:${container.id}:$itemId")
+ }
+ if (fragment !== mCurrentPrimaryItem) {
+ fragment.setMenuVisibility(false)
+ fragment.userVisibleHint = false
+ }
+
+ return fragment
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
+ if (mCurTransaction == null) {
+ mCurTransaction = mFragmentManager.beginTransaction()
+ }
+ if (BuildConfig.DEBUG)
+ Logger.verbose("Detaching item #" + position + ": f=" + `object`
+ + " v=" + (`object` as Fragment).view)
+ mCurTransaction!!.detach(`object` as Fragment)
+ }
+
+ override fun setPrimaryItem(container: ViewGroup, position: Int, `object`: Any) {
+ val fragment = `object` as Fragment?
+ if (fragment !== mCurrentPrimaryItem) {
+ if (mCurrentPrimaryItem != null) {
+ mCurrentPrimaryItem!!.setMenuVisibility(false)
+ mCurrentPrimaryItem!!.userVisibleHint = false
+ }
+ if (fragment != null) {
+ fragment.setMenuVisibility(true)
+ fragment.userVisibleHint = true
+ }
+ mCurrentPrimaryItem = fragment
+ }
+ }
+
+ override fun finishUpdate(container: ViewGroup) {
+ if (mCurTransaction != null) {
+ mCurTransaction!!.commitAllowingStateLoss()
+ mCurTransaction = null
+ mFragmentManager.executePendingTransactions()
+ }
+ }
+
+ override fun isViewFromObject(view: View, `object`: Any): Boolean {
+ return (`object` as Fragment).view === view
+ }
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/DisposeDialog.kt b/app/src/main/java/net/lacolaco/smileessence/view/dialog/DisposeDialog.kt
deleted file mode 100644
index f827536c..00000000
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/DisposeDialog.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package net.lacolaco.smileessence.view.dialog
-
-import android.app.Dialog
-import android.content.Context
-
-class DisposeDialog(context: Context) : Dialog(context) {
- override fun show() {
- dismiss()
- }
-}
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StackableDialogFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StackableDialogFragment.kt
index 244d1e5b..28fc27be 100644
--- a/app/src/main/java/net/lacolaco/smileessence/view/dialog/StackableDialogFragment.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/view/dialog/StackableDialogFragment.kt
@@ -3,6 +3,7 @@ package net.lacolaco.smileessence.view.dialog
import android.app.Dialog
import android.app.DialogFragment
import android.os.Bundle
+import android.support.v7.app.AppCompatDialog
import android.view.Window
import net.lacolaco.smileessence.World
import net.lacolaco.smileessence.activity.MainActivity
@@ -14,8 +15,8 @@ import net.lacolaco.smileessence.view.DialogHelper
* Shows a dialog with no title by default.
*/
open class StackableDialogFragment : DialogFragment() {
- override fun onCreateDialog(savedInstanceState: Bundle?): Dialog? {
- return Dialog(activity).apply { requestWindowFeature(Window.FEATURE_NO_TITLE) }
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ return AppCompatDialog(activity).apply { requestWindowFeature(Window.FEATURE_NO_TITLE) }
}
override fun dismiss() {