Compare commits
	
		
			No commits in common. "main" and "d52e43502227b9ef613c346ba5232107580caa43" have entirely different histories.
		
	
	
		
			main
			...
			d52e435022
		
	
		
					 9 changed files with 82 additions and 118 deletions
				
			
		
							
								
								
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -1,4 +1,3 @@ | ||||||
|  | bin/ | ||||||
| gen/ | gen/ | ||||||
| *.keystore | *.keystore | ||||||
| out.apk |  | ||||||
| *.tmp |  | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| <?xml version="1.0" encoding="utf-8" ?> | <?xml version="1.0" encoding="utf-8" ?> | ||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|   package="org.er2.fireplace" |   package="org.er2.fireplace" | ||||||
|   android:versionCode="2" |   android:versionCode="1" | ||||||
|   android:versionName="1.01" |   android:versionName="1.0" | ||||||
|   > |   > | ||||||
| 
 | 
 | ||||||
|   <uses-sdk |   <uses-sdk | ||||||
|  | @ -10,8 +10,10 @@ | ||||||
|     android:targetSdkVersion="32" |     android:targetSdkVersion="32" | ||||||
|     /> |     /> | ||||||
| 
 | 
 | ||||||
|   <application |   <!-- if want on TV: | ||||||
|     android:banner="@drawable/banner" |     android:banner="@drawable/banner" | ||||||
|  |   --> | ||||||
|  |   <application | ||||||
|     android:icon="@drawable/icon" |     android:icon="@drawable/icon" | ||||||
|     android:label="Fireplace" |     android:label="Fireplace" | ||||||
|     > |     > | ||||||
|  |  | ||||||
							
								
								
									
										109
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										109
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -1,68 +1,89 @@ | ||||||
| NAME = Fireplace | NAME = Fireplace | ||||||
| CLASS= org.er2.fireplace | PROJ = org.er2.fireplace | ||||||
| 
 | 
 | ||||||
| KEY_PATH = debug.keystore | ifeq ($TV,1) | ||||||
| KEY_NAME = androiddebugkey |   SDK_VER = 24 | ||||||
| KEY_PASS = android |   SDK     = 24.0.3 | ||||||
|  | else | ||||||
|  |   SDK_VER = 19 | ||||||
|  |   SDK     = 19.1.0 | ||||||
|  | endif | ||||||
| 
 | 
 | ||||||
| SDK_VER = 24 | SDK_ROOT = ~/Android/Sdk | ||||||
| SDK     = 24.0.3 | JAVA_HOME:=$(if $(JAVA_HOME),$(JAVA_HOME),/usr/lib/jvm/java-1.11.0-openjdk-amd64) | ||||||
| 
 | 
 | ||||||
| SDK_ROOT  = ~/Android/Sdk |  | ||||||
| JAVA_HOME = /usr/lib/jvm/java-1.11.0-openjdk-amd64 |  | ||||||
| 
 |  | ||||||
| # Android framework, DO NOT REMOVE!
 |  | ||||||
| VEDBASE = $(SDK_ROOT)/platforms/android-$(SDK_VER)/android.jar | VEDBASE = $(SDK_ROOT)/platforms/android-$(SDK_VER)/android.jar | ||||||
| 
 | 
 | ||||||
| # Tools
 | ADB  = $(SDK_ROOT)/platform-tools/adb | ||||||
| ADB       = $(SDK_ROOT)/platform-tools/adb | AAPT = $(SDK_ROOT)/build-tools/$(SDK)/aapt | ||||||
| AAPT      = $(SDK_ROOT)/build-tools/$(SDK)/aapt | DX   = $(SDK_ROOT)/build-tools/$(SDK)/dx | ||||||
| DX        = $(SDK_ROOT)/build-tools/$(SDK)/dx | ZIPALIGN=$(SDK_ROOT)/build-tools/$(SDK)/zipalign | ||||||
| ZIPALIGN  = $(SDK_ROOT)/build-tools/$(SDK)/zipalign |  | ||||||
| JAVAC     = $(JAVA_HOME)/bin/javac | JAVAC     = $(JAVA_HOME)/bin/javac | ||||||
| JARSIGNER = $(JAVA_HOME)/bin/jarsigner | JARSIGNER = $(JAVA_HOME)/bin/jarsigner | ||||||
| 
 | 
 | ||||||
