Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,22 @@ apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-parcelize'

android {
namespace 'com.example.remote_config_sample'
compileSdkVersion 30

compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
buildFeatures {
viewBinding = true
}
defaultConfig {
applicationId "com.example.remote_config_sample"
minSdkVersion 21
Expand Down Expand Up @@ -46,6 +58,6 @@ dependencies {
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

implementation 'io.repro:repro-android-sdk:5.1.3'
implementation 'io.repro:repro-android-sdk:5.20.3'
implementation 'com.github.bumptech.glide:glide:4.9.0'
}
3 changes: 1 addition & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.remote_config_sample">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Expand Down
131 changes: 77 additions & 54 deletions app/src/main/java/com/example/ux_optimizer_sample/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@ import android.graphics.Color
import android.os.Bundle
import android.util.Log
import android.util.TypedValue
import androidx.appcompat.app.AppCompatActivity;
import android.view.Menu
import android.view.MenuItem
import android.widget.LinearLayout
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.content_main.*
import com.example.remote_config_sample.databinding.ActivityMainBinding
import com.example.remote_config_sample.databinding.ContentMainBinding
import io.repro.android.Repro


class Config {
init {
val map = mutableMapOf<String, Any?>()
Expand Down Expand Up @@ -75,13 +76,20 @@ class MainActivity : AppCompatActivity() {

private var config: Config = Config()

// View Binding の変数を定義
private lateinit var binding: ActivityMainBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)

linearLayout1.visibility = LinearLayout.INVISIBLE
linearLayout2.visibility = LinearLayout.INVISIBLE
// View Binding の初期化
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root) // rootをセット

setSupportActionBar(binding.toolbar)

binding.contentMain.linearLayout1.visibility = LinearLayout.INVISIBLE
binding.contentMain.linearLayout2.visibility = LinearLayout.INVISIBLE

updateValues()
}
Expand All @@ -97,24 +105,36 @@ class MainActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()

button2.setOnClickListener {
val view = this.getLayoutInflater().inflate(R.layout.content_main, null);
AlertDialog.Builder(this)
.setView(view)
.show()
binding.contentMain.button1.setOnClickListener {
onClickedButton()
}
binding.contentMain.button2.setOnClickListener {
onClickedButton()
}
}

private fun onClickedButton() {
val dialogBinding = ContentMainBinding.inflate(layoutInflater)

if (config.isSpringMode()) {
setupSpringUI(dialogBinding)
} else {
setupUI(dialogBinding)
}
dialogBinding.titleView.text = config.getTitle()
dialogBinding.messageView.text = config.getMessage()

AlertDialog.Builder(this)
.setView(dialogBinding.root)
.show()
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.menu_main, menu)
return true
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
return when (item.itemId) {
R.id.action_settings -> true
else -> super.onOptionsItemSelected(item)
Expand All @@ -123,70 +143,73 @@ class MainActivity : AppCompatActivity() {


private fun updateValues() {
titleView.text = title
binding.contentMain.titleView.text = title
if (config.isSpringMode()) {
setupSpringUI()
setupSpringUI(binding.contentMain)
} else {
setupUI()
setupUI(binding.contentMain)
}

titleView.text = config.getTitle()
messageView.text = config.getMessage()
binding.contentMain.titleView.text = config.getTitle()
binding.contentMain.messageView.text = config.getMessage()

}

private fun setupUI() {
linearLayout1.visibility = LinearLayout.INVISIBLE
linearLayout2.visibility = LinearLayout.INVISIBLE
private fun setupUI(viewBinding: ContentMainBinding) {
viewBinding.linearLayout1.visibility = LinearLayout.INVISIBLE
viewBinding.linearLayout2.visibility = LinearLayout.INVISIBLE

val outValue = TypedValue()
theme.resolveAttribute(android.R.attr.statusBarColor, outValue, true)
window.statusBarColor = outValue.data;
window.statusBarColor = outValue.data

val toolbarColor = TypedValue();
val toolbarColor = TypedValue()
theme.resolveAttribute(android.R.attr.colorPrimary, toolbarColor, true)
toolbar.setBackgroundColor(toolbarColor.data)
toolbar.setTitleTextColor(this.whiteColor)
binding.toolbar.setBackgroundColor(toolbarColor.data)
binding.toolbar.setTitleTextColor(this.whiteColor)

viewBinding.button1.setBackgroundColor(toolbarColor.data)
viewBinding.button1.setTextColor(this.whiteColor)

button1.setBackgroundColor(toolbarColor.data)
button1.setTextColor(this.whiteColor)
button1.isVisible = config.isChangedButtonPosition()
viewBinding.button1.isVisible = config.isChangedButtonPosition()

button2.setBackgroundColor(toolbarColor.data)
button2.setTextColor(this.whiteColor)
button2.isVisible = !config.isChangedButtonPosition()
viewBinding.button2.setBackgroundColor(toolbarColor.data)
viewBinding.button2.setTextColor(this.whiteColor)
viewBinding.button2.isVisible = !config.isChangedButtonPosition()

titleView.setTextColor(this.cherryColorDark)
titleView.setTextColor(config.getTitleColor())
viewBinding.titleView.setTextColor(this.cherryColorDark)
viewBinding.titleView.setTextColor(config.getTitleColor())

content_main.setBackgroundColor(this.cherryColorLight)
// View Bindingではスネークケース(content_main)はキャメルケース(contentMain)になります
viewBinding.root.setBackgroundColor(this.cherryColorLight)

if (config.getImageUrl() != null) {
Glide.with(this).load(config.getImageUrl()).into(productView)
Glide.with(this).load(config.getImageUrl()).into(viewBinding.productView)
}
}

private fun setupSpringUI() {
linearLayout1.visibility = LinearLayout.VISIBLE
linearLayout2.visibility = LinearLayout.VISIBLE
private fun setupSpringUI(viewBinding: ContentMainBinding) {
viewBinding.linearLayout1.visibility = LinearLayout.VISIBLE
viewBinding.linearLayout2.visibility = LinearLayout.VISIBLE

window.statusBarColor = this.cherryColorDark
toolbar.setBackgroundColor(this.cherryColor)
toolbar.setTitleTextColor(this.whiteColor)
binding.toolbar.setBackgroundColor(this.cherryColor)
binding.toolbar.setTitleTextColor(this.whiteColor)

button1.setBackgroundColor(this.cherryColor)
button1.setTextColor(this.whiteColor)
button1.isVisible = config.isChangedButtonPosition()
viewBinding.button1.setBackgroundColor(this.cherryColor)
viewBinding.button1.setTextColor(this.whiteColor)
viewBinding.button1.isVisible = config.isChangedButtonPosition()

button2.setBackgroundColor(this.cherryColor)
button2.setTextColor(this.whiteColor)
button2.isVisible = !config.isChangedButtonPosition()
viewBinding.button2.setBackgroundColor(this.cherryColor)
viewBinding.button2.setTextColor(this.whiteColor)
viewBinding.button2.isVisible = !config.isChangedButtonPosition()

titleView.setTextColor(this.cherryColorDark)
content_main.setBackgroundColor(this.cherryColorLight)
viewBinding.titleView.setTextColor(this.cherryColorDark)
// View Bindingではスネークケース(content_main)はキャメルケース(contentMain)になります
viewBinding.root.setBackgroundColor(this.cherryColorLight)

if (config.getImageUrl() != null) {
Glide.with(this).load(config.getImageUrl()).into(productView)
Glide.with(this).load(config.getImageUrl()).into(viewBinding.productView)
}
}

}
}
10 changes: 5 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
ext.kotlin_version = '1.3.31'
ext.kotlin_version = '1.9.0'
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath 'com.android.tools.build:gradle:8.9.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.2.0'
classpath 'com.google.gms:google-services:4.4.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle file
}
Expand All @@ -18,7 +18,7 @@ buildscript {
allprojects {
repositories {
google()
jcenter()
mavenCentral()
}
}

Expand Down
3 changes: 2 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#Mon Nov 17 22:51:50 JST 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists