diff --git a/.github/workflows/deploy-snapshot.yml b/.github/workflows/deploy-snapshot.yml index 89b593a..834bd5d 100644 --- a/.github/workflows/deploy-snapshot.yml +++ b/.github/workflows/deploy-snapshot.yml @@ -8,6 +8,16 @@ jobs: runs-on: ubuntu-latest if: ${{ !contains(github.event.head_commit.message, 'Prepare for release') }} steps: + - name: Set up Java + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'temurin' + - name: Show java + run: | + echo $JAVA_HOME + echo $PATH + java -version - uses: actions/checkout@v2 - name: Cache Gradle Files @@ -20,11 +30,6 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - - name: Set up Java - uses: actions/setup-java@v1 - with: - java-version: '17' - - name: Build run: ./gradlew build diff --git a/.github/workflows/merge-check.yml b/.github/workflows/merge-check.yml index f49d131..c3210d3 100644 --- a/.github/workflows/merge-check.yml +++ b/.github/workflows/merge-check.yml @@ -14,6 +14,16 @@ jobs: runs-on: ubuntu-latest if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} steps: + - name: Set up Java + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'temurin' + - name: Show java + run: | + echo $JAVA_HOME + echo $PATH + java -version - name: Checkout Repo uses: actions/checkout@v2 diff --git a/.github/workflows/publish-maven-central.yml b/.github/workflows/publish-maven-central.yml index 9145d26..e8c9cb1 100644 --- a/.github/workflows/publish-maven-central.yml +++ b/.github/workflows/publish-maven-central.yml @@ -8,12 +8,17 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Set up Java - uses: actions/setup-java@v1 + uses: actions/setup-java@v2 with: java-version: '17' + distribution: 'temurin' + - name: Show java + run: | + echo $JAVA_HOME + echo $PATH + java -version + - uses: actions/checkout@v2 - name: Build run: ./gradlew build diff --git a/build.gradle b/build.gradle index 7bd5e1d..82cb928 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.1' + classpath 'com.android.tools.build:gradle:8.7.2' } } @@ -24,8 +24,8 @@ subprojects { } ext { - compileSdkVersion = 31 - buildToolsVersion = '31.0.0' + compileSdkVersion = 35 + buildToolsVersion = '35.0.0' minSdkVersion = 21 - targetSdkVersion = 30 + targetSdkVersion = 35 } diff --git a/gradle.properties b/gradle.properties index 9676910..c233504 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,3 +20,5 @@ android.useAndroidX=true GROUP_ID=com.linkedin.shaky VERSION_NAME=3.0.7-SNAPSHOT +android.defaults.buildfeatures.buildconfig=true +android.nonFinalResIds=false diff --git a/gradle/publishing.gradle b/gradle/publishing.gradle index 6be83a2..d1a8039 100644 --- a/gradle/publishing.gradle +++ b/gradle/publishing.gradle @@ -4,7 +4,7 @@ apply plugin: 'signing' // Ideally AGP should provide sources and javadoc integration for their components: // https://issuetracker.google.com/issues/145670440 tasks.register("sourcesJar", Jar) { - classifier 'sources' + getArchiveClassifier() from android.sourceSets.main.java.srcDirs } @@ -16,7 +16,7 @@ tasks.register("javadoc", Javadoc) { tasks.register("javadocJar", Jar) { dependsOn javadoc - classifier 'javadoc' + getArchiveClassifier() from javadoc.destinationDir } @@ -26,10 +26,15 @@ afterEvaluate { publishing { publications { maven(MavenPublication) { - from components.release - artifact sourcesJar - artifact javadocJar + artifact(tasks.sourcesJar) { + classifier = 'sources' + } + artifact(tasks.javadocJar) { + classifier = 'javadoc' + } + + artifact('build/outputs/aar/shaky-release.aar') pom { name = 'Shaky' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 070cb70..19cfad9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/shaky-sample/build.gradle b/shaky-sample/build.gradle index 62ebf93..a666166 100644 --- a/shaky-sample/build.gradle +++ b/shaky-sample/build.gradle @@ -20,6 +20,7 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + namespace 'com.linkedin.android.shaky.app' } dependencies { diff --git a/shaky-sample/src/main/AndroidManifest.xml b/shaky-sample/src/main/AndroidManifest.xml index 548dc16..4c2b3fe 100644 --- a/shaky-sample/src/main/AndroidManifest.xml +++ b/shaky-sample/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + android:label="@string/app_name" + android:exported="true"> diff --git a/shaky-sample/src/main/java/com/linkedin/android/shaky/app/ShakyDemo.java b/shaky-sample/src/main/java/com/linkedin/android/shaky/app/ShakyDemo.java index 9b2d435..32ce882 100644 --- a/shaky-sample/src/main/java/com/linkedin/android/shaky/app/ShakyDemo.java +++ b/shaky-sample/src/main/java/com/linkedin/android/shaky/app/ShakyDemo.java @@ -18,6 +18,7 @@ import android.app.Activity; import android.app.Application; import android.graphics.Color; +import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.CheckBox; @@ -40,6 +41,7 @@ protected void onCreate(Bundle savedInstanceState) { int color = Color.rgb(random.nextInt(RGB_MAX), random.nextInt(RGB_MAX), random.nextInt(RGB_MAX)); tv.setBackgroundColor(color); + boolean isApi35OrAbove = Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM; findViewById(R.id.theme_checkbox).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -47,8 +49,8 @@ public void onClick(View v) { CheckBox checkBox = (CheckBox) v; ShakyApplication application = (ShakyApplication) getApplication(); if (checkBox.isChecked()) { - application.setShakyTheme(R.style.ShakyChristmasTheme); - application.setShakyPopupTheme(R.style.ShakyChristmasPopupTheme); + application.setShakyTheme(isApi35OrAbove ? R.style.ShakyChristmasTheme_Api35: R.style.ShakyChristmasTheme); + application.setShakyPopupTheme(isApi35OrAbove ? R.style.ShakyChristmasPopupTheme_Api35 : R.style.ShakyChristmasPopupTheme); } else { application.setShakyTheme(null); application.setShakyPopupTheme(null); diff --git a/shaky-sample/src/main/res/values-v35/styles_v35.xml b/shaky-sample/src/main/res/values-v35/styles_v35.xml new file mode 100644 index 0000000..04c5d15 --- /dev/null +++ b/shaky-sample/src/main/res/values-v35/styles_v35.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + diff --git a/shaky/build.gradle b/shaky/build.gradle index 7976fc7..3906f89 100644 --- a/shaky/build.gradle +++ b/shaky/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply from: "$rootDir/gradle/publishing.gradle" android { - compileSdkVersion rootProject.ext.compileSdkVersion + compileSdk rootProject.ext.compileSdkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -12,8 +12,6 @@ android { defaultConfig { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" } buildTypes { @@ -23,11 +21,12 @@ android { } } - lintOptions { - abortOnError true - } resourcePrefix 'shaky_' + namespace 'com.linkedin.android.shaky' + lint { + abortOnError true + } } dependencies { @@ -41,5 +40,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-core:3.12.4' - testImplementation 'org.robolectric:robolectric:4.9.2' + testImplementation 'org.robolectric:robolectric:4.14-beta-1' } diff --git a/shaky/src/main/AndroidManifest.xml b/shaky/src/main/AndroidManifest.xml index 4712010..1e386a0 100644 --- a/shaky/src/main/AndroidManifest.xml +++ b/shaky/src/main/AndroidManifest.xml @@ -14,8 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - + diff --git a/shaky/src/main/java/com/linkedin/android/shaky/FeedbackActivity.java b/shaky/src/main/java/com/linkedin/android/shaky/FeedbackActivity.java index d877244..31d62e1 100644 --- a/shaky/src/main/java/com/linkedin/android/shaky/FeedbackActivity.java +++ b/shaky/src/main/java/com/linkedin/android/shaky/FeedbackActivity.java @@ -20,6 +20,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -72,7 +73,8 @@ public static Intent newIntent(@NonNull Context context, public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setTheme(R.style.ShakyBaseTheme); + boolean isApi35OrAbove = Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM; + setTheme(isApi35OrAbove? R.style.ShakyBaseTheme_Api35: R.style.ShakyBaseTheme); setContentView(R.layout.shaky_feedback); diff --git a/shaky/src/main/java/com/linkedin/android/shaky/SendFeedbackDialog.java b/shaky/src/main/java/com/linkedin/android/shaky/SendFeedbackDialog.java index cc63767..ce0e20f 100644 --- a/shaky/src/main/java/com/linkedin/android/shaky/SendFeedbackDialog.java +++ b/shaky/src/main/java/com/linkedin/android/shaky/SendFeedbackDialog.java @@ -20,6 +20,7 @@ import android.app.DialogFragment; import android.content.DialogInterface; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.view.ContextThemeWrapper; @@ -61,10 +62,11 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // We have to pass some kind of theme to Alert.Builder's constructor, as the Context-only // constructor makes different assumptions about the theme passed to it final AlertDialog.Builder builder; + boolean isApi35OrAbove = Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM; if (theme != FeedbackActivity.MISSING_RESOURCE) { - builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), R.style.ShakyBasePopupTheme), theme); + builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), isApi35OrAbove? R.style.ShakyBasePopupTheme_Api35 : R.style.ShakyBasePopupTheme), theme); } else { - builder = new AlertDialog.Builder(getActivity(), R.style.ShakyBasePopupTheme); + builder = new AlertDialog.Builder(getActivity(), isApi35OrAbove? R.style.ShakyBasePopupTheme_Api35 : R.style.ShakyBasePopupTheme); } View popupView = View.inflate(builder.getContext(), diff --git a/shaky/src/main/res/values-v35/shaky_styles_v35.xml b/shaky/src/main/res/values-v35/shaky_styles_v35.xml new file mode 100644 index 0000000..6c1bfab --- /dev/null +++ b/shaky/src/main/res/values-v35/shaky_styles_v35.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + +