48 Commits
Author SHA1 Message Date
me bdedbf7f7e Merge pull request '1.0.4' (#6) from dev into main
Reviewed-on: #6
2026-10-01 21:25:14 -07:00
me 51f1d75f43 changelog, add what's been done so far. 2026-10-01 21:20:37 -07:00
me 288639514b build, move the responsibility of the version string to the file where the version is actually managed, so that strings.xml does not also need edited every update. 2026-10-01 21:20:12 -07:00
me 04bf1d8b47 icons, improve the cutting of the fake background layers. 2026-10-01 21:05:03 -07:00
me 63cc6b781d build, increment version. 2026-10-01 20:54:54 -07:00
me 29bf3d56c8 icons, fix to have a proper alpha channel, Lumo cheated us! ;) 2026-10-01 20:54:11 -07:00
me f67a61ff28 Merge pull request '1.0.3' (#5) from dev into main
Reviewed-on: #5
2026-10-01 19:09:34 -07:00
me 82e929f145 changelog, fix extra newline. 2026-10-01 19:08:28 -07:00
me 8c72161f7d changelog, add file. 2026-10-01 19:08:07 -07:00
me ecdbab6556 manifest, shrink the APK even more, update versionCode this time. 2026-10-01 19:01:41 -07:00
me 081ac97b39 Merge pull request '1.0.2' (#4) from dev into main
Reviewed-on: #4
2026-10-01 16:48:20 -07:00
me 75747aa9e9 main, try to use some clip art for the tab icons but still not working, letting it continue not working silently. 2026-10-01 16:46:00 -07:00
me 308c86440f manifest, ensure the proper icon is being used. 2026-10-01 16:45:03 -07:00
me 3e8941f892 icons, remove more unused DR and Figsy references. 2026-10-01 16:44:47 -07:00
me 6d39c65b71 icon, add a file generated by Lumo and use it as the new launcher. 2026-10-01 16:25:38 -07:00
me 7329eef9cc icons, remove accidental creates. 2026-10-01 16:09:54 -07:00
me 7d48b7564d main, replace icons for tabs, not showing up but also not failing. 2026-10-01 15:57:01 -07:00
me 9b317f38dc strings, fix version. 2026-10-01 15:52:53 -07:00
me b781167f8d gradle, take all the upgrade suggestions. 2026-10-01 15:47:20 -07:00
me b4dba91aae build, update version and fix proguard filename. 2026-10-01 15:44:14 -07:00
me 602c235522 icon, change back to DR, accidentally went to Figsy. 2026-10-01 15:42:40 -07:00
me c65b5c6714 manifest, ensure the generated icons are being used. 2026-10-01 15:42:24 -07:00
me 18e2577375 icons, refactor their locations to be consistent. 2026-10-01 15:42:04 -07:00
me 1b5f1771cb icon, fix for newer versions of Android. 2026-10-01 15:34:28 -07:00
me 833e0e2776 fdroid, add specifier to email and put the field in the app-specific section. 2026-09-29 07:16:35 -07:00
me 0afb15da25 Add more fdroid details while refactoring the file. 2026-07-04 14:59:33 -07:00
me e90f3e381e Update issue tracker to be proper HTTP link, use contact page. Change website page to go directly to the app. 2026-07-04 10:48:14 -07:00
me 7195e99cbb Merge pull request 'Add manifest file for self-hosted F-Droid repo.' (#3) from dev into main
Reviewed-on: #3
2026-07-04 10:18:20 -07:00
me 2dd6fc1002 Add manifest file for self-hosted F-Droid repo. 2026-07-04 10:16:17 -07:00
me 48e88484cc Merge pull request 'Remove BETA' (#2) from dev into main
Reviewed-on: #2
2025-07-20 19:56:07 -07:00
me 49f02cc85d Update the app version. 2025-07-20 19:52:48 -07:00
me 299e3f721f Remove BETA from the app name. 2025-07-20 19:52:01 -07:00
me a9b0dd43d6 Merge pull request 'Update Target SDK' (#1) from dev into main
Reviewed-on: #1
2025-07-20 19:37:12 -07:00
me e2b00eda83 Fix URL. 2025-07-20 19:31:46 -07:00
me 85cc437b91 Stay with the NoActionBar theme, even though the bar did not show up with DarkActionBar set. 2025-07-20 19:28:36 -07:00
me 35c2e800b3 Fix the app theme for both new and old devices. Giving up on showing the tab icons in place of having light vs dark theme. 2025-07-20 19:19:46 -07:00
me 255e2c46d4 Set the round icon attribute. 2025-07-20 19:16:52 -07:00
me 3a46ef7f2a Properly sit under the status bar. 2025-07-12 13:15:54 -07:00
me 10c0e1bfff Adjust newlines. 2025-07-12 13:15:37 -07:00
me 0627aca876 Remove code for Ads, were not in use anyways after falling out of Google Play guidelines. 2025-07-12 13:15:22 -07:00
me fe32d063c8 Working on getting the style to work properly, currently showing black bars due to old theme. 2025-07-12 13:12:38 -07:00
me 0ce4099348 Fix the location of the view by accounting for the action bar size. 2025-07-12 13:12:01 -07:00
me f0b4008efa Update version string and remove ad IDs. 2025-07-12 13:11:34 -07:00
me 8433966f37 Remove the compile lines and add what Infinite Timer is doing. 2025-07-12 13:11:03 -07:00
me 31a48209d2 Add trailing newline. 2025-07-12 13:10:30 -07:00
me 0e2ddd5fd3 Use the gradle settings which got Infinite Timer building correctly to see if it also works for this project. 2025-07-12 10:01:26 -07:00
me 8906d8d2f9 Update status and add link to upgrade article. 2025-07-12 09:55:58 -07:00
me 7a59c59d47 Allow app to be installed by current and future Android versions. 2025-07-11 13:15:44 -07:00
79 changed files with 344 additions and 204 deletions
+34
View File
@@ -0,0 +1,34 @@
# Changelog
## 1.0.4
**More Fixes**
- Give the new icon actual transparency, the previous grid pattern was fake.
- Fix the splash page version number and move the string to build.gradle.
## 1.0.3
**Minify File Size**
- Shrink the APK a bit better, even though it's already small.
- Increment `versionCode` so that F-Droid hopefully sees the app updated.
## 1.0.2
**Fix Icon Padding**
- Change icons and ensure they are installed properly for all versions of Android.
## 1.0.1
**Remove BETA From Title**
- Rename the app "Carb Up!" rather than "Carb Up! BETA".
## 1.0.0
**Update Android SDK Versions**
- Begin targeting SDK 36, which allows Android 15 devices to install the app without needing a command-line intervention.
- Modified theme to work for both old and new devices. Now appropriately handles dark vs light themes.
+8 -3
View File
@@ -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.
+26 -8
View File
@@ -1,26 +1,44 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
namespace "com.hyperling.carbupbeta"
compileSdkVersion 36
defaultConfig {
applicationId "com.hyperling.carbupbeta"
minSdkVersion 8
targetSdkVersion 23
versionCode 6
versionName "0.11"
minSdkVersion 14
targetSdkVersion 36
versionCode 11
versionName "1.0.4"
applicationVariants.all { variant ->
variant.resValue "string", "version_number", "-=" + variant.versionName + " =-"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
ndk {
//noinspection ChromeOsAbiSupport
abiFilters "arm64-v8a"
}
}
}
}
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 "com.android.support:appcompat-v7:28.0.0"
}
+5 -15
View File
@@ -7,40 +7,30 @@
<application
android:allowBackup="true"
android:icon="@drawable/dr_face_straight2_circle"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
android:theme="@style/CarbUp">
<activity
android:name=".Splash"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
android:exported="true"
android:screenOrientation="fullSensor">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Main"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Light.NoTitleBar"
android:screenOrientation="fullSensor"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<activity
android:name=".Tab1"
android:label="@string/app_name"
android:theme="@android:style/Theme.Light.NoTitleBar"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<activity
android:name=".Tab2"
android:label="@string/app_name"
android:theme="@android:style/Theme.Light.NoTitleBar"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<activity
android:name=".MySettings"
android:label="@string/app_name"
android:theme="@android:style/Theme.Light.NoTitleBar"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<activity
android:name=".Home"
Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

@@ -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
@@ -1,6 +1,7 @@
package com.hyperling.carbupbeta;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Color;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
@@ -56,7 +57,13 @@ public class List extends ListInfo{
setName(listInfo.getName());
// ========== Style the buttons ==========
// Color!
/* Color! */
int currentNightMode =
context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK
;
switch (currentNightMode) {
// Light Mode
case Configuration.UI_MODE_NIGHT_NO:
linearLayout.setBackgroundColor(Color.BLACK);
btnDelete.setBackgroundColor(Color.LTGRAY);
btnDelete.setTextColor(Color.BLACK);
@@ -64,6 +71,13 @@ public class List extends ListInfo{
btnEdit.setTextColor(Color.BLACK);
btnItem.setBackgroundColor(Color.WHITE);
btnItem.setTextColor(getRandomColor());
break;// Dark Mode
case Configuration.UI_MODE_NIGHT_YES:
// Night mode is active, we're using dark theme
btnItem.setBackgroundColor(Color.DKGRAY);
break;
}
/* */
// Size!
//textSize = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth()/30;
btnDelete.setTextSize(16); //textSize-10);
@@ -1,6 +1,7 @@
package com.hyperling.carbupbeta;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Color;
import android.widget.LinearLayout;
import android.view.WindowManager;
@@ -64,13 +65,26 @@ public class ListItem extends ListItemInfo {
setName(listItemInfo.getName ());
// ========== Style the buttons ==========
// Color!
/* Color! */
int currentNightMode =
context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK
;
switch (currentNightMode) {
// Light Mode
case Configuration.UI_MODE_NIGHT_NO:
linearLayout.setBackgroundColor(Color.BLACK);
btnDelete.setBackgroundColor(Color.LTGRAY);
btnDelete.setTextColor(Color.BLACK);
btnEdit.setBackgroundColor(Color.LTGRAY);
btnEdit.setTextColor(Color.BLACK);
btnItem.setBackgroundColor(Color.WHITE);
break;
// Dark Mode
case Configuration.UI_MODE_NIGHT_YES:
btnItem.setBackgroundColor(Color.DKGRAY);
break;
}
/* */
int[] colors = getColors(carbPerCal);
btnItem.setTextColor(Color.rgb(colors[0], colors[1], colors[2]));
// Size!
@@ -56,7 +56,7 @@ public class Main extends TabActivity {
// Tab1
TabHost.TabSpec createListSpec = tabHost.newTabSpec("Create List");
if (Build.VERSION.SDK_INT >= 21) {
createListSpec.setIndicator("Choose List", getDrawable(R.drawable.dr_face_straight2_circle));
createListSpec.setIndicator("Choose List", getDrawable(R.drawable.add));
}
else{
createListSpec.setIndicator("Choose List");
@@ -87,7 +87,7 @@ public class Main extends TabActivity {
// Settings/About Tab
TabHost.TabSpec mySettingsSpec = tabHost.newTabSpec("Settings");
if (Build.VERSION.SDK_INT >= 21) {
mySettingsSpec.setIndicator("Settings", getDrawable(R.drawable.figsy_grass_circle_small));
mySettingsSpec.setIndicator("Settings", getDrawable(R.drawable.settings));
}
else{
mySettingsSpec.setIndicator("Settings");
@@ -10,6 +10,7 @@ import android.widget.RelativeLayout;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
/**
* Created by ling on 1/1/16.
@@ -18,7 +19,7 @@ public class MySettingItem extends MySettingInfo{
private LinearLayout linearLayout;
private RelativeLayout relativeLayout;
Button btnItem;
TextView btnItem;
CheckBox checkBox;
private int textSize;
@@ -27,7 +28,7 @@ public class MySettingItem extends MySettingInfo{
// Instantiate the Views
linearLayout = new LinearLayout(context);
relativeLayout = new RelativeLayout(context);
btnItem = new Button(context);
btnItem = new TextView(context);
checkBox = new CheckBox(context);
// Give the views their required attributes (Wrap Content)
@@ -36,7 +37,7 @@ public class MySettingItem extends MySettingInfo{
LayoutParams item_lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
RelativeLayout.LayoutParams check_lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
lay_lp.setMargins(1, 1, 1, 1);
lay_lp.setMargins(4,4,4,4);
linearLayout.setLayoutParams(lay_lp);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
@@ -55,15 +56,17 @@ public class MySettingItem extends MySettingInfo{
setName(info.getName());
setEnabled(info.getEnabled());
// ========== Style the buttons ==========
// Color!
/* ========== Style the buttons ========== */
/* Color! * /
linearLayout.setBackgroundColor(Color.LTGRAY);
relativeLayout.setBackgroundColor(Color.LTGRAY);
relativeLayout.setBackgroundColor(Color.DKGRAY);
btnItem.setBackgroundColor(Color.LTGRAY);
btnItem.setTextColor(Color.BLACK);
/* */
// Size!
//textSize = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth()/30;
btnItem.setTextSize(24); // textSize);
btnItem.setPadding(4,4,4,4);
// Add the items to the layout!
relativeLayout.addView(checkBox);
@@ -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
@@ -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<List> lists = new ArrayList<List>();
@@ -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();
@@ -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<ListItem> items = new ArrayList<ListItem>();
@@ -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();
+31
View File
@@ -0,0 +1,31 @@
<!--
~ Copyright (C) 2026 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="#333333"
android:alpha="0.6">
<group android:scaleX="1.7142857"
android:scaleY="1.7142857"
android:translateX="-342.85715"
android:translateY="-342.85715">
<path
android:fillColor="@android:color/white"
android:pathData="M440,520L200,520L200,440L440,440L440,200L520,200L520,440L760,440L760,520L520,520L520,760L440,760L440,520Z"/>
</group>
</vector>
@@ -0,0 +1,31 @@
<!--
~ Copyright (C) 2026 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="#333333"
android:alpha="0.6">
<group android:scaleX="1.2"
android:scaleY="1.2"
android:translateX="-2.4"
android:translateY="-2.4">
<path
android:fillColor="@android:color/white"
android:pathData="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6s3.6,1.62 3.6,3.6S13.98,15.6 12,15.6z"/>
</group>
</vector>
Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 941 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="353"
android:viewportHeight="168.75">
<group android:scaleX="0.4776923"
android:scaleY="0.22835858"
android:translateX="92.18731"
android:translateY="65.480446">
<group android:translateY="133.59375">
<path android:pathData="M73.6875,-32.5625L87.1875,-32.5625Q86.140625,-22.859375,81.640625,-15.1875Q77.140625,-7.53125,68.90625,-3.0625Q60.6875,1.40625,48.375,1.40625Q39.375,1.40625,32.03125,-1.96875Q24.6875,-5.34375,19.40625,-11.5625Q14.140625,-17.796875,11.28125,-26.546875Q8.4375,-35.296875,8.4375,-46.0625L8.4375,-56.25Q8.4375,-67.015625,11.28125,-75.765625Q14.140625,-84.515625,19.515625,-90.765625Q24.890625,-97.03125,32.484375,-100.40625Q40.078125,-103.78125,49.578125,-103.78125Q61.171875,-103.78125,69.1875,-99.421875Q77.203125,-95.0625,81.671875,-87.359375Q86.140625,-79.671875,87.1875,-69.546875L73.6875,-69.546875Q72.703125,-76.71875,70.03125,-81.875Q67.359375,-87.046875,62.4375,-89.859375Q57.515625,-92.671875,49.578125,-92.671875Q42.75,-92.671875,37.578125,-90.0625Q32.421875,-87.46875,28.9375,-82.6875Q25.453125,-77.90625,23.6875,-71.21875Q21.9375,-64.546875,21.9375,-56.390625L21.9375,-46.0625Q21.9375,-38.53125,23.515625,-31.921875Q25.109375,-25.3125,28.34375,-20.3125Q31.578125,-15.328125,36.5625,-12.484375Q41.5625,-9.640625,48.375,-9.640625Q57.03125,-9.640625,62.15625,-12.375Q67.296875,-15.125,69.921875,-20.25Q72.5625,-25.390625,73.6875,-32.5625Z"
android:fillColor="#000000"/>
<path android:pathData="M143.71875,-102.375L143.71875,0L130.35938,0L130.35938,-102.375L143.71875,-102.375ZM176.625,-102.375L176.625,-91.265625L97.515625,-91.265625L97.515625,-102.375L176.625,-102.375Z"
android:fillColor="#000000"/>
<path android:pathData="M205.45312,-102.375L205.45312,0L191.89062,0L191.89062,-102.375L205.45312,-102.375ZM248.34375,-56.328125L248.34375,-45.21875L202.5,-45.21875L202.5,-56.328125L248.34375,-56.328125ZM255.3125,-102.375L255.3125,-91.265625L202.5,-91.265625L202.5,-102.375L255.3125,-102.375Z"
android:fillColor="#000000"/>
<path android:pathData="M330.45312,-102.375L343.95312,-102.375L343.95312,-33.125Q343.95312,-21.59375,338.8125,-13.921875Q333.6875,-6.265625,325.21875,-2.421875Q316.75,1.40625,306.82812,1.40625Q296.42188,1.40625,288.01562,-2.421875Q279.625,-6.265625,274.73438,-13.921875Q269.84375,-21.59375,269.84375,-33.125L269.84375,-102.375L283.28125,-102.375L283.28125,-33.125Q283.28125,-25.109375,286.23438,-19.90625Q289.1875,-14.703125,294.48438,-12.171875Q299.79688,-9.640625,306.82812,-9.640625Q313.9375,-9.640625,319.23438,-12.171875Q324.54688,-14.703125,327.5,-19.90625Q330.45312,-25.109375,330.45312,-33.125L330.45312,-102.375Z"
android:fillColor="#000000"/>
</group>
</group>
</vector>
+6 -12
View File
@@ -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">
<Button
android:layout_width="match_parent"
@@ -64,7 +65,8 @@
android:text="Why High Carb?"
android:textColor="@color/textPrimaryInverse"
android:textAllCaps="false"
android:id="@+id/btnWhyHCLF"/>
android:id="@+id/btnWhyHCLF"
style="?android:attr/buttonBarButtonStyle" />
<Button
android:layout_width="match_parent"
@@ -78,17 +80,9 @@
android:text="Why Vegan?"
android:textColor="@color/textAccentInverse"
android:textAllCaps="false"
android:id="@+id/btnWhyVegan"/>
android:id="@+id/btnWhyVegan"
style="?android:attr/buttonBarButtonStyle" />
</LinearLayout>
<com.google.android.gms.ads.AdView
android:id="@+id/adViewHome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight=".1"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_home">
</com.google.android.gms.ads.AdView>
</LinearLayout>
@@ -2,6 +2,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?android:actionBarSize"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
+3 -2
View File
@@ -2,12 +2,13 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:layout_marginTop="?android:actionBarSize">
<TabHost
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/title"
android:layout_alignParentTop="true"
android:id="@android:id/tabhost">
<RelativeLayout
-1
View File
@@ -3,7 +3,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+1 -13
View File
@@ -68,22 +68,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
ads:adSize="BANNER"
android:visibility="gone"
ads:adUnitId="@string/banner_ad_tab1">
</com.google.android.gms.ads.AdView>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_above="@+id/adView">
android:layout_alignParentTop="true">
<LinearLayout
android:layout_width="match_parent"
+1 -13
View File
@@ -97,22 +97,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
ads:adSize="BANNER"
android:visibility="gone"
ads:adUnitId="@string/banner_ad_tab2">
</com.google.android.gms.ads.AdView>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_above="@+id/adView">
android:layout_alignParentTop="true">
<LinearLayout
android:layout_width="match_parent"
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
</adaptive-icon>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
</adaptive-icon>
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#FFFFFF</color>
</resources>
+8 -13
View File
@@ -1,16 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Carb Up! BETA</string>
<string name="app_name">Carb Up!</string>
<string name="app_name_long">Carb Up! CTFU Helper</string>
<string name="app_name_short">Carb Up!</string>
<string name="action_settings">Settings</string>
<string name="title_activity_main">Main</string>
<string name="version_name">-=Version Banana=-</string>
<string name="version_number">-=Beta v0.10=-</string>
<!-- Responsibility moved to build.gradle file, where the actual number exists.
<string name="version_name">-= Version Mango =-</string>
<string name="version_number">-= v1.0.2 =-</string>
-->
<string name="author">Hyperling</string>
<string name="title_activity_home">Home</string>
<!-- Tab1 Views -->
<string name="list_header">Create a New List:</string>
@@ -52,14 +57,4 @@
<string name="delete_dialog_ok">Delete</string>
<string name="delete_dialog_cancel">Cancel</string>
<!-- Ads -->
<string name="banner_ad_unit_id">ca-app-pub-9712416021907617/1895014881</string>
<string name="banner_ad_tab1">ca-app-pub-9712416021907617/1895014881</string>
<string name="banner_ad_tab2">ca-app-pub-9712416021907617/6325214486</string>
<string name="banner_ad_home">ca-app-pub-9712416021907617/4055112081</string>
<string name="interstitial_ad_splash">ca-app-pub-9712416021907617/9278680882</string>
<string name="title_activity_home">Home</string>
</resources>
+30
View File
@@ -14,4 +14,34 @@
<item name="windowNoTitle">true</item>
</style>
<style name="OriginalTheme"
parent="@android:style/Theme.Light.NoTitleBar">
</style>
<style name="CarbUp" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<!--
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:colorForeground">@color/colorPrimary</item>
-->
</style>
<style name="CarbUpTesting" parent="@android:style/Theme.DeviceDefault">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<!--
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:colorForeground">@color/colorPrimary</item>
-->
</style>
</resources>
View File

Before

Width:  |  Height:  |  Size: 308 KiB

After

Width:  |  Height:  |  Size: 308 KiB

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.
+16 -3
View File
@@ -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:9.4.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()
}
}
tasks.register('clean', Delete) {
delete rootProject.buildDir
}
+16
View File
@@ -0,0 +1,16 @@
AuthorName: 'Chad Michael "Hyperling" Greenwood'
AuthorWebSite: 'https://hyperling.com/about/'
Donate: 'https://hyperling.com/donate/'
Liberapay: 'HyperVegan'
Bitcoin: 'bc1qsfe8dkvry3d34kztz449gkq67wq8fu2nkgfkh0'
Litecoin: 'ltc1qavmpu5d6ljntxsd6jj548m4yys83zwscl0dzkx'
IssueTracker: 'https://hyperling.com/contact/'
Categories:
- fdroid
- hyperling
- utilities
Name: Carb Up! Helper
AuthorEmail: 'me+carbup@hyperling.com'
Summary: 'Calculate cost-effective foods on a High Carb Low Fat lifestyle.'
SourceCode: 'https://git.hyperling.com/me/android-carb-up/'
WebSite: 'https://hyperling.com/apps/#ctfu'
+11
View File
@@ -16,3 +16,14 @@
# 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
android.builtInKotlin=false
android.defaults.buildfeatures.resvalues=true
android.dependency.useConstraints=true
android.enableAppCompileTimeRClass=false
android.newDsl=false
android.r8.optimizedResourceShrinking=false
android.r8.strictFullModeForKeepRules=false
android.sdk.defaultTargetSdkToCompileSdkIfUnset=false
android.uniquePackageNames=false
android.useAndroidX=false
android.usesSdkInManifest.disallowed=false
+13
View File
@@ -0,0 +1,13 @@
#This file is generated by updateDaemonJvm
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/7083b89563e7ce20943037b8cd2b8cc2/redirect
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/060bbb778a1f55ea705fdebd2ccfeab9/redirect
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/d09679dc60fe5aa05ef7d03efdefac20/redirect
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/ed4e3bf2f5e7c5d9aabc4cbd8acd555e/redirect
toolchainVendor=JETBRAINS
toolchainVersion=21
+2 -2
View File
@@ -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-9.8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
+3
View File
@@ -1 +1,4 @@
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0'
}
include ':app'