| SRC = $(shell find src/ -name '*.java') | PWD=$(shell pwd) | ||||||
| CLSS= $(SRC:src/%.java=gen/%.class) |  | ||||||
| 
 | 
 | ||||||
| all: build | OUT=$(PWD)/bin | ||||||
| build: out.apk | GEN=$(PWD)/gen | ||||||
|  | RES=$(PWD)/res | ||||||
|  | SRC=$(PWD)/src | ||||||
|  | #ASS=$(PWD)/assets
 | ||||||
| 
 | 
 | ||||||
| out.apk: AndroidManifest.xml gen/classes.dex $(KEY_PATH) | SRCS=$(shell find $(SRC) -name '*.java') | ||||||
| 	@$(AAPT) p -I $(VEDBASE) -fM AndroidManifest.xml -S res/ -F $@.tmp | CLSS=$(SRCS:$(SRC)/%.java=$(GEN)/%.class) | ||||||
| 	@cp gen/classes.dex . && $(AAPT) a $@.tmp classes.dex && rm -f classes.dex |  | ||||||
| 	@$(JARSIGNER) -keystore $(KEY_PATH) -storepass '$(KEY_PASS)' $@.tmp $(KEY_NAME) |  | ||||||
| 	@$(ZIPALIGN) -f 4 $@.tmp $@ |  | ||||||
| 
 | 
 | ||||||
| 	-@if [ ! -r "$@" ]; then mv -f $@.tmp $@; fi | KEY_PATH ?= debug.keystore | ||||||
|  | KEY_NAME ?= androiddebugkey | ||||||
|  | KEY_PASS ?= android | ||||||
| 
 | 
 | ||||||
| gen/classes.dex: prepare $(CLSS) | all: debug | ||||||
| 	-@echo removing R classes to economy some space |  | ||||||
| 	@find gen/ -name 'R.class' -exec rm {} \; |  | ||||||
| 	@find gen/ -name 'R$$*.class' -exec rm {} \; |  | ||||||
| 	@$(DX) --dex --output=$@ gen/ |  | ||||||
| 
 | 
 | ||||||
| ### Helpers
 | debug: | ||||||
|  | 	@$(MAKE) DEBUG=true -C $(PWD) build | ||||||
| 
 | 
 | ||||||
