Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aa1df85bd5 | ||
|
|
02df431dac | ||
|
|
09db2cb6d8 | ||
|
|
1a95d7ad94 | ||
|
|
ae61c4f03f | ||
|
|
4c257e1033 | ||
|
|
65bdf9dd2b | ||
|
|
5cdc7653e9 | ||
|
|
0e44eaba4f | ||
|
|
dd78a1259e | ||
|
|
f7a462be22 | ||
|
|
8f5bd9a76a | ||
|
|
ae7474effd | ||
|
|
959573a4e9 | ||
|
|
9645510759 | ||
|
|
0dd5485080 | ||
|
|
1f3745d294 | ||
|
|
25c5df5688 |
No files matched your search
@@ -1,2 +1,3 @@
|
||||
# android-45-minute-rule
|
||||
|
||||
Provide a list of alarm suggestions based on a bedtime and tiredness rating.
|
||||
@@ -1,29 +1,26 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 28
|
||||
buildToolsVersion '28.0.3'
|
||||
|
||||
compileSdkVersion 36
|
||||
namespace "com.hyperling.apps.the45minuterule"
|
||||
defaultConfig {
|
||||
applicationId "com.hyperling.apps.the45minuterule"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 28
|
||||
versionCode 7
|
||||
versionName "1.06"
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 36
|
||||
versionCode 9
|
||||
versionName "1.0.8"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
//compile fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
testImplementation 'junit:junit:4.12'
|
||||
implementation group: 'com.android.support', name: 'appcompat-v7', version: '28.0.0'
|
||||
//compile 'com.google.android.gms:play-services-ads:17.1.2'
|
||||
implementation group: 'com.google.android.gms', name: 'play-services-ads', version: '17.1.2'
|
||||
//implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
implementation "androidx.appcompat:appcompat:1.8.0"
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
package com.hyperling.apps.the45minuterule;
|
||||
|
||||
import android.app.Application;
|
||||
import android.test.ApplicationTestCase;
|
||||
|
||||
/**
|
||||
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
|
||||
*/
|
||||
public class ApplicationTest extends ApplicationTestCase<Application> {
|
||||
public ApplicationTest() {
|
||||
super(Application.class);
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.hyperling.apps.the45minuterule">
|
||||
|
||||
<uses-sdk tools:overrideLibrary="com.google.android.gms,com.google.android.gms.ads" />
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<!-- Include required permissions for Google Mobile Ads to run. -->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
@@ -11,19 +8,15 @@
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/t45mr_icon_003"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize">
|
||||
|
||||
<!-- This meta-data tag is required to use Google Play Services. -->
|
||||
<meta-data
|
||||
android:name="com.google.android.gms.version"
|
||||
android:value="@integer/google_play_services_version" />
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
android:label="@string/app_name">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
@@ -31,10 +24,6 @@
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<!-- Include the AdActivity configChanges and theme. -->
|
||||
<activity
|
||||
android:name="com.google.android.gms.ads.AdActivity"
|
||||
android:theme="@android:style/Theme.Translucent" />
|
||||
<activity android:name=".Tips"/>
|
||||
</application>
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 61 KiB |
@@ -1,8 +1,5 @@
|
||||
package com.hyperling.apps.the45minuterule;
|
||||
|
||||
import com.google.android.gms.ads.AdRequest;
|
||||
import com.google.android.gms.ads.AdView;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.app.TimePickerDialog;
|
||||
import android.content.Intent;
|
||||
@@ -10,7 +7,7 @@ import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
//import android.support.v7.app.AppCompatActivity;
|
||||
import android.text.format.DateFormat;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
@@ -27,6 +24,8 @@ import android.widget.TextView;
|
||||
import android.widget.TimePicker;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Timer;
|
||||
@@ -150,35 +149,12 @@ public class MainActivity extends AppCompatActivity {
|
||||
});
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Finally, load ads >:)
|
||||
if ( adsEnabled) {
|
||||
if (Build.VERSION.SDK_INT >= 9) {
|
||||
// Load an ad into the AdMob banner view.
|
||||
AdView adView = (AdView) findViewById(R.id.adView);
|
||||
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
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
// Inflate the menu; this adds items to the action bar if it is present.
|
||||
getMenuInflater().inflate(R.menu.menu_main, menu);
|
||||
|
||||
MenuItem checkForNewArticles = menu.findItem(R.id.action_enable_ads);
|
||||
checkForNewArticles.setChecked(adsEnabled);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -194,30 +170,6 @@ public class MainActivity extends AppCompatActivity {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (id == R.id.action_enable_ads) {
|
||||
if (debug) Log.d(TAG, "MainActivity.onOptionsItemSelected: Before! adsEnabled=" + adsEnabled);
|
||||
adsEnabled = !adsEnabled;
|
||||
if (debug) Log.d(TAG, "MainActivity.onOptionsItemSelected: After! adsEnabled=" + adsEnabled);
|
||||
SharedPreferences.Editor editor = sharedPreferences.edit();
|
||||
editor.putBoolean(keyAdsEnabled, adsEnabled);
|
||||
editor.commit();
|
||||
|
||||
if (adsEnabled){
|
||||
Toast.makeText(this, "Thank you!", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
else{
|
||||
Toast.makeText(this, "Disabled ads", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
item.setChecked(adsEnabled);
|
||||
|
||||
Intent intent = new Intent(MainActivity.this, MainActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (id == R.id.action_settings) {
|
||||
Toast.makeText(this, "I can't do that, Jim", Toast.LENGTH_SHORT).show();
|
||||
return false;
|
||||
@@ -304,18 +256,16 @@ public class MainActivity extends AppCompatActivity {
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Get sleepiness of the user
|
||||
switch(radioGroup.getCheckedRadioButtonId()){
|
||||
case R.id.rb1:
|
||||
sleepiness = Integer.parseInt(recs.getString(R.string.rb_opt1_value));
|
||||
break;
|
||||
case R.id.rb2:
|
||||
sleepiness = Integer.parseInt(recs.getString(R.string.rb_opt2_value));
|
||||
break;
|
||||
case R.id.rb3:
|
||||
sleepiness = Integer.parseInt(recs.getString(R.string.rb_opt3_value));
|
||||
break;
|
||||
default:
|
||||
sleepiness = 0;
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
int checkedRadioButtonId = radioGroup.getCheckedRadioButtonId();
|
||||
if (checkedRadioButtonId == R.id.rb1) {
|
||||
sleepiness = Integer.parseInt(recs.getString(R.string.rb_opt1_value));
|
||||
} else if (checkedRadioButtonId == R.id.rb2) {
|
||||
sleepiness = Integer.parseInt(recs.getString(R.string.rb_opt2_value));
|
||||
} else if (checkedRadioButtonId == R.id.rb3) {
|
||||
sleepiness = Integer.parseInt(recs.getString(R.string.rb_opt3_value));
|
||||
} else {
|
||||
sleepiness = 0;
|
||||
}
|
||||
if (debug) System.out.println("Sleepiness is " + sleepiness);
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -2,12 +2,14 @@ package com.hyperling.apps.the45minuterule;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Color;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
//import android.support.v7.app.AppCompatActivity;
|
||||
import android.os.Bundle;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
public class Tips extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,23 +7,14 @@
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingTop="@dimen/activity_vertical_margin"
|
||||
tools:context="com.hyperling.apps.the45minuterule.MainActivity">
|
||||
|
||||
<!-- view for AdMob Banner Ad -->
|
||||
<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"
|
||||
ads:adUnitId="@string/main_banner_ad" />
|
||||
tools:context="com.hyperling.apps.the45minuterule.MainActivity"
|
||||
android:fitsSystemWindows="true">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_above="@id/adView"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:id="@+id/scrollView">
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingTop="@dimen/activity_vertical_margin"
|
||||
android:layout_marginTop="?android:actionBarSize"
|
||||
tools:context="com.hyperling.apps.the45minuterule.Tips">
|
||||
|
||||
<TextView
|
||||
|
||||
@@ -9,13 +9,6 @@
|
||||
android:title="@string/action_tips"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_enable_ads"
|
||||
android:orderInCategory="150"
|
||||
android:title="@string/action_enable_ads"
|
||||
app:showAsAction="never"
|
||||
android:checkable="true" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_about"
|
||||
android:orderInCategory="200"
|
||||
|
||||
@@ -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>
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#FFFFFF</color>
|
||||
</resources>
|
||||
@@ -1,15 +0,0 @@
|
||||
package com.hyperling.apps.the45minuterule;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* To work on unit tests, switch the Test Artifact in the Build Variants view.
|
||||
*/
|
||||
public class ExampleUnitTest {
|
||||
@Test
|
||||
public void addition_isCorrect() throws Exception {
|
||||
assertEquals(4, 2 + 2);
|
||||
}
|
||||
}
|
||||
@@ -2,11 +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:3.2.1'
|
||||
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
|
||||
@@ -15,11 +22,11 @@ buildscript {
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
google()
|
||||
}
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
tasks.register('clean', Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
||||
@@ -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: The 45 Minute Rule
|
||||
AuthorEmail: 'me+t45mr@hyperling.com'
|
||||
Summary: 'Determine a good bedtime for waking during light sleep.'
|
||||
SourceCode: 'https://git.hyperling.com/me/android-45-minute-rule/'
|
||||
WebSite: 'https://hyperling.com/apps/#sleep'
|
||||
@@ -16,3 +16,6 @@
|
||||
# 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
|
||||
|
||||
# Allow switch statements on R.id values.
|
||||
android.nonFinalResIds=false
|
||||
@@ -0,0 +1,12 @@
|
||||
#This file is generated by updateDaemonJvm
|
||||
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
|
||||
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
|
||||
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
|
||||
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
|
||||
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c2dd35c9d0aaf0ba6ad0791320f99dfc/redirect
|
||||
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/e5810bd7fd1f8a586644409d395a7e55/redirect
|
||||
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect
|
||||
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect
|
||||
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/7b3c4877c0749019e6805bb61e421497/redirect
|
||||
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/d76df094a9cbbabd3b08251f9e61444a/redirect
|
||||
toolchainVersion=25
|
||||
@@ -1,6 +1,6 @@
|
||||
#Sat Jan 12 07:07:15 CST 2019
|
||||
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-4.6-all.zip
|
||||
|
After Width: | Height: | Size: 674 KiB |
|
After Width: | Height: | Size: 20 KiB |