From 3422d825474fb1565e0dacc36c6812df31220051 Mon Sep 17 00:00:00 2001 From: dmorozov Date: Tue, 20 Sep 2022 18:26:59 +0300 Subject: [PATCH 1/2] Update project - Update gradle version - Fix gradle issues - Update compileSdkVersion - Update targetSdkVersion - Update buildToolsVersion - Migrate to AndroidX - Migrate butterknife to ViewBinding --- build.gradle | 8 +- gradle.properties | 7 +- gradle/wrapper/gradle-wrapper.properties | 3 +- mobile/build.gradle | 21 +++-- mobile/src/main/AndroidManifest.xml | 40 +++++---- .../manager/ConfigurationManager.java | 3 +- .../watchface/view/BaseGoogleApiActivity.java | 3 +- .../configuration/ConfigurationActivity.java | 85 ++++++++----------- .../ConfigurationAmbientActivity.java | 40 ++++----- .../view/ticks_options/TickSetupActivity.java | 55 +++++------- .../src/main/res/layout/activity_ambient.xml | 2 +- .../res/layout/activity_configuration.xml | 2 +- .../main/res/layout/activity_ticks_config.xml | 2 +- wear/build.gradle | 16 ++-- wear/src/main/AndroidManifest.xml | 17 +++- .../sevrice/WearableListenerService.java | 1 - 16 files changed, 148 insertions(+), 157 deletions(-) diff --git a/build.gradle b/build.gradle index b193299..1834990 100644 --- a/build.gradle +++ b/build.gradle @@ -2,10 +2,11 @@ buildscript { repositories { - jcenter() + google() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0' + classpath 'com.android.tools.build:gradle:7.3.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -14,6 +15,7 @@ buildscript { allprojects { repositories { - jcenter() + google() + mavenCentral() } } diff --git a/gradle.properties b/gradle.properties index 1d3591c..bec2a42 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,4 +15,9 @@ # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file +# org.gradle.parallel=true + +android.useAndroidX=true +android.enableJetifier=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 03212f4..41dfb87 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Nov 01 20:44:59 EET 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/mobile/build.gradle b/mobile/build.gradle index 3a47fa7..80da773 100644 --- a/mobile/build.gradle +++ b/mobile/build.gradle @@ -9,12 +9,12 @@ android { storePassword 'android123' } } - compileSdkVersion 22 - buildToolsVersion "22.0.1" + compileSdkVersion 33 + buildToolsVersion "30.0.3" defaultConfig { applicationId "com.yalantis.watchface" minSdkVersion 18 - targetSdkVersion 22 + targetSdkVersion 33 versionCode 2 versionName "1.0.1" } @@ -24,16 +24,19 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } + } + buildFeatures { + viewBinding true } } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') + implementation fileTree(include: ['*.jar'], dir: 'libs') wearApp project(':wear') - compile 'com.android.support:appcompat-v7:22.2.0' - compile 'com.android.support:design:22.2.1' - compile 'com.google.android.support:wearable:1.1.+' - compile 'com.jakewharton:butterknife:7.0.1' - compile 'com.google.android.gms:play-services:7.5.0' + implementation "androidx.appcompat:appcompat:1.5.1" + implementation "com.google.android.material:material:1.6.1" + compileOnly "com.google.android.wearable:wearable:2.9.0" + implementation "com.google.android.support:wearable:2.9.0" + implementation "com.google.android.gms:play-services:12.0.1" } diff --git a/mobile/src/main/AndroidManifest.xml b/mobile/src/main/AndroidManifest.xml index 3148dcb..8da72c0 100644 --- a/mobile/src/main/AndroidManifest.xml +++ b/mobile/src/main/AndroidManifest.xml @@ -1,53 +1,57 @@ - + - - - + + + - - + + - - + + + - - + + - - + + - - + + - - + + diff --git a/mobile/src/main/java/com/yalantis/watchface/manager/ConfigurationManager.java b/mobile/src/main/java/com/yalantis/watchface/manager/ConfigurationManager.java index 4fcf25f..c356bbf 100644 --- a/mobile/src/main/java/com/yalantis/watchface/manager/ConfigurationManager.java +++ b/mobile/src/main/java/com/yalantis/watchface/manager/ConfigurationManager.java @@ -5,9 +5,10 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Environment; -import android.support.annotation.Nullable; import android.util.Log; +import androidx.annotation.Nullable; + import com.yalantis.watchface.Constants; import com.yalantis.watchface.R; diff --git a/mobile/src/main/java/com/yalantis/watchface/view/BaseGoogleApiActivity.java b/mobile/src/main/java/com/yalantis/watchface/view/BaseGoogleApiActivity.java index f331f0c..3f2ccbc 100644 --- a/mobile/src/main/java/com/yalantis/watchface/view/BaseGoogleApiActivity.java +++ b/mobile/src/main/java/com/yalantis/watchface/view/BaseGoogleApiActivity.java @@ -1,7 +1,8 @@ package com.yalantis.watchface.view; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; + +import androidx.appcompat.app.AppCompatActivity; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; diff --git a/mobile/src/main/java/com/yalantis/watchface/view/configuration/ConfigurationActivity.java b/mobile/src/main/java/com/yalantis/watchface/view/configuration/ConfigurationActivity.java index e339d58..c01b1b4 100644 --- a/mobile/src/main/java/com/yalantis/watchface/view/configuration/ConfigurationActivity.java +++ b/mobile/src/main/java/com/yalantis/watchface/view/configuration/ConfigurationActivity.java @@ -3,21 +3,16 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.design.widget.Snackbar; -import android.support.v7.widget.Toolbar; -import android.widget.LinearLayout; +import com.google.android.material.snackbar.Snackbar; import com.yalantis.watchface.Constants; import com.yalantis.watchface.R; +import com.yalantis.watchface.databinding.ActivityConfigurationBinding; import com.yalantis.watchface.presenter.configuration.ConfigurationPresenter; import com.yalantis.watchface.presenter.configuration.ConfigurationPresenterImpl; import com.yalantis.watchface.view.BaseGoogleApiActivity; import com.yalantis.watchface.view.ticks_options.TickSetupActivity; -import butterknife.Bind; -import butterknife.ButterKnife; -import butterknife.OnClick; - /** * @author andrewkhristyan on 10/5/15. */ @@ -25,62 +20,56 @@ public class ConfigurationActivity extends BaseGoogleApiActivity implements Conf protected ConfigurationPresenter mConfigurationPresenter = new ConfigurationPresenterImpl(); - @Bind(R.id.toolbar) - Toolbar toolbar; - @Bind(R.id.linear_layout_root) - LinearLayout linearLayoutRoot; + private ActivityConfigurationBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_configuration); - ButterKnife.bind(this); - setSupportActionBar(toolbar); + binding = ActivityConfigurationBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + setSupportActionBar(binding.toolbar); setTitle(getString(R.string.main_label)); mConfigurationPresenter.register(this); - } - @Override - protected void onDestroy() { - super.onDestroy(); - mConfigurationPresenter.unregister(this); + setupListeners(); } - @OnClick(R.id.button_change_background) - void onClickChangeBackground() { - mConfigurationPresenter.changeContentImage(isConnected, Constants.BACKGROUND_CHOOSER); - } + private void setupListeners() { + binding.buttonChangeBackground.setOnClickListener(v -> + mConfigurationPresenter.changeContentImage(isConnected, Constants.BACKGROUND_CHOOSER) + ); - @OnClick(R.id.button_change_second_tick) - void onClickSecondTick() { - mConfigurationPresenter.changeContentImage(isConnected, Constants.SECOND_CHOOSER); - } + binding.buttonChangeSecondTick.setOnClickListener(v -> + mConfigurationPresenter.changeContentImage(isConnected, Constants.SECOND_CHOOSER) + ); - @OnClick(R.id.button_change_hours_ticks) - void onClickHourTicks() { - mConfigurationPresenter.changeContentImage(isConnected, Constants.HOUR_CHOOSER); - } + binding.buttonChangeHoursTicks.setOnClickListener(v -> + mConfigurationPresenter.changeContentImage(isConnected, Constants.HOUR_CHOOSER) + ); - @OnClick(R.id.button_change_minute_ticks) - void onClickMinuteTicks() { - mConfigurationPresenter.changeContentImage(isConnected, Constants.MINUTE_CHOOSER); - } + binding.buttonChangeMinuteTicks.setOnClickListener(v -> + mConfigurationPresenter.changeContentImage(isConnected, Constants.MINUTE_CHOOSER) + ); - @OnClick(R.id.button_change_save_configuration) - void onClickSaveConfig() { - mConfigurationPresenter.saveConfig(); - Snackbar.make(linearLayoutRoot, getString(R.string.saved_message), Snackbar.LENGTH_SHORT) - .show(); - } + binding.buttonChangeSaveConfiguration.setOnClickListener(v -> { + mConfigurationPresenter.saveConfig(); + Snackbar.make(binding.linearLayoutRoot, getString(R.string.saved_message), Snackbar.LENGTH_SHORT) + .show(); + }); + + binding.buttonTicksConfiguration.setOnClickListener(v -> + startActivity(TickSetupActivity.newActivity(this)) + ); - @OnClick(R.id.button_ticks_configuration) - void onClickTicksConfiguration() { - startActivity(TickSetupActivity.newActivity(this)); + binding.buttonAmbient.setOnClickListener(v -> + startActivity(ConfigurationAmbientActivity.newActivity(this)) + ); } - @OnClick(R.id.button_ambient) - void onClickAmbient() { - startActivity(ConfigurationAmbientActivity.newActivity(this)); + @Override + protected void onDestroy() { + super.onDestroy(); + mConfigurationPresenter.unregister(this); } @Override @@ -98,7 +87,7 @@ public void startFileChooser(Intent intent, int requestCode) { @Override public void showStatusMessage(String message) { - Snackbar.make(findViewById(R.id.linear_layout_root), message, Snackbar.LENGTH_SHORT); + Snackbar.make(findViewById(R.id.linear_layout_root), message, Snackbar.LENGTH_SHORT).show(); } @Override diff --git a/mobile/src/main/java/com/yalantis/watchface/view/configuration/ConfigurationAmbientActivity.java b/mobile/src/main/java/com/yalantis/watchface/view/configuration/ConfigurationAmbientActivity.java index 26aebb2..7a9dbba 100644 --- a/mobile/src/main/java/com/yalantis/watchface/view/configuration/ConfigurationAmbientActivity.java +++ b/mobile/src/main/java/com/yalantis/watchface/view/configuration/ConfigurationAmbientActivity.java @@ -3,26 +3,21 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.v7.widget.Toolbar; import com.yalantis.watchface.Constants; import com.yalantis.watchface.R; +import com.yalantis.watchface.databinding.ActivityAmbientBinding; import com.yalantis.watchface.presenter.configuration.ConfigurationPresenter; import com.yalantis.watchface.presenter.configuration.ConfigurationPresenterImpl; import com.yalantis.watchface.view.BaseGoogleApiActivity; -import butterknife.Bind; -import butterknife.ButterKnife; -import butterknife.OnClick; /** * @author andrewkhristyan on 10/27/15. */ -public class ConfigurationAmbientActivity extends BaseGoogleApiActivity implements ConfigurationMvpView{ - - @Bind(R.id.toolbar) - Toolbar toolbar; +public class ConfigurationAmbientActivity extends BaseGoogleApiActivity implements ConfigurationMvpView { + private ActivityAmbientBinding binding; private ConfigurationPresenter mConfigurationPresenter = new ConfigurationPresenterImpl(); public static Intent newActivity(Context context) { @@ -33,26 +28,25 @@ public static Intent newActivity(Context context) { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_ambient); - ButterKnife.bind(this); - setSupportActionBar(toolbar); + binding = ActivityAmbientBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + setSupportActionBar(binding.toolbar); setTitle(getString(R.string.main_label)); mConfigurationPresenter.register(this); - } - - @OnClick(R.id.button_change_background) - void onClickChangeBackgroundAmbient() { - mConfigurationPresenter.changeContentImage(isConnected, Constants.BACKGROUND_AMBIENT); - } - @OnClick(R.id.button_change_ambient_hour) - void onClickChangeHourTick() { - mConfigurationPresenter.changeContentImage(isConnected, Constants.HOUR_AMBIENT); + setupListners(); } - @OnClick(R.id.button_change_ambient_minute) - void onClickChangeMinuteTick() { - mConfigurationPresenter.changeContentImage(isConnected, Constants.MINUTE_AMBIENT); + private void setupListners() { + binding.buttonChangeBackground.setOnClickListener(v -> + mConfigurationPresenter.changeContentImage(isConnected, Constants.BACKGROUND_AMBIENT) + ); + binding.buttonChangeAmbientHour.setOnClickListener(v -> + mConfigurationPresenter.changeContentImage(isConnected, Constants.HOUR_AMBIENT) + ); + binding.buttonChangeAmbientMinute.setOnClickListener(v -> + mConfigurationPresenter.changeContentImage(isConnected, Constants.MINUTE_AMBIENT) + ); } @Override diff --git a/mobile/src/main/java/com/yalantis/watchface/view/ticks_options/TickSetupActivity.java b/mobile/src/main/java/com/yalantis/watchface/view/ticks_options/TickSetupActivity.java index 28a96e1..07254cf 100644 --- a/mobile/src/main/java/com/yalantis/watchface/view/ticks_options/TickSetupActivity.java +++ b/mobile/src/main/java/com/yalantis/watchface/view/ticks_options/TickSetupActivity.java @@ -3,17 +3,14 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.v7.widget.Toolbar; import android.widget.SeekBar; -import android.widget.TextView; import com.yalantis.watchface.App; import com.yalantis.watchface.R; +import com.yalantis.watchface.databinding.ActivityTicksConfigBinding; import com.yalantis.watchface.presenter.ticks_options.SeekbarPresenterImpl; import com.yalantis.watchface.view.BaseGoogleApiActivity; -import butterknife.Bind; -import butterknife.ButterKnife; /** * @author andrewkhristyan on 10/23/15. @@ -26,21 +23,7 @@ public class TickSetupActivity extends BaseGoogleApiActivity implements SeekbarU private SeekbarPresenterImpl mSeekBarPresenter = new SeekbarPresenterImpl(); - - @Bind(R.id.seek_bar_seconds) - SeekBar mSeekBarSeconds; - @Bind(R.id.text_view_seconds_offset) - TextView mTextViewSecondsOffset; - @Bind(R.id.seek_bar_minute) - SeekBar mSeekBarMinutes; - @Bind(R.id.text_view_minute_offset) - TextView mTextViewMinutesOffset; - @Bind(R.id.seek_bar_hour) - SeekBar mSeekBarHours; - @Bind(R.id.text_view_hours_offset) - TextView mTextViewHoursOffset; - @Bind(R.id.toolbar) - Toolbar toolbar; + private ActivityTicksConfigBinding binding; public static Intent newActivity(Context context) { Intent intent = new Intent(context, TickSetupActivity.class); @@ -50,27 +33,27 @@ public static Intent newActivity(Context context) { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_ticks_config); - ButterKnife.bind(this); + binding = ActivityTicksConfigBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); - setSupportActionBar(toolbar); + setSupportActionBar(binding.toolbar); setTitle(getString(R.string.main_label)); - mTextViewSecondsOffset.setText(String.valueOf(mSeekBarSeconds.getProgress())); - mTextViewMinutesOffset.setText(String.valueOf(mSeekBarMinutes.getProgress())); - mTextViewHoursOffset.setText(String.valueOf(mSeekBarHours.getProgress())); + binding.textViewSecondsOffset.setText(String.valueOf(binding.seekBarSeconds.getProgress())); + binding.textViewMinuteOffset.setText(String.valueOf(binding.seekBarMinute.getProgress())); + binding.textViewHoursOffset.setText(String.valueOf(binding.seekBarHour.getProgress())); mSeekBarPresenter.register(this); - mSeekBarSeconds.setOnSeekBarChangeListener(new SeekBarListener(SECONDS_KEY)); - mSeekBarHours.setOnSeekBarChangeListener(new SeekBarListener(HOURS_KEY)); - mSeekBarMinutes.setOnSeekBarChangeListener(new SeekBarListener(MINUTES_KEY)); + binding.seekBarSeconds.setOnSeekBarChangeListener(new SeekBarListener(SECONDS_KEY)); + binding.seekBarHour.setOnSeekBarChangeListener(new SeekBarListener(HOURS_KEY)); + binding.seekBarMinute.setOnSeekBarChangeListener(new SeekBarListener(MINUTES_KEY)); bindData(); } private void bindData() { - mSeekBarSeconds.setProgress(App.getConfigurationManager().getConfigItem(SECONDS_KEY)); - mSeekBarHours.setProgress(App.getConfigurationManager().getConfigItem(HOURS_KEY)); - mSeekBarMinutes.setProgress(App.getConfigurationManager().getConfigItem(MINUTES_KEY)); + binding.seekBarSeconds.setProgress(App.getConfigurationManager().getConfigItem(SECONDS_KEY)); + binding.seekBarHour.setProgress(App.getConfigurationManager().getConfigItem(HOURS_KEY)); + binding.seekBarMinute.setProgress(App.getConfigurationManager().getConfigItem(MINUTES_KEY)); } @Override @@ -86,12 +69,12 @@ public Context getContext() { @Override public void updateSeekBarLabel(String seekBarName, int offset) { - if(seekBarName.contains("seconds")) { - mTextViewSecondsOffset.setText(String.valueOf(offset)); - } else if(seekBarName.contains("hours")) { - mTextViewHoursOffset.setText(String.valueOf(offset)); + if (seekBarName.contains("seconds")) { + binding.textViewSecondsOffset.setText(String.valueOf(offset)); + } else if (seekBarName.contains("hours")) { + binding.textViewHoursOffset.setText(String.valueOf(offset)); } else { - mTextViewMinutesOffset.setText(String.valueOf(offset)); + binding.textViewMinuteOffset.setText(String.valueOf(offset)); } } diff --git a/mobile/src/main/res/layout/activity_ambient.xml b/mobile/src/main/res/layout/activity_ambient.xml index ad49f62..261e629 100644 --- a/mobile/src/main/res/layout/activity_ambient.xml +++ b/mobile/src/main/res/layout/activity_ambient.xml @@ -6,7 +6,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - + android:taskAffinity="" + android:exported="true"> @@ -29,6 +30,13 @@ android:name="com.google.android.wearable.watchface.preview_circular" android:resource="@drawable/icon" /> + + + @@ -36,9 +44,12 @@ - + - + + + diff --git a/wear/src/main/java/com/yalantis/watchface/sevrice/WearableListenerService.java b/wear/src/main/java/com/yalantis/watchface/sevrice/WearableListenerService.java index 6f098db..3d02413 100644 --- a/wear/src/main/java/com/yalantis/watchface/sevrice/WearableListenerService.java +++ b/wear/src/main/java/com/yalantis/watchface/sevrice/WearableListenerService.java @@ -2,7 +2,6 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.support.wearable.watchface.WatchFaceStyle; import com.google.android.gms.wearable.MessageEvent; import com.yalantis.watchface.events.WatchfaceUpdatedEvent; From dcf64fdd42761960038ec66ece42f3c9a0db62c1 Mon Sep 17 00:00:00 2001 From: dmorozov Date: Thu, 22 Sep 2022 13:23:15 +0300 Subject: [PATCH 2/2] Update version numbers - Update wear app version - Update mobile app version --- mobile/build.gradle | 4 ++-- wear/build.gradle | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mobile/build.gradle b/mobile/build.gradle index 80da773..5f0f486 100644 --- a/mobile/build.gradle +++ b/mobile/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.yalantis.watchface" minSdkVersion 18 targetSdkVersion 33 - versionCode 2 - versionName "1.0.1" + versionCode 3 + versionName "1.0.2" } buildTypes { release { diff --git a/wear/build.gradle b/wear/build.gradle index 2fe5625..8486fc8 100644 --- a/wear/build.gradle +++ b/wear/build.gradle @@ -9,8 +9,8 @@ android { applicationId "com.yalantis.watchface" minSdkVersion 20 targetSdkVersion 33 - versionCode 2 - versionName "1.0.1" + versionCode 3 + versionName "1.0.2" } buildTypes { release {