| prepare: res/* | release: | ||||||
| 	-@echo Generating R.java | 	@$(MAKE) -C $(PWD) build | ||||||
| 	@mkdir -p gen |  | ||||||
| 	@$(AAPT) p -I $(VEDBASE) -fm -M AndroidManifest.xml -J gen -S res |  | ||||||
| 
 | 
 | ||||||
| gen/%.class: src/%.java | APK=$(OUT)/$(NAME).apk | ||||||
|  | CDX=$(OUT)/classes.dex | ||||||
|  | 
 | ||||||
|  | build: $(APK) | ||||||
|  | $(APK): $(CDX) package sign zip | ||||||
|  | 	@if [ ! -f "$(APK)" ]; then mv $(OUT)/$(NAME).ap_ $(APK); fi | ||||||
|  | 	@$(RM) $(OUT)/$(NAME).ap_ | ||||||
|  | 
 | ||||||
|  | prepare: clean | ||||||
|  | 	@mkdir -p $(OUT) $(GEN) | ||||||
|  | 	@$(AAPT) > /dev/null 2>&1; if ! [ $$? -ne 0 ]; then echo YOU NEED TO install lib32stdc++6 lib32z1; exit 1; fi | ||||||
|  | 	@$(AAPT) p $(if $(DEBUG),--debug-mode,) -I $(VEDBASE) -fm -M $(PWD)/AndroidManifest.xml -J $(GEN) -S $(RES) | ||||||
|  | 
 | ||||||
|  | $(CDX): | ||||||
|  | #	dependencies is here to not re-build on every make
 | ||||||
|  | 	@make -C $(PWD) prepare $(CLSS) | ||||||
|  | 	@$(DX) --dex --output=$@ $(GEN) | ||||||
|  | 
 | ||||||
|  | $(GEN)/%.class: $(SRC)/%.java | ||||||
| 	-@echo Recompiling $@ | 	-@echo Recompiling $@ | ||||||
| 	@$(JAVAC) -classpath $(VEDBASE) -sourcepath 'src/:gen/' -d 'gen/' $< -source 1.7 -target 1.7 > /dev/null 2>&1 | 	@$(JAVAC) $(if $(DEBUG),-g,) -classpath $(VEDBASE) -sourcepath 'src:$(GEN)' -d '$(GEN)' -target 1.7 -source 1.7 $< | ||||||
|  | 
 | ||||||
|  | package: $(CDX) AndroidManifest.xml | ||||||
|  | 	@$(AAPT) p $(if $(DEBUG),--debug-mode,) -I $(VEDBASE) -f -M $(PWD)/AndroidManifest.xml -S $(RES) -F $(OUT)/$(NAME).ap_ # -A $(ASS) | ||||||
|  | 	@cd $(OUT) && $(AAPT) a $(NAME).ap_ classes.dex | ||||||
|  | 	 | ||||||
|  | sign: package $(KEY_PATH) | ||||||
|  | 	@$(JARSIGNER) -keystore $(KEY_PATH) -storepass '$(KEY_PASS)' $(OUT)/$(NAME).ap_ $(KEY_NAME) | ||||||
|  | 
 | ||||||
|  | zip: package | ||||||
|  | 	@$(ZIPALIGN) -f 4 $(OUT)/$(NAME).ap_ $(APK) | ||||||
| 
 | 
 | ||||||
| $(KEY_PATH): | $(KEY_PATH): | ||||||
| 	@yes | keytool -genkey -v -keystore $(KEY_PATH) -storepass '$(KEY_PASS)' -alias $(KEY_NAME) -keypass $(KEY_PASS) -keyalg RSA -keysize 2048 -validity 10000 | 	@yes | keytool -genkey -v -keystore $(KEY_PATH) -storepass '$(KEY_PASS)' -alias $(KEY_NAME) -keypass $(KEY_PASS) -keyalg RSA -keysize 2048 -validity 10000 | ||||||
| 
 | 
 | ||||||
| ### Tools
 |  | ||||||
| 
 |  | ||||||
| clean: | clean: | ||||||
| 	rm -rf gen/ classes.dex out.apk out.apk.tmp | 	@rm -rf $(OUT) $(GEN) | ||||||
| 
 | 
 | ||||||
| deploy: out.apk | run: $(OUT)/$(NAME).apk | ||||||
| 	-@$(ADB) uninstall $(CLASS) | 	-@$(ADB) uninstall $(PROJ) | ||||||
| 	@$(ADB) install $< | 	@$(ADB) install $^ | ||||||
| 	@$(ADB) shell monkey -p $(CLASS) -c android.intent.category.LAUNCHER 1 | 	@$(ADB) shell monkey -p $(PROJ) -c android.intent.category.LAUNCHER 1 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										21
									
								
								readme.org
									
										
									
									
									
								
							
							
						
						
									
										21
									
								
								readme.org
									
										
									
									
									
								
							|  | @ -6,24 +6,3 @@ It was written unoptimized, so it can be benchmark. | ||||||
| 
 | 
 | ||||||
| Also you can compile it for TV | Also you can compile it for TV | ||||||
| and even use as screensaver! | and even use as screensaver! | ||||||
| 
 |  | ||||||
| #+caption: Screensaver or /Daydream/ on TV |  | ||||||
| [[./scr.jpg]] |  | ||||||
| 
 |  | ||||||
| * Make this |  | ||||||
| 
 |  | ||||||
| To make an APK file, you need: |  | ||||||
| 
 |  | ||||||
| - Android SDK 24.0.3 |  | ||||||
| 
 |  | ||||||
| - OpenJDK (or other Java) JDK (full, not just JRE) |  | ||||||
| 
 |  | ||||||
| - GNU Make (as on Linux, no installed on macOS or other *BSD) |  | ||||||
| 
 |  | ||||||
| You maybe need to change some values in Makefile, |  | ||||||
| but on Debian no changes needed. |  | ||||||
| 
 |  | ||||||
| To build, just run ~make~. |  | ||||||
| 
 |  | ||||||
| If you need to install, connect your Android device |  | ||||||
| and run ~make deploy~. |  | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								scr.jpg
									
										
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								scr.jpg
									
										
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 224 KiB | 
|  | @ -1,19 +1,12 @@ | ||||||
| package org.er2.fireplace; | package org.er2.fireplace; | ||||||
| 
 | 
 | ||||||
| import android.service.dreams.DreamService; | import android.service.dreams.DreamService; | ||||||
| 
 | import android.widget.TextView; | ||||||
| /* Dream service to show fireplace on device |  | ||||||
|  * instead of just black screen (useful for TVs). |  | ||||||
|  * |  | ||||||
|  * (c) Er2 2022 <er2@dismail.de> |  | ||||||
|  * Zlib License |  | ||||||
|  */ |  | ||||||
| 
 | 
 | ||||||
