From 2a57c6c3d9e0e3ec1009a557d87afd4a7d96df87 Mon Sep 17 00:00:00 2001 From: umbum Date: Wed, 14 Aug 2019 09:00:49 +0900 Subject: [PATCH 1/6] Upgrade to API 28 - Apply FLAG_ACTIVITY_NEW_TASK when opening Chrome Custom Tab. --- .travis.yml | 2 +- app/build.gradle | 16 ++++++++-------- .../ui/widget/IssueWidget.kt | 3 ++- .../util/CustomTabsHelper.kt | 9 ++++++--- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index aa6cad7..a6a6e14 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ dist: trusty android: components: - build-tools-28.0.3 - - android-26 + - android-28 - extra script: diff --git a/app/build.gradle b/app/build.gradle index 602f4dd..db0a57f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,12 +18,12 @@ buildProperties { } android { - compileSdkVersion 26 + compileSdkVersion 28 buildToolsVersion "28.0.3" defaultConfig { applicationId "com.tistory.umbum.github_issue_widget_app" minSdkVersion 21 - targetSdkVersion 26 + targetSdkVersion 28 versionCode 1 versionName "1.0" buildConfigString "CLIENT_SECRET", (buildProperties.secrets['github_client_secret'] | buildProperties.notThere['github_client_secret']).string @@ -33,7 +33,7 @@ android { } signingConfigs { release { - storeFile file("/Users/umbum/Untitled") + storeFile file("github_issue_widget.keystore") storePassword((buildProperties.secrets['android_store_password'] | buildProperties.notThere['android_store_password']).string) keyAlias((buildProperties.secrets['android_key_alias'] | buildProperties.notThere['android_key_alias']).string) keyPassword((buildProperties.secrets['android_store_password'] | buildProperties.notThere['android_store_password']).string) @@ -54,10 +54,10 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' - implementation 'com.android.support:support-v4:26.1.0' - implementation 'com.android.support:design:26.1.0' + implementation 'com.android.support:support-v4:28.0.0' + implementation 'com.android.support:design:28.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2', { exclude group: 'com.android.support', module: 'support-annotations' @@ -66,8 +66,8 @@ dependencies { implementation "com.squareup.retrofit2:retrofit:$retrofit_version" implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofit_version" - implementation "com.android.support:customtabs:26.1.0" - implementation "com.android.support:recyclerview-v7:26.1.0" + implementation "com.android.support:customtabs:28.0.0" + implementation "com.android.support:recyclerview-v7:28.0.0" kapt "com.android.databinding:compiler:$android_plugin_version" implementation "io.reactivex.rxjava2:rxandroid:2.1.1" implementation "io.reactivex.rxjava2:rxjava:2.2.10" diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt index 0a8ce7e..88a8ae3 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt @@ -5,6 +5,7 @@ import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetProvider import android.content.Context import android.content.Intent +import android.content.Intent.FLAG_ACTIVITY_NEW_TASK import android.net.Uri import android.util.Log import android.widget.RemoteViews @@ -53,7 +54,7 @@ class IssueWidget : AppWidgetProvider() { } ACTION_CLICK -> { val url = intent.extras?.getString("url") - url?.let { openCustomTab(context, url) } ?: Log.d(DBG_TAG, "[onReceive] url is null") + url?.let { openCustomTab(context, url, FLAG_ACTIVITY_NEW_TASK) } ?: Log.d(DBG_TAG, "[onReceive] url is null") } else -> { Log.d(DBG_TAG, "[onReceive] action = ${intent.action}") diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/util/CustomTabsHelper.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/util/CustomTabsHelper.kt index 24a9cb5..5100a57 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/util/CustomTabsHelper.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/util/CustomTabsHelper.kt @@ -4,12 +4,15 @@ import android.net.Uri import android.support.customtabs.CustomTabsIntent -fun openCustomTab(context: Context, uri: Uri) { +fun openCustomTab(context: Context, uri: Uri, flags: Int? = null) { val builder = CustomTabsIntent.Builder() val customTabsIntent = builder.build() + if (flags != null) { + customTabsIntent.intent.setFlags(flags) + } customTabsIntent.launchUrl(context, uri) } -fun openCustomTab(context: Context, url: String) { - openCustomTab(context, Uri.parse(url)) +fun openCustomTab(context: Context, url: String, flags: Int? = null) { + openCustomTab(context, Uri.parse(url), flags) } From 2afbccff249e6860bde8d872f852c683107de23e Mon Sep 17 00:00:00 2001 From: umbum Date: Thu, 15 Aug 2019 23:31:06 +0900 Subject: [PATCH 2/6] [#10] Add a loading event when RepoSelectActivity receives a Repos. --- .../ui/{reposelect => }/BindingAdapters.kt | 2 +- .../ui/reposelect/RepoSelectViewModel.kt | 17 +++++++++----- .../ui/widget/IssueListService.kt | 1 - .../main/res/layout/activity_repo_select.xml | 22 ++++++++++++++++--- app/src/main/res/layout/issue_widget.xml | 2 +- app/src/main/res/values/strings.xml | 2 ++ 6 files changed, 34 insertions(+), 12 deletions(-) rename app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/{reposelect => }/BindingAdapters.kt (91%) diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/reposelect/BindingAdapters.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/BindingAdapters.kt similarity index 91% rename from app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/reposelect/BindingAdapters.kt rename to app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/BindingAdapters.kt index 76c9f7b..6ed5964 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/reposelect/BindingAdapters.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/BindingAdapters.kt @@ -1,4 +1,4 @@ -package com.tistory.umbum.github_issue_widget_app.ui.reposelect +package com.tistory.umbum.github_issue_widget_app.ui import android.databinding.BindingAdapter import android.support.v7.widget.RecyclerView diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/reposelect/RepoSelectViewModel.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/reposelect/RepoSelectViewModel.kt index 97413a9..8b1a26c 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/reposelect/RepoSelectViewModel.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/reposelect/RepoSelectViewModel.kt @@ -5,13 +5,14 @@ import android.arch.lifecycle.AndroidViewModel import android.arch.lifecycle.ViewModel import android.arch.lifecycle.ViewModelProvider import android.databinding.ObservableArrayList +import android.databinding.ObservableField import android.util.Log import android.widget.Toast import com.tistory.umbum.github_issue_widget_app.ALL_ISSUES_ID import com.tistory.umbum.github_issue_widget_app.ALL_ISSUES_TEXT -import com.tistory.umbum.github_issue_widget_app.data.remote.api.GithubApiClient -import com.tistory.umbum.github_issue_widget_app.data.model.RepoItem import com.tistory.umbum.github_issue_widget_app.data.local.preferences.AccessTokenRepository +import com.tistory.umbum.github_issue_widget_app.data.model.RepoItem +import com.tistory.umbum.github_issue_widget_app.data.remote.api.GithubApiClient import retrofit2.Call import retrofit2.Callback import retrofit2.Response @@ -20,6 +21,7 @@ class RepoSelectViewModel(app: Application) : AndroidViewModel(app) { private val TAG = this::class.java.simpleName private val accessTokenRepository = AccessTokenRepository(getApplication()) val repoItems = ObservableArrayList() + val requestProgress = ObservableField() init { requestRepos() @@ -30,6 +32,8 @@ class RepoSelectViewModel(app: Application) : AndroidViewModel(app) { } fun requestRepos() { + repoItems.clear() + requestProgress.set(true) val access_token = accessTokenRepository.accessToken if (access_token == null) { Log.d(TAG, "RepoSelectViewModel.requestRepos: accessToken is null") @@ -41,19 +45,20 @@ class RepoSelectViewModel(app: Application) : AndroidViewModel(app) { GithubApiClient.client.getMyRepos(token_string).enqueue(object : Callback> { override fun onFailure(call: Call>, t: Throwable) { - Log.e(TAG, "onFailure: repoistory request fail", t) + requestProgress.set(false) + Log.e(TAG, "onFailure: github repository request fail", t) Toast.makeText(getApplication(), "Request for repository information failed.", Toast.LENGTH_LONG).show() } override fun onResponse(call: Call>, response: Response>) { + requestProgress.set(false) val repos = response.body()?.toMutableList() if (repos != null) { - repos.add(0, allIssues) - repoItems.clear() + repoItems.add(allIssues) repoItems.addAll(repos) } else { Log.e(TAG, "onResponse: response.body() is null.") - Toast.makeText(getApplication(), "Failed to get repository information.π", Toast.LENGTH_LONG).show() + Toast.makeText(getApplication(), "Failed to get repository information.", Toast.LENGTH_LONG).show() } } }) diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueListService.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueListService.kt index 79e1c37..964e888 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueListService.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueListService.kt @@ -114,7 +114,6 @@ class IssueListFactory(val context: Context, val intent: Intent): RemoteViewsSer override fun getCount(): Int { // 0..getCount()만큼 getViewAt()이 호출된다. - Log.d(TAG, "IssueListFactory.getCount: return ${issueItems.size}") return issueItems.size } diff --git a/app/src/main/res/layout/activity_repo_select.xml b/app/src/main/res/layout/activity_repo_select.xml index d684ea6..ffdc175 100644 --- a/app/src/main/res/layout/activity_repo_select.xml +++ b/app/src/main/res/layout/activity_repo_select.xml @@ -4,6 +4,7 @@ xmlns:tools="http://schemas.android.com/tools"> + @@ -14,13 +15,28 @@ android:layout_height="match_parent" tools:context="com.tistory.umbum.github_issue_widget_app.ui.reposelect.RepoSelectActivity"> + + + android:dividerHeight="1dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:repo_items="@{vm.repoItems}" /> \ No newline at end of file diff --git a/app/src/main/res/layout/issue_widget.xml b/app/src/main/res/layout/issue_widget.xml index f8f0fdd..5b53110 100644 --- a/app/src/main/res/layout/issue_widget.xml +++ b/app/src/main/res/layout/issue_widget.xml @@ -56,7 +56,7 @@ android:id="@+id/issue_empty_view" android:layout_height="match_parent" android:layout_width="match_parent" - android:text="There is no issue!" + android:text="@string/no_issue" android:gravity="center" android:textSize="21sp"/> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c743c29..42a3c28 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -16,4 +16,6 @@ Settings Login + + There is no issue! From cbd2afe13d2fcbc6303f2d25dd7fe5e4d5ec15f3 Mon Sep 17 00:00:00 2001 From: umbum Date: Thu, 15 Aug 2019 23:31:36 +0900 Subject: [PATCH 3/6] Change the Log Tag to the simpleName of the class. --- .../umbum/github_issue_widget_app/Constants.kt | 1 - .../ui/login/OAuthLoginActivity.kt | 13 +++++++------ .../ui/reposelect/RepoSelectActivity.kt | 4 ++-- .../ui/widget/IssueWidget.kt | 18 ++++++++++-------- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/Constants.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/Constants.kt index 82990fe..51922aa 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/Constants.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/Constants.kt @@ -1,6 +1,5 @@ package com.tistory.umbum.github_issue_widget_app -const val DBG_TAG = "UMBUMDBG" const val CLIENT_ID = BuildConfig.CLIENT_ID const val CLIENT_SECRET = BuildConfig.CLIENT_SECRET const val REDIRECT_URI = BuildConfig.REDIRECT_URI diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/login/OAuthLoginActivity.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/login/OAuthLoginActivity.kt index b51c458..854d7ef 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/login/OAuthLoginActivity.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/login/OAuthLoginActivity.kt @@ -3,6 +3,8 @@ package com.tistory.umbum.github_issue_widget_app.ui.login import android.appwidget.AppWidgetManager import android.arch.lifecycle.Observer import android.arch.lifecycle.ViewModelProviders +import android.content.ComponentName +import android.content.Context import android.content.Intent import android.net.Uri import android.os.Bundle @@ -10,12 +12,9 @@ import android.support.v7.app.AppCompatActivity import android.util.Log import android.widget.Toast import com.tistory.umbum.github_issue_widget_app.CLIENT_ID -import com.tistory.umbum.github_issue_widget_app.DBG_TAG import com.tistory.umbum.github_issue_widget_app.REDIRECT_URI import com.tistory.umbum.github_issue_widget_app.ui.widget.IssueWidget import com.tistory.umbum.github_issue_widget_app.util.openCustomTab -import android.content.ComponentName -import android.content.Context /** @@ -24,6 +23,8 @@ import android.content.Context * 그냥 OAuthLoginActivity onCreate하자 마자 CCT로 OAuth 로그인하도록 넘어가게 구성했다. */ class OAuthLoginActivity : AppCompatActivity() { + val TAG = this::class.java.simpleName + private val viewModel: OAuthLoginViewModel by lazy { ViewModelProviders .of(this, OAuthLoginViewModelFactory(this.application)) @@ -51,7 +52,7 @@ class OAuthLoginActivity : AppCompatActivity() { override fun onResume() { super.onResume() val intent = getIntent() - Log.d(DBG_TAG, "OAuthLoginActivity.onResume: intent is ${intent?.action}") + Log.d(TAG, "OAuthLoginActivity.onResume: intent is ${intent?.action}") } /** @@ -81,10 +82,10 @@ class OAuthLoginActivity : AppCompatActivity() { finish() }) } else { - Log.d(DBG_TAG, "OAuthLoginActivity.onNewIntent: intent.data or getQueryParameter('code') is null") + Log.d(TAG, "OAuthLoginActivity.onNewIntent: intent.data or getQueryParameter('code') is null") } } else { - Log.d(DBG_TAG, "OAuthLoginActivity.onNewIntent: intent is ${intent?.action}") + Log.d(TAG, "OAuthLoginActivity.onNewIntent: intent is ${intent?.action}") } } diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/reposelect/RepoSelectActivity.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/reposelect/RepoSelectActivity.kt index b53183b..74c73a0 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/reposelect/RepoSelectActivity.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/reposelect/RepoSelectActivity.kt @@ -8,11 +8,11 @@ import android.support.v7.app.AppCompatActivity import android.support.v7.widget.DefaultItemAnimator import android.support.v7.widget.LinearLayoutManager import android.util.Log -import com.tistory.umbum.github_issue_widget_app.DBG_TAG import com.tistory.umbum.github_issue_widget_app.R import com.tistory.umbum.github_issue_widget_app.databinding.ActivityRepoSelectBinding class RepoSelectActivity : AppCompatActivity() { + val TAG = this::class.java.simpleName private val viewModel: RepoSelectViewModel by lazy { ViewModelProviders @@ -26,7 +26,7 @@ class RepoSelectActivity : AppCompatActivity() { val appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID) if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { - Log.d(DBG_TAG, "RepoSelectActivity: appWidgetId is INVALID") + Log.d(TAG, "RepoSelectActivity: appWidgetId is INVALID") return } diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt index 88a8ae3..a790f8c 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt @@ -9,12 +9,11 @@ import android.content.Intent.FLAG_ACTIVITY_NEW_TASK import android.net.Uri import android.util.Log import android.widget.RemoteViews -import com.tistory.umbum.github_issue_widget_app.DBG_TAG -import com.tistory.umbum.github_issue_widget_app.ui.config.ConfigActivity import com.tistory.umbum.github_issue_widget_app.R import com.tistory.umbum.github_issue_widget_app.data.local.preferences.UserSelectedRepository -import com.tistory.umbum.github_issue_widget_app.util.openCustomTab +import com.tistory.umbum.github_issue_widget_app.ui.config.ConfigActivity import com.tistory.umbum.github_issue_widget_app.ui.reposelect.RepoSelectActivity +import com.tistory.umbum.github_issue_widget_app.util.openCustomTab const val ACTION_UPDATE = "android.appwidget.action.APPWIDGET_UPDATE" @@ -23,6 +22,7 @@ const val ACTION_CLICK = "android.appwidget.action.ISSUE_CLICK" * IssueWidgetProvider */ class IssueWidget : AppWidgetProvider() { + val TAG = this::class.java.simpleName override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { // There may be multiple widgets active, so update all of them @@ -49,21 +49,23 @@ class IssueWidget : AppWidgetProvider() { updateAppWidget(context, appWidgetManager, appWidgetId) } else { - Log.d(DBG_TAG, "onReceive(broadcast receive) : appWidgetId is null") + Log.d(TAG, "onReceive(broadcast receive) : appWidgetId is null") } } ACTION_CLICK -> { val url = intent.extras?.getString("url") - url?.let { openCustomTab(context, url, FLAG_ACTIVITY_NEW_TASK) } ?: Log.d(DBG_TAG, "[onReceive] url is null") + url?.let { openCustomTab(context, url, FLAG_ACTIVITY_NEW_TASK) } ?: Log.d(TAG, "[onReceive] url is null") } else -> { - Log.d(DBG_TAG, "[onReceive] action = ${intent.action}") + Log.d(TAG, "[onReceive] action = ${intent.action}") } } } companion object { + val TAG = this::class.java.simpleName + internal fun updateAppWidget(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int) { /** widget은 런쳐 어플리케이션에 속하는 거라서, RemoteViews를 사용해야 한다. @@ -72,12 +74,12 @@ class IssueWidget : AppWidgetProvider() { appWidgetManager를 통해 런쳐 어플리케이션에 전달하면, 런쳐 어플리케이션이 이 뷰를 그리는 방식으로 동작한다. */ val views = RemoteViews(context.packageName, R.layout.issue_widget) - Log.d(DBG_TAG, "IssueWidget.onUpdate: id ${appWidgetId}") + Log.d(TAG, "IssueWidget.onUpdate: id ${appWidgetId}") val userSelectedRepository = UserSelectedRepository(context) val repoPath = userSelectedRepository.getSelectedRepoPath(appWidgetId) views.setTextViewText(R.id.repo_select_btn, repoPath) - Log.d(DBG_TAG, "[set repo btn text] ${repoPath}") + Log.d(TAG, "[set repo btn text] ${repoPath}") // repo select button val repoSelectIntent = Intent(context, RepoSelectActivity::class.java) From b619813ff5ec248d32ca9bf192274162ff1d668a Mon Sep 17 00:00:00 2001 From: umbum Date: Sat, 17 Aug 2019 08:54:07 +0900 Subject: [PATCH 4/6] Update gitignore --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5b16812..1dde199 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,6 @@ /build /captures .externalNativeBuild -.idea \ No newline at end of file +.idea +gradle.properties +*.keystore \ No newline at end of file From ad0519c61b442979a8784f5a1032059b750ae5d5 Mon Sep 17 00:00:00 2001 From: umbum Date: Sat, 17 Aug 2019 10:28:31 +0900 Subject: [PATCH 5/6] [#18] Fix bug where selection is applied to other widgets when selecting a repository. --- .../umbum/github_issue_widget_app/ui/widget/IssueWidget.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt index a790f8c..3e331dd 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt @@ -43,13 +43,13 @@ class IssueWidget : AppWidgetProvider() { super.onReceive(context, intent) when (intent.action) { ACTION_UPDATE -> { - val appWidgetId = intent.extras?.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID) ?: AppWidgetManager.INVALID_APPWIDGET_ID + val appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID) if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) { val appWidgetManager = AppWidgetManager.getInstance(context) updateAppWidget(context, appWidgetManager, appWidgetId) } else { - Log.d(TAG, "onReceive(broadcast receive) : appWidgetId is null") + Log.d(TAG, "onReceive(broadcast receive) : INVALID_APPWIDGET_ID") } } ACTION_CLICK -> { @@ -84,7 +84,7 @@ class IssueWidget : AppWidgetProvider() { // repo select button val repoSelectIntent = Intent(context, RepoSelectActivity::class.java) repoSelectIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) // 위젯 마다 다른 repo를 선택할 수 있어야 하므로. 어떤 위젯에서 레포 선택을 호출했는지 정보 필요. - val repoSelectPendingIntent = PendingIntent.getActivity(context, 0, repoSelectIntent, PendingIntent.FLAG_UPDATE_CURRENT) + val repoSelectPendingIntent = PendingIntent.getActivity(context, appWidgetId, repoSelectIntent, PendingIntent.FLAG_UPDATE_CURRENT) views.setOnClickPendingIntent(R.id.repo_select_btn, repoSelectPendingIntent) // update button From f15619f24afb1ef5c749285f0ffab961d174c6ce Mon Sep 17 00:00:00 2001 From: umbum Date: Sat, 17 Aug 2019 11:31:40 +0900 Subject: [PATCH 6/6] [#21] Make sure to delete the relevant data when the widget is deleted. --- .../local/preferences/UserSelectedRepository.kt | 14 +++++++++++--- .../ui/widget/IssueListService.kt | 6 ++---- .../ui/widget/IssueWidget.kt | 3 +-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/data/local/preferences/UserSelectedRepository.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/data/local/preferences/UserSelectedRepository.kt index 4d76d13..1758452 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/data/local/preferences/UserSelectedRepository.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/data/local/preferences/UserSelectedRepository.kt @@ -6,18 +6,26 @@ import com.tistory.umbum.github_issue_widget_app.ALL_ISSUES_TEXT class UserSelectedRepository(private val context: Context) { val TAG = this::class.java.simpleName + val keyPrefix = "selected_repo_for_id" fun getSelectedRepoPath(id: Int) : String = context.applicationContext .getSharedPreferences("SETTINGS", Context.MODE_PRIVATE) - .getString("selected_repo_for_id${id}", ALL_ISSUES_TEXT)!! + .getString("${keyPrefix}${id}", ALL_ISSUES_TEXT)!! fun setSelectedRepoPath(id: Int, repoPath: String) { context.applicationContext .getSharedPreferences("SETTINGS", Context.MODE_PRIVATE) .edit() - .putString("selected_repo_for_id${id}", repoPath) + .putString("${keyPrefix}${id}", repoPath) .apply() - Log.d(TAG, "[save] selected_repo_for_id${id} : ${repoPath}") + Log.d(TAG, "[save] ${keyPrefix}${id} : ${repoPath}") } + fun removeSelectedRepoPath(id: Int) { + context.applicationContext + .getSharedPreferences("SETTINGS", Context.MODE_PRIVATE) + .edit() + .remove("${keyPrefix}${id}") + .apply() + } } diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueListService.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueListService.kt index 964e888..33778f9 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueListService.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueListService.kt @@ -118,12 +118,10 @@ class IssueListFactory(val context: Context, val intent: Intent): RemoteViewsSer } override fun getViewTypeCount(): Int { - // issue_item의 layout으로 2종류를 사용하니까, getViewTypeCount는 2를 리턴해야 한다. - return 2 + return 2 // issue_item의 layout으로 2종류를 사용하고 있다. } override fun onDestroy() { - // In onDestroy() you should tear down anything that was setup for your data source, - // eg. cursors, connections, etc. + userSelectedRepository.removeSelectedRepoPath(appWidgetId); } } \ No newline at end of file diff --git a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt index 3e331dd..7e7fc71 100644 --- a/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt +++ b/app/src/main/java/com/tistory/umbum/github_issue_widget_app/ui/widget/IssueWidget.kt @@ -63,8 +63,7 @@ class IssueWidget : AppWidgetProvider() { } companion object { - - val TAG = this::class.java.simpleName + val TAG = this::class.java.enclosingClass.simpleName + "\$companion" internal fun updateAppWidget(context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int) {