From 7a59c59d47f8513f7e015b86cf5417e7d59c5d31 Mon Sep 17 00:00:00 2001 From: Hyperling Date: Fri, 11 Jul 2025 13:15:44 -0700 Subject: [PATCH 01/15] Allow app to be installed by current and future Android versions. --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4784072..407b20f 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 + compileSdkVersion 36 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.hyperling.carbupbeta" minSdkVersion 8 - targetSdkVersion 23 + targetSdkVersion 36 versionCode 6 versionName "0.11" } -- 2.49.1 From 8906d8d2f9f5f31e497541dfab3bd909fbd22556 Mon Sep 17 00:00:00 2001 From: Hyperling Date: Sat, 12 Jul 2025 09:55:58 -0700 Subject: [PATCH 02/15] Update status and add link to upgrade article. --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1023d87..cc77db8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ # CarbUp Calculate cost-effectiveness of foods on a High Carb Low Fat lifestyle. -# Status -Working on open sourcing my free app that has existed on the Play Store for years. -This was my first app and will likely also be the first to get a Kotlin rewrite since it looks ancient on newer devices! ;D +## Status +No new features planned, only updates are to keep the app available on newer Android versions. + +## Update Notes + +### 2025-07-11 +(This article)[https://sijus.medium.com/resurrecting-a-5-year-old-android-app-a-developers-journey-59d8f5689e5b] + was very helpful in getting this app updated from SDK 25 to 36. \ No newline at end of file -- 2.49.1 From 0e2ddd5fd3b9e271287610af4f7ae1300395f879 Mon Sep 17 00:00:00 2001 From: Hyperling Date: Sat, 12 Jul 2025 10:01:26 -0700 Subject: [PATCH 03/15] Use the gradle settings which got Infinite Timer building correctly to see if it also works for this project. --- app/build.gradle | 9 ++++----- build.gradle | 19 ++++++++++++++++--- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 407b20f..2c690e9 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,19 +1,18 @@ apply plugin: 'com.android.application' android { + namespace "com.hyperling.carbupbeta" compileSdkVersion 36 - buildToolsVersion "23.0.2" - defaultConfig { applicationId "com.hyperling.carbupbeta" minSdkVersion 8 targetSdkVersion 36 - versionCode 6 - versionName "0.11" + versionCode 7 + versionName "1.0.0" } buildTypes { release { - minifyEnabled false + minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } diff --git a/build.gradle b/build.gradle index a6fcfe1..bfc1796 100755 --- a/build.gradle +++ b/build.gradle @@ -2,10 +2,18 @@ buildscript { repositories { - jcenter() + mavenCentral() + maven { + url 'https://jitpack.io' + } + google() + maven { + url 'https://maven.google.com/' + name 'Google' + } } dependencies { - classpath 'com.android.tools.build:gradle:1.5.0' + classpath 'com.android.tools.build:gradle:8.11.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -14,6 +22,11 @@ buildscript { allprojects { repositories { - jcenter() + mavenCentral() + google() } } + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0c71e76..fe52e99 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Apr 10 15:27:10 PDT 2013 +#Fri Jul 11 14:14:34 MST 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip -- 2.49.1 From 31a48209d27e3b9ea2a48f73e34e1075a64750dd Mon Sep 17 00:00:00 2001 From: Hyperling Date: Sat, 12 Jul 2025 13:10:30 -0700 Subject: [PATCH 04/15] Add trailing newline. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc77db8..4d00802 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,4 @@ No new features planned, only updates are to keep the app available on newer And ### 2025-07-11 (This article)[https://sijus.medium.com/resurrecting-a-5-year-old-android-app-a-developers-journey-59d8f5689e5b] - was very helpful in getting this app updated from SDK 25 to 36. \ No newline at end of file + was very helpful in getting this app updated from SDK 25 to 36. -- 2.49.1 From 8433966f37e5123f77b5bb37307b57098c8b1c5a Mon Sep 17 00:00:00 2001 From: Hyperling Date: Sat, 12 Jul 2025 13:11:03 -0700 Subject: [PATCH 05/15] Remove the compile lines and add what Infinite Timer is doing. --- app/build.gradle | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 2c690e9..a9ebcb3 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ android { compileSdkVersion 36 defaultConfig { applicationId "com.hyperling.carbupbeta" - minSdkVersion 8 + minSdkVersion 14 targetSdkVersion 36 versionCode 7 versionName "1.0.0" @@ -19,7 +19,16 @@ android { } dependencies { + /* compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.google.android.gms:play-services-ads:8.3.0' + */ + + implementation fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + // https://mvnrepository.com/artifact/com.android.support/appcompat-v7 + implementation group: 'com.android.support', name: 'appcompat-v7', version: '28.0.0' } -- 2.49.1 From f0b4008efaa970a800807778f43834336cf2312c Mon Sep 17 00:00:00 2001 From: Hyperling Date: Sat, 12 Jul 2025 13:11:34 -0700 Subject: [PATCH 06/15] Update version string and remove ad IDs. --- app/src/main/res/values/strings.xml | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 896923f..2c6f43b 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,11 +6,13 @@ Carb Up! Settings Main - -=Version Banana=- - -=Beta v0.10=- + -= Version Mango =- + -= v1.0.0 =- Hyperling + Home + Create a New List: @@ -52,14 +54,4 @@ Delete Cancel - - - ca-app-pub-9712416021907617/1895014881 - ca-app-pub-9712416021907617/1895014881 - ca-app-pub-9712416021907617/6325214486 - ca-app-pub-9712416021907617/4055112081 - ca-app-pub-9712416021907617/9278680882 - Home - - -- 2.49.1 From 0ce40993482a0a7a184924c96edfffa188f4d57e Mon Sep 17 00:00:00 2001 From: Hyperling Date: Sat, 12 Jul 2025 13:12:01 -0700 Subject: [PATCH 07/15] Fix the location of the view by accounting for the action bar size. --- app/src/main/res/layout/main.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml index 4fac3d9..44212b9 100755 --- a/app/src/main/res/layout/main.xml +++ b/app/src/main/res/layout/main.xml @@ -2,12 +2,13 @@ + android:layout_height="match_parent" + android:layout_marginTop="?android:actionBarSize"> Date: Sat, 12 Jul 2025 13:12:38 -0700 Subject: [PATCH 08/15] Working on getting the style to work properly, currently showing black bars due to old theme. --- app/src/main/AndroidManifest.xml | 17 ++++------------- app/src/main/res/values/styles.xml | 11 +++++++++++ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index edc1a42..e491ec0 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,12 +9,11 @@ android:allowBackup="true" android:icon="@drawable/dr_face_straight2_circle" android:label="@string/app_name" - android:theme="@style/AppTheme"> + android:theme="@style/CarbUp"> + android:exported="true" + android:screenOrientation="fullSensor"> @@ -23,24 +22,16 @@ true + + -- 2.49.1 From 0627aca8761fb0e3ec33382025eac4aad01eda71 Mon Sep 17 00:00:00 2001 From: Hyperling Date: Sat, 12 Jul 2025 13:15:22 -0700 Subject: [PATCH 09/15] Remove code for Ads, were not in use anyways after falling out of Google Play guidelines. --- .../java/com/hyperling/carbupbeta/Home.java | 21 +--------------- .../com/hyperling/carbupbeta/MySettings.java | 23 +---------------- .../java/com/hyperling/carbupbeta/Tab1.java | 25 ------------------- .../java/com/hyperling/carbupbeta/Tab2.java | 25 ------------------- app/src/main/res/layout/activity_home.xml | 18 +++++-------- app/src/main/res/layout/tab1.xml | 16 ++---------- app/src/main/res/layout/tab2.xml | 16 ++---------- 7 files changed, 12 insertions(+), 132 deletions(-) diff --git a/app/src/main/java/com/hyperling/carbupbeta/Home.java b/app/src/main/java/com/hyperling/carbupbeta/Home.java index 87afa90..aa13410 100755 --- a/app/src/main/java/com/hyperling/carbupbeta/Home.java +++ b/app/src/main/java/com/hyperling/carbupbeta/Home.java @@ -7,14 +7,12 @@ import android.os.Bundle; import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.view.Menu; +import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.Toast; -import com.google.android.gms.ads.AdRequest; -import com.google.android.gms.ads.AdView; - public class Home extends AppCompatActivity { Resources recs; @@ -56,23 +54,6 @@ public class Home extends AppCompatActivity { btnWhyVegan = (Button) findViewById(R.id.btnWhyVegan); //////////////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////////////// - // Finally, load ads >:) - if (Build.VERSION.SDK_INT >= 9) { - // Load an ad into the AdMob banner view. - AdView adView = (AdView) findViewById(R.id.adViewHome); - AdRequest adRequest = new AdRequest.Builder() - .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) - .addTestDevice("C6A494DC6E7C9AC29102694D48487084") // nexus 7 - .addTestDevice("B8B7561B850A9AB24E0D5B560FC50628") // Moto G - .addTestDevice("") // Cappy, even though it doesn't support ads - .setRequestAgent("android_studio:ad_template") - .build(); - adView.loadAd(adRequest); - } - //////////////////////////////////////////////////////////////////////////////////////////// } @Override diff --git a/app/src/main/java/com/hyperling/carbupbeta/MySettings.java b/app/src/main/java/com/hyperling/carbupbeta/MySettings.java index 1722806..fe424c1 100755 --- a/app/src/main/java/com/hyperling/carbupbeta/MySettings.java +++ b/app/src/main/java/com/hyperling/carbupbeta/MySettings.java @@ -17,7 +17,7 @@ public class MySettings extends Activity { Context context; LinearLayout settingsArea; - MySettingItem quickLoad, adsEnabled, rainbowLists, whiteOnBlack; + MySettingItem quickLoad, rainbowLists, whiteOnBlack; @Override protected void onCreate(Bundle savedInstanceState) { @@ -35,16 +35,13 @@ public class MySettings extends Activity { // Instantiate settings quickLoad = new MySettingItem(context, new MySettingInfo()); - adsEnabled = new MySettingItem(context, new MySettingInfo()); // Name them quickLoad.setName("Quick Load:"); - adsEnabled.setName("Ads Enabled:"); // Set the checkboxes dalih.open(); quickLoad.setEnabled(dalih.getQuickLoad()); - adsEnabled.setEnabled(dalih.getAdsEnabled()); dalih.close(); // Set the checkbox actions @@ -62,26 +59,8 @@ public class MySettings extends Activity { } }); - adsEnabled.btnItem.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dalih.setAdsEnabled(!dalih.getAdsEnabled()); - adsEnabled.checkBox.setChecked(dalih.getAdsEnabled()); - } - }); - adsEnabled.checkBox.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dalih.setAdsEnabled(adsEnabled.checkBox.isChecked()); - } - }); - // Throw them onto the screen settingsArea.addView(quickLoad.getView()); - - if (Build.VERSION.SDK_INT >= 9) { - settingsArea.addView(adsEnabled.getView()); - } } @Override diff --git a/app/src/main/java/com/hyperling/carbupbeta/Tab1.java b/app/src/main/java/com/hyperling/carbupbeta/Tab1.java index 416c41b..35bdc01 100755 --- a/app/src/main/java/com/hyperling/carbupbeta/Tab1.java +++ b/app/src/main/java/com/hyperling/carbupbeta/Tab1.java @@ -15,9 +15,6 @@ import android.widget.Toast; import java.util.ArrayList; -import com.google.android.gms.ads.AdRequest; -import com.google.android.gms.ads.AdView; - /** * Created by usb on 9/28/14. * @@ -35,7 +32,6 @@ public class Tab1 extends Activity{ Button btnCreate; LinearLayout layListArea; TextView tvLeft, tvRight, selectHeader; - AdView mAdView; // The lists! ArrayList lists = new ArrayList(); @@ -58,7 +54,6 @@ public class Tab1 extends Activity{ tvLeft = (TextView) findViewById(R.id.leftEditView); tvRight = (TextView) findViewById(R.id.rightEditView); selectHeader = (TextView) findViewById(R.id.selectListHeader); - mAdView = (AdView) findViewById(R.id.adView); return; } @@ -266,26 +261,6 @@ public class Tab1 extends Activity{ dalih.open(); - if (Build.VERSION.SDK_INT >= 9) { - if (dalih.getAdsEnabled()) { - if (mAdView.getVisibility() != View.VISIBLE) { - AdRequest adRequest = new AdRequest.Builder() - .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) - .addTestDevice("C6A494DC6E7C9AC29102694D48487084") // nexus 7 - .addTestDevice("B8B7561B850A9AB24E0D5B560FC50628") // Moto G - .addTestDevice("") // Cappy, even though it can't get ads - .build(); - mAdView.setVisibility(View.VISIBLE); - mAdView.loadAd(adRequest); - } - } - else{ - if (mAdView.getVisibility() == View.VISIBLE) { - mAdView.setVisibility(View.GONE); - } - } - } - setButtonInsert(); super.onResume(); diff --git a/app/src/main/java/com/hyperling/carbupbeta/Tab2.java b/app/src/main/java/com/hyperling/carbupbeta/Tab2.java index 7167174..12e052e 100755 --- a/app/src/main/java/com/hyperling/carbupbeta/Tab2.java +++ b/app/src/main/java/com/hyperling/carbupbeta/Tab2.java @@ -11,9 +11,6 @@ import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; -import com.google.android.gms.ads.AdRequest; -import com.google.android.gms.ads.AdView; - import java.util.ArrayList; /** @@ -35,7 +32,6 @@ public class Tab2 extends Activity{ LinearLayout layListArea; EditText txtName, txtCost, txtServings, txtCalories, txtCarbs, txtFiber; Button btnClear, btnAdd; - AdView mAdView; // List ArrayList items = new ArrayList(); @@ -61,7 +57,6 @@ public class Tab2 extends Activity{ txtFiber = (EditText) findViewById(R.id.etItemFiber); btnClear = (Button) findViewById(R.id.btnClear); btnAdd = (Button) findViewById(R.id.btnAddToList); - mAdView = (AdView) findViewById(R.id.adView); // Give the Buttons their power btnClear.setOnClickListener(new View.OnClickListener() { @@ -91,26 +86,6 @@ public class Tab2 extends Activity{ dalih.open(); - if (Build.VERSION.SDK_INT >= 9) { - if (dalih.getAdsEnabled()) { - if (mAdView.getVisibility() != View.VISIBLE) { - AdRequest adRequest = new AdRequest.Builder() - .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) - .addTestDevice("C6A494DC6E7C9AC29102694D48487084") // nexus 7 - .addTestDevice("B8B7561B850A9AB24E0D5B560FC50628") // Moto G - .addTestDevice("") // Cappy, even though it can't get ads - .build(); - mAdView.setVisibility(View.VISIBLE); - mAdView.loadAd(adRequest); - } - } - else{ - if (mAdView.getVisibility() == View.VISIBLE) { - mAdView.setVisibility(View.GONE); - } - } - } - setButtonInsert(); super.onResume(); diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index e0c5551..08d3430 100755 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -50,7 +50,8 @@ android:layout_height="wrap_content" android:orientation="horizontal" android:layout_weight=".45" - android:weightSum="1"> + android:weightSum="1" + style="?android:attr/buttonBarStyle">