| public class Dream extends DreamService { | public class Dream extends DreamService { | ||||||
|   @Override |   @Override | ||||||
|   public void onAttachedToWindow() { |   public void onAttachedToWindow() { | ||||||
|     super.onAttachedToWindow(); |     super.onAttachedToWindow(); | ||||||
| 
 |  | ||||||
|     setInteractive(false); |     setInteractive(false); | ||||||
|     setFullscreen(true); |     setFullscreen(true); | ||||||
|     setContentView(R.layout.dream); |     setContentView(R.layout.dream); | ||||||
|  |  | ||||||
|  | @ -3,34 +3,24 @@ package org.er2.fireplace; | ||||||
| import java.util.Random; | import java.util.Random; | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| 
 | 
 | ||||||
| /* This file is a model and some controller in MVC pattern |  | ||||||
|  * |  | ||||||
|  * (c) Er2 <er2@dismail.de> |  | ||||||
|  * Zlib License |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class Fireplace { | public class Fireplace { | ||||||
|   /* Characters and colors to use */ |  | ||||||
|   /* (yes I like comments in C style) */ |  | ||||||
|   private static String chr = "!\"#$%&*+,./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\\^_`~ "; |   private static String chr = "!\"#$%&*+,./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\\^_`~ "; | ||||||
|   private static int[] cols = { |   private static int[] cols = { | ||||||
|     /* 0x OPACITY hex |  | ||||||
|        Because Android uses opacity before hex |  | ||||||
|     */ |  | ||||||
|     0xFFfdcf58, |     0xFFfdcf58, | ||||||
|     0xFFf27d0c, |     0xFFf27d0c, | ||||||
|     0xFFf07f13, |     0xFFf07f13, | ||||||
|     0xFF800909, |     0xFF800909, | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   int fsize;               /* Font size */ |   int fsize; | ||||||
|   public int w, h, col;    /* width, height, columns */ |   public int w, h, col; | ||||||
|   ArrayList<Integer> fire; /* ArrayList is to allow resize */ |   ArrayList<Integer> fire; | ||||||
|   Random rand;             /* Some random :) */ |   Random rand; | ||||||
| 
 | 
 | ||||||
|   int ind, cid, hid;       /* column INDex, Color InDex, cHaracter InDex */ |   int ind; | ||||||
|  |   int cid; | ||||||
|  |   int hid; | ||||||
| 
 | 
 | ||||||
|   /* Pls no comments */ |  | ||||||
|   public Fireplace() { |   public Fireplace() { | ||||||
|     fire = new ArrayList<Integer>(); |     fire = new ArrayList<Integer>(); | ||||||
|     rand = new Random(); |     rand = new Random(); | ||||||
|  |  | ||||||
|  | @ -9,17 +9,10 @@ import android.util.AttributeSet; | ||||||
| 
 | 
 | ||||||
| import android.util.Log; | import android.util.Log; | ||||||
| 
 | 
 | ||||||
| /* Fireplace frontend |  | ||||||
|  * TODO: Optimize this.. |  | ||||||
|  * |  | ||||||
|  * (c) Er2 2022 <er2@dismail.de> |  | ||||||
|  * Zlib License |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class FireplaceView extends View { | public class FireplaceView extends View { | ||||||
|   Paint paint;   /* Android paint */ |   Paint paint; | ||||||
|   Fireplace fpl; /* Our backend */ |   Fireplace fpl; | ||||||
|   Bitmap bmp;    /* Screenshot of previous frame (thing to be optimized) */ |   Bitmap bmp; | ||||||
| 
 | 
 | ||||||
|   public FireplaceView(Context ctx, AttributeSet attrs) { |   public FireplaceView(Context ctx, AttributeSet attrs) { | ||||||
|     super(ctx, attrs); |     super(ctx, attrs); | ||||||
|  | @ -29,14 +22,9 @@ public class FireplaceView extends View { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   public void drawFire(Canvas canv) { |   public void drawFire(Canvas canv) { | ||||||
|     /* draw previous frame and apply transparency |  | ||||||
|        thing to be optimized |  | ||||||
|     */ |  | ||||||
|     canv.drawBitmap(bmp, 0, 0, null); |     canv.drawBitmap(bmp, 0, 0, null); | ||||||
|     paint.setColor(0x1E000000); |     paint.setColor(0x1E000000); | ||||||
|     canv.drawRect(0, 0, getWidth(), getHeight(), paint); |     canv.drawRect(0, 0, getWidth(), getHeight(), paint); | ||||||
| 
 |  | ||||||
|     /* going through columns */ |  | ||||||
|     for(int i = 0; i < fpl.col; i++) { |     for(int i = 0; i < fpl.col; i++) { | ||||||
|       fpl.next(); |       fpl.next(); | ||||||
|       paint.setColor(fpl.getCol()); |       paint.setColor(fpl.getCol()); | ||||||
|  | @ -51,7 +39,6 @@ public class FireplaceView extends View { | ||||||
| 
 | 
 | ||||||
|   @Override |   @Override | ||||||
|   public void onDraw(Canvas c) { |   public void onDraw(Canvas c) { | ||||||
|     /* TODO: To be optimized */ |  | ||||||
|     Bitmap bip = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); |     Bitmap bip = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); | ||||||
|     Canvas canv = new Canvas(bip); |     Canvas canv = new Canvas(bip); | ||||||
|     drawFire(canv); |     drawFire(canv); | ||||||
|  | @ -62,7 +49,6 @@ public class FireplaceView extends View { | ||||||
|    |    | ||||||
|   @Override |   @Override | ||||||
|   protected void onSizeChanged(int w, int h, int ow, int oh) { |   protected void onSizeChanged(int w, int h, int ow, int oh) { | ||||||
|     /* Set size directly */ |  | ||||||
|     fpl.setSize(w, h); |     fpl.setSize(w, h); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -3,12 +3,6 @@ package org.er2.fireplace; | ||||||
| import android.app.Activity; | import android.app.Activity; | ||||||
| import android.os.Bundle; | import android.os.Bundle; | ||||||
| 
 | 
 | ||||||
| /* Typical main activity file |  | ||||||
|  * |  | ||||||
|  * (c) Er2 2022 <er2@dismail.de> |  | ||||||
|  * Zlib License |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class MainActivity extends Activity { | public class MainActivity extends Activity { | ||||||
|   @Override |   @Override | ||||||
|   public void onCreate(Bundle savedInstanceState) { |   public void onCreate(Bundle savedInstanceState) { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue