diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2017-10-13 01:49:23 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2017-10-13 01:49:23 +0900 |
commit | 8cd66dc753c2a23c34353e8a6d226508a0b4a811 (patch) | |
tree | ac0c3a4072e420004569209df60a2f7dbacc7bca | |
parent | d2b44717b92f766d1023a60782fb23c4b267792c (diff) | |
download | SmileEssence-8cd66dc753c2a23c34353e8a6d226508a0b4a811.tar.gz |
change title color dynamically based on the profile image2017-10-12
-rw-r--r-- | app/build.gradle | 1 | ||||
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/activity/MainActivity.kt | 38 |
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)) } } } |