aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2017-10-13 01:49:23 +0900
committerKazuki Yamaguchi <k@rhe.jp>2017-10-13 01:49:23 +0900
commit8cd66dc753c2a23c34353e8a6d226508a0b4a811 (patch)
treeac0c3a4072e420004569209df60a2f7dbacc7bca
parentd2b44717b92f766d1023a60782fb23c4b267792c (diff)
downloadSmileEssence-8cd66dc753c2a23c34353e8a6d226508a0b4a811.tar.gz
change title color dynamically based on the profile image2017-10-12
-rw-r--r--app/build.gradle1
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt38
2 files changed, 28 insertions, 11 deletions
diff --git a/app/build.gradle b/app/build.gradle
index fe05f417..3ac1259c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -45,6 +45,7 @@ dependencies {
implementation 'com.android.support:support-core-ui:26.1.0'
implementation 'com.android.support:support-v13:26.1.0'
+ implementation 'com.android.support:palette-v7:26.1.0'
// Anko; not using Anko Layouts and Anko SQLite for now
implementation "org.jetbrains.anko:anko-commons:$anko_version"
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 ce0b9ee8..ef915e21 100644
--- a/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt
@@ -6,10 +6,12 @@ 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.graphics.Palette
import android.text.TextUtils
import android.util.DisplayMetrics
import android.view.Menu
@@ -23,14 +25,12 @@ import net.lacolaco.smileessence.Application
import net.lacolaco.smileessence.R
import net.lacolaco.smileessence.World
import net.lacolaco.smileessence.data.ExtractionWord
+import net.lacolaco.smileessence.data.ImageCache
import net.lacolaco.smileessence.logging.Logger
import net.lacolaco.smileessence.twitter.TwitterTaskException
import net.lacolaco.smileessence.twitter.task.getTweetAsync
import net.lacolaco.smileessence.twitter.task.getUserAsync
-import net.lacolaco.smileessence.util.BitmapURLTask
-import net.lacolaco.smileessence.util.bg
-import net.lacolaco.smileessence.util.getMainActivityOrCancel
-import net.lacolaco.smileessence.util.launchUi
+import net.lacolaco.smileessence.util.*
import net.lacolaco.smileessence.view.DialogHelper
import net.lacolaco.smileessence.view.adapter.PageListAdapter
import net.lacolaco.smileessence.view.confirm
@@ -102,6 +102,9 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
val label = getString(R.string.app_name) + " - @" + world.account.user.screenName
setTaskDescription(ActivityManager.TaskDescription(label))
+ if (!world.account.user.profileImageUrl.startsWith("http"))
+ return
+
// XXX: It doesn't seem possible to change scaleType of the ImageButton to fitXY
launchUi {
val bitmap = bg {
@@ -110,9 +113,7 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
inputStream = URL(world.account.user.profileImageUrl).openStream()
val opt = BitmapFactory.Options()
opt.inPurgeable = true // GC可能にする
- val orig = BitmapFactory.decodeStream(inputStream, null, opt)
- val r = 32.0 * resources.displayMetrics.density
- return@bg Bitmap.createScaledBitmap(orig, r.toInt(), r.toInt(), false)
+ return@bg BitmapFactory.decodeStream(inputStream, null, opt)
} catch (e: IOException) {
e.printStackTrace()
return@bg null
@@ -123,10 +124,25 @@ class MainActivity : Activity(), ViewPager.OnPageChangeListener {
e.printStackTrace()
}
}
- }.await()
- if (bitmap != null) {
- val d = BitmapDrawable(resources, bitmap)
- actionBar.setHomeAsUpIndicator(d)
+ }.await() ?: return@launchUi
+
+ val dScaledBitmap = bg {
+ val r = 32.0 * resources.displayMetrics.density
+ Bitmap.createScaledBitmap(bitmap, r.toInt(), r.toInt(), false)
+ }
+ val dPalette = bg { Palette.from(bitmap).generate() }
+
+ val scaledBitmap = dScaledBitmap.await()
+ actionBar.setHomeAsUpIndicator(BitmapDrawable(resources, scaledBitmap))
+
+ val palette = dPalette.await()
+ val textSwatch = palette.mutedSwatch
+ if (textSwatch == null) {
+ world.notifyError("Null swatch :(")
+ } else {
+ actionBar.setBackgroundDrawable(ColorDrawable(textSwatch.rgb))
+ window.statusBarColor = textSwatch.rgb
+ setTaskDescription(ActivityManager.TaskDescription(label, bitmap, textSwatch.rgb))
}
}
}