2010-01-07. 3.0
This commit is contained in:
parent
217c9a30fc
commit
222434ff8e
83
build.xml
Normal file
83
build.xml
Normal file
@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- You may freely edit this file. See commented blocks below for -->
|
||||
<!-- some examples of how to customize the build. -->
|
||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
|
||||
<project name="SEPlayerService_Lite" default="jar" basedir=".">
|
||||
<description>Builds, tests, and runs the project .</description>
|
||||
<import file="nbproject/build-impl.xml"/>
|
||||
<!--
|
||||
|
||||
There exist several targets which are by default empty and which can be
|
||||
used for execution of your tasks. These targets are usually executed
|
||||
before and after some main targets. They are:
|
||||
|
||||
pre-init: called before initialization of project properties
|
||||
post-init: called after initialization of project properties
|
||||
pre-preprocess: called before text preprocessing of sources
|
||||
post-preprocess: called after text preprocessing of sources
|
||||
pre-compile: called before source compilation
|
||||
post-compile: called after source compilation
|
||||
pre-obfuscate: called before obfuscation
|
||||
post-obfuscate: called after obfuscation
|
||||
pre-preverify: called before preverification
|
||||
post-preverify: called after preverification
|
||||
pre-jar: called before jar building
|
||||
post-jar: called after jar building
|
||||
pre-build: called before final distribution building
|
||||
post-build: called after final distribution building
|
||||
pre-clean: called before cleaning build products
|
||||
post-clean: called after cleaning build products
|
||||
|
||||
Example of pluging a my-special-task after the compilation could look like
|
||||
|
||||
<target name="post-compile">
|
||||
<my-special-task>
|
||||
<fileset dir="${build.classes.dir}"/>
|
||||
</my-special-task>
|
||||
</target>
|
||||
|
||||
For list of available properties check the imported
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
Other way how to customize the build is by overriding existing main targets.
|
||||
The target of interest are:
|
||||
|
||||
preprocess: preprocessing
|
||||
extract-libs: extraction of libraries and resources
|
||||
compile: compilation
|
||||
create-jad: construction of jad and jar manifest source
|
||||
obfuscate: obfuscation
|
||||
preverify: preverification
|
||||
jar: jar archive building
|
||||
run: execution
|
||||
debug: execution in debug mode
|
||||
build: building of the final distribution
|
||||
javadoc: javadoc generation
|
||||
|
||||
Example of overriding the target for project execution could look like
|
||||
|
||||
<target name="run" depends="init,jar">
|
||||
<my-special-exec jadfile="${dist.dir}/${dist.jad}"/>
|
||||
</target>
|
||||
|
||||
Be careful about correct dependencies when overriding original target.
|
||||
Again, for list of available properties which you can use check the target
|
||||
you are overriding in nbproject/build-impl.xml file.
|
||||
|
||||
A special target for-all-configs can be used to run some specific targets for
|
||||
all project configurations in a sequence. File nbproject/build-impl.xml
|
||||
already contains some "for-all" targets:
|
||||
|
||||
jar-all
|
||||
javadoc-all
|
||||
clean-all
|
||||
|
||||
Example of definition of target iterating over all project configurations:
|
||||
|
||||
<target name="jar-all">
|
||||
<property name="target.to.call" value="jar"/>
|
||||
<antcall target="for-all-configs"/>
|
||||
</target>
|
||||
|
||||
-->
|
||||
</project>
|
1368
nbproject/build-impl.xml
Normal file
1368
nbproject/build-impl.xml
Normal file
File diff suppressed because it is too large
Load Diff
8
nbproject/genfiles.properties
Normal file
8
nbproject/genfiles.properties
Normal file
@ -0,0 +1,8 @@
|
||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||
build.xml.data.CRC32=b8ca046e
|
||||
build.xml.script.CRC32=518797bb
|
||||
build.xml.stylesheet.CRC32=03eab09b
|
||||
nbproject/build-impl.xml.data.CRC32=b8ca046e
|
||||
nbproject/build-impl.xml.script.CRC32=a371a0b9
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=d670562e
|
7
nbproject/private/private.properties
Normal file
7
nbproject/private/private.properties
Normal file
@ -0,0 +1,7 @@
|
||||
#Thu Jan 07 23:51:00 EET 2010
|
||||
netbeans.user=C\:\\Users\\aNNiMON\\.netbeans\\6.7
|
||||
javadoc.preview=true
|
||||
deployment.counter=3
|
||||
config.active=
|
||||
deployment.number=0.0.2
|
||||
app-version.autoincrement=true
|
4
nbproject/private/private.xml
Normal file
4
nbproject/private/private.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
|
||||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/>
|
||||
</project-private>
|
141
nbproject/project.properties
Normal file
141
nbproject/project.properties
Normal file
@ -0,0 +1,141 @@
|
||||
abilities=MMAPI=1.1,SATSAJCRMI=1.0,SATSACRYPTO=1.0,JSR82=1.1,NOKIAUI=1.0,JSR226=1.0,MIDP=2.1,JSR229=1.1.0,SATSAAPDU=1.0,CLDC=1.1,JSR177=1.0,JSR179=1.0.1,J2MEWS=1.0,VSCL=2.1,WMA=2.0,JSR172=1.0,SEMC_EXT_JP8=1.0,ColorScreen,OBEX=1.0,NokiaUI=1.0,JSR238=1.0,JSR239=1.0,JSR211=1.0,JSR234=1.0,ScreenWidth=240,lib/semc_ext_jp8.jar=1.0,MascotV3=1.0,JSR75=1.0,JSR184=1.1,SATSAPKI=1.0,ScreenHeight=321,ScreenColorDepth=8,JSR180=1.0.1,J2MEXMLRPC=1.0,
|
||||
all.configurations=\
|
||||
application.args=
|
||||
application.description=
|
||||
application.description.detail=
|
||||
application.name=
|
||||
application.vendor=Vendor
|
||||
build.classes.dir=${build.dir}/compiled
|
||||
build.classes.excludes=**/*.java,**/*.form,**/*.class,**/.nbintdb,**/*.mvd,**/*.wsclient,**/*.vmd
|
||||
build.dir=build/${config.active}
|
||||
build.root.dir=build
|
||||
debug.level=debug
|
||||
deployment.copy.target=deploy
|
||||
deployment.instance=default
|
||||
deployment.jarurl=${dist.jar}
|
||||
deployment.method=NONE
|
||||
deployment.override.jarurl=false
|
||||
dist.dir=dist/${config.active}
|
||||
dist.jad=SEPlayerService.jad
|
||||
dist.jar=SEPlayerServiceLite.jar
|
||||
dist.javadoc.dir=${dist.dir}/doc
|
||||
dist.root.dir=dist
|
||||
extra.classpath=${file.reference.MultimediaServices_API.jar}
|
||||
file.reference.MultimediaServices_API.jar=../../NetBeans Libraries/MultimediaServices_API.jar
|
||||
filter.exclude.tests=false
|
||||
filter.excludes=newfile
|
||||
filter.more.excludes=**/overview.html,**/package.html
|
||||
filter.use.standard=true
|
||||
jar.compress=true
|
||||
javac.debug=true
|
||||
javac.deprecation=false
|
||||
javac.encoding=windows-1251
|
||||
javac.optimize=false
|
||||
javac.source=1.3
|
||||
javac.target=1.3
|
||||
javadoc.author=false
|
||||
javadoc.encoding=
|
||||
javadoc.noindex=false
|
||||
javadoc.nonavbar=false
|
||||
javadoc.notree=false
|
||||
javadoc.private=false
|
||||
javadoc.splitindex=true
|
||||
javadoc.use=true
|
||||
javadoc.version=false
|
||||
javadoc.windowtitle=
|
||||
libs.classpath=${file.reference.MultimediaServices_API.jar}
|
||||
main.class=
|
||||
main.class.class=applet
|
||||
manifest.apipermissions=
|
||||
manifest.file=manifest.mf
|
||||
manifest.jad=
|
||||
manifest.manifest=
|
||||
manifest.midlets=MIDlet-1: SEPSLite,/icon.png,SEPS\n
|
||||
manifest.others=MIDlet-Vendor: aNNiMON\nMIDlet-Name: SEPlayerServiceLite\nMIDlet-Version: 3.0\n
|
||||
manifest.pushregistry=
|
||||
name=SEPlayerService
|
||||
no.dependencies=false
|
||||
nokiaS80.application.icon=
|
||||
nsicom.application.monitorhost=
|
||||
nsicom.application.runremote=
|
||||
nsicom.application.runverbose=
|
||||
nsicom.remoteapp.location=\\My Documents\\NetBeans Applications
|
||||
nsicom.remotevm.location=\\Windows\\creme\\bin\\CrEme.exe
|
||||
obfuscated.classes.dir=${build.dir}/obfuscated
|
||||
obfuscation.custom=
|
||||
obfuscation.level=9
|
||||
obfuscator.destjar=${build.dir}/obfuscated.jar
|
||||
obfuscator.srcjar=${build.dir}/before-obfuscation.jar
|
||||
platform.active=Sony_Ericsson_SDK_2_5_0_4_for_the_Java_TM__ME_Platform_Emulator_
|
||||
platform.active.description=Sony Ericsson SDK 2.5.0.4 for the Java(TM) ME Platform(Emulator)
|
||||
platform.apis=JSR234-1.0,SATSA-APDU-1.0,JSR211-1.0,JSR75-1.0,J2ME-WS-1.0,J2ME-XMLRPC-1.0,JSR82-1.1,SATSA-JCRMI-1.0,SATSA-CRYPTO-1.0,JSR239-1.0,JSR179-1.0.1,MascotV3-1.0,JSR184-1.1,JSR238-1.0,MMAPI-1.1,NokiaUI-1.0,JSR229-1.1.0,SATSA-PKI-1.0,JSR180-1.0.1,JSR226-1.0,JSR177-1.0,SEMC_EXT_JP8-1.0,VSCL-2.0,VSCL-2.1,WMA-2.0,lib/semc_ext_jp8.jar
|
||||
platform.bootclasspath=${platform.home}/lib/mascotv3.jar:${platform.home}/lib/jsr226.jar:${platform.home}/lib/jsr256.jar:${platform.home}/lib/satsa-crypto.jar:${platform.home}/lib/jsr229.jar:${platform.home}/lib/jsr238.jar:${platform.home}/lib/j2me-xmlrpc.jar:${platform.home}/lib/jsr211.jar:${platform.home}/lib/vscl21.jar:${platform.home}/lib/satsa-jcrmi.jar:${platform.home}/lib/jsr082.jar:${platform.home}/lib/satsa-apdu.jar:${platform.home}/lib/jsr184.jar:${platform.home}/lib/nokiaext.jar:${platform.home}/lib/jsr239.jar:${platform.home}/lib/jsr75.jar:${platform.home}/lib/jsr179.jar:${platform.home}/lib/satsa-pki.jar:${platform.home}/lib/jsr180.jar:${platform.home}/lib/vscl.jar:${platform.home}/lib/mmapi.jar:${platform.home}/lib/j2me-ws.jar:${platform.home}/lib/wma20.jar:${platform.home}/lib/jsr234.jar:${platform.home}/lib/semc_ext_jp8.jar:${platform.home}/lib/cldcapi11.jar:${platform.home}/lib/midpapi20.jar
|
||||
platform.configuration=CLDC-1.1
|
||||
platform.device=SonyEricsson_JP8_240x320_Emu
|
||||
platform.fat.jar=true
|
||||
platform.profile=MIDP-2.0
|
||||
platform.trigger=CLDC
|
||||
platform.type=UEI-1.0.1
|
||||
preprocessed.dir=${build.dir}/preprocessed
|
||||
preverify.classes.dir=${build.dir}/preverified
|
||||
preverify.sources.dir=${build.dir}/preverifysrc
|
||||
resources.dir=resources
|
||||
ricoh.application.email=
|
||||
ricoh.application.fax=
|
||||
ricoh.application.icon=
|
||||
ricoh.application.target-jar=
|
||||
ricoh.application.telephone=
|
||||
ricoh.application.uid=00489600
|
||||
ricoh.application.version=
|
||||
ricoh.dalp.application-desc.auto-run=false
|
||||
ricoh.dalp.application-desc.energy-save=
|
||||
ricoh.dalp.application-desc.exec-auth=
|
||||
ricoh.dalp.application-desc.visible=true
|
||||
ricoh.dalp.argument=
|
||||
ricoh.dalp.codebase=
|
||||
ricoh.dalp.display-mode.color=true
|
||||
ricoh.dalp.display-mode.is-4line-support=false
|
||||
ricoh.dalp.display-mode.is-hvga-support=true
|
||||
ricoh.dalp.display-mode.is-vga-support=false
|
||||
ricoh.dalp.display-mode.is-wvga-support=false
|
||||
ricoh.dalp.information.abbreviation=
|
||||
ricoh.dalp.information.icon.basepath=
|
||||
ricoh.dalp.information.icon.location=
|
||||
ricoh.dalp.information.is-icon-used=true
|
||||
ricoh.dalp.install.destination=hdd
|
||||
ricoh.dalp.install.mode.auto=true
|
||||
ricoh.dalp.install.work-dir=hdd
|
||||
ricoh.dalp.is-managed=true
|
||||
ricoh.dalp.resources.dsdk.version=2.0
|
||||
ricoh.dalp.resources.jar.basepath=
|
||||
ricoh.dalp.resources.jar.version=
|
||||
ricoh.dalp.version=
|
||||
ricoh.icon.invert=false
|
||||
ricoh.platform.target.version=
|
||||
run.cmd.options=
|
||||
run.jvmargs=
|
||||
run.method=STANDARD
|
||||
run.security.domain=trusted
|
||||
run.use.security.domain=false
|
||||
savaje.application.icon=
|
||||
savaje.application.icon.focused=
|
||||
savaje.application.icon.small=
|
||||
savaje.application.uid=TBD
|
||||
savaje.bundle.base=
|
||||
savaje.bundle.debug=false
|
||||
savaje.bundle.debug.port=
|
||||
semc.application.caps=
|
||||
semc.application.icon=
|
||||
semc.application.icon.count=
|
||||
semc.application.icon.splash=
|
||||
semc.application.icon.splash.installonly=false
|
||||
semc.application.uid=E0892899
|
||||
semc.certificate.path=
|
||||
semc.private.key.password=
|
||||
semc.private.key.path=
|
||||
sign.alias=
|
||||
sign.enabled=false
|
||||
sign.keystore=
|
||||
src.dir=src
|
||||
use.emptyapis=true
|
||||
use.preprocessor=true
|
10
nbproject/project.xml
Normal file
10
nbproject/project.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://www.netbeans.org/ns/project/1">
|
||||
<type>org.netbeans.modules.kjava.j2meproject</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/j2me-project">
|
||||
<name>SEPlayerService_Lite</name>
|
||||
<minimum-ant-version>1.6</minimum-ant-version>
|
||||
</data>
|
||||
</configuration>
|
||||
</project>
|
306
src/Canv.java
306
src/Canv.java
@ -1,11 +1,8 @@
|
||||
|
||||
import com.nokia.mid.ui.DeviceControl;
|
||||
import com.sonyericsson.multimedia.*;
|
||||
import com.sonyericsson.multimedia.control.*;
|
||||
import java.io.IOException;
|
||||
import java.util.Calendar;
|
||||
import javax.microedition.io.Connector;
|
||||
import javax.microedition.lcdui.*;
|
||||
import javax.microedition.sensor.*;
|
||||
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
@ -18,10 +15,15 @@ import javax.microedition.sensor.*;
|
||||
*/
|
||||
public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
|
||||
//public static int softUp1 = 0xFF242424, softUp2 = 0x87282828, softDn1 = 0x87151515, softDn2 = 0xFF181818, background = 0x00,
|
||||
// line = 0x00BB00, text = 0x009900, valuet = 0x0000E6, inf = 0x992235;
|
||||
public static int softUp1, softUp2, softDn1, softDn2, background, line, text, valuet, inf;
|
||||
|
||||
private int w,h;
|
||||
private boolean lite, shift, axcel, vis;
|
||||
private boolean lite, vis;
|
||||
private int mode;
|
||||
private int accelPrevDelta = 0;
|
||||
|
||||
private Lyrics lrc;
|
||||
|
||||
private Image I, album;
|
||||
private Engine2 e2;
|
||||
@ -34,23 +36,17 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
private MediaControl mediaControl = null;
|
||||
private Media media = null;
|
||||
|
||||
private int[] channels = new int[3];
|
||||
private String[] channelNames = new String[3];
|
||||
private SensorConnection sensor;
|
||||
private String URL;
|
||||
|
||||
public Canv() {
|
||||
setFullScreenMode(true);
|
||||
thr = new Thread(this);
|
||||
thr.start();
|
||||
shift = lite = false;
|
||||
vis = axcel = true;
|
||||
lite = false;
|
||||
vis = true;
|
||||
mode = 0; //Ðåæèì ïëåéåðà
|
||||
w = getWidth();
|
||||
h = getHeight();
|
||||
I = Image.createImage(w, h);
|
||||
G = I.getGraphics();
|
||||
getInfo();
|
||||
service = MultimediaServiceManager.getMultimediaService("MediaPlayer");
|
||||
mediaControl = (MediaControl)service.getControl("MediaControl");
|
||||
mediaControl.addMediaControlListener(this);
|
||||
@ -59,17 +55,47 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
|
||||
protected void paint(Graphics g) {
|
||||
if(mode==0) drawPlayerCanvas(G);
|
||||
else if(mode==1) drawVisual(G);
|
||||
g.drawImage(I, 0, 0, 20);
|
||||
}
|
||||
|
||||
private void drawVisual(Graphics g) {
|
||||
g.setColor(background);
|
||||
g.fillRect(0, 0, w, h);
|
||||
g.setFont(medFont);
|
||||
if (media != null) {
|
||||
MetaData metaData = media.getMetaData();
|
||||
if (metaData != null) {
|
||||
Object data = metaData.getValue(MetaData.TITLE_KEY);
|
||||
if (data != null) drawTitle(g, (String) data);
|
||||
|
||||
if (album != null) {
|
||||
int ih = h-2*medFont.getHeight()-6;
|
||||
if(album.getHeight()>ih) album = Effects.Resize(album, ih*album.getWidth()/album.getHeight(), ih);
|
||||
g.drawImage(album, w/2, h/2, 3);
|
||||
}else if(vis){
|
||||
if(e2==null) {
|
||||
int ih = h-(2*medFont.getHeight())-6;
|
||||
e2 = new Engine2(w-6, ih);
|
||||
e2.setRun(true);
|
||||
}
|
||||
g.drawImage(e2.MainCanvas(), w/2, h/2, 3);
|
||||
}
|
||||
if(Rms.isLyric && lrc!=null) {
|
||||
drawCenter(g, lrc.get5Lines(media.getMediaTime()));
|
||||
}
|
||||
}
|
||||
}
|
||||
drawSoft(g, "Ìåíþ", "Âûõîä");
|
||||
}
|
||||
|
||||
private void drawPlayerCanvas(Graphics g) {
|
||||
g.setColor(0);
|
||||
g.setColor(background);
|
||||
g.fillRect(0, 0, w, h);
|
||||
drawTitle(g, "SEPS by aNNiMON");
|
||||
int fh = smallFont_b.getHeight()+2;
|
||||
int py = fh+fh/2;
|
||||
g.setFont(medFont);
|
||||
g.setColor(0x227A6F);
|
||||
if (media != null) {
|
||||
MetaData metaData = media.getMetaData();
|
||||
if (metaData != null) {
|
||||
@ -82,8 +108,10 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
data = metaData.getValue(MetaData.ARTIST_KEY);
|
||||
if (data != null) py = drawText(g, "Èñïîëíèòåëü: ", (String) data, py);
|
||||
|
||||
data = metaData.getValue("filename");
|
||||
if (data != null) py = drawText(g, "Ôàéë: ", (String) data, py);
|
||||
if(Rms.isLyric && lrc!=null) py = drawText(g, "", lrc.getLine(media.getMediaTime()), py);
|
||||
//else if(lrc==null) py = drawText(g, String.valueOf(media.getMediaTime()), "", py);
|
||||
//data = metaData.getValue(metaData.FILE_URI_KEY);
|
||||
//if (data != null)
|
||||
|
||||
if (album != null) {
|
||||
int ih = h-fh-2-py-20;
|
||||
@ -98,23 +126,23 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
g.drawImage(e2.MainCanvas(), w/2, py+15, 17);
|
||||
}
|
||||
|
||||
if(axcel) {
|
||||
g.setColor(0x992235);
|
||||
g.drawString("Accel", 2, py+15, 20);
|
||||
}
|
||||
if(vis) {
|
||||
g.setColor(0x992235);
|
||||
g.setColor(inf);
|
||||
g.drawString("Visual", 2, py+15+(smallFont_b.getHeight()+2), 20);
|
||||
}
|
||||
if(Rms.isLyric) {
|
||||
g.setColor(inf);
|
||||
g.drawString("Lyrics", 2, py+15+2*(smallFont_b.getHeight()+2), 20);
|
||||
}
|
||||
|
||||
float div = ((float)w - 10) / (float)media.getDuration();
|
||||
g.setColor(0x0000E6);
|
||||
g.setColor(valuet);
|
||||
g.fillRect(5, py, (int)(media.getMediaTime() * div), 10);
|
||||
g.setColor(0x009900);
|
||||
g.setColor(text);
|
||||
g.drawRect(5, py, w-10, 10);
|
||||
}
|
||||
}
|
||||
drawSoft(g, "Ñâåðíóòü", "Âûõîä");
|
||||
drawSoft(g, "Ìåíþ", "Âûõîä");
|
||||
}
|
||||
|
||||
public void keyPressed(int key) {
|
||||
@ -123,9 +151,11 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
pauseTrack();
|
||||
SEPS.midlet.destroyApp(true);
|
||||
}
|
||||
if(key==-6) SEPS.midlet.dsp.setCurrent(null);
|
||||
if(key==KEY_POUND) axcel=!axcel;
|
||||
if(key==-6) new Menu();
|
||||
if(key==KEY_STAR) vis=!vis;
|
||||
if(key==KEY_NUM0) Rms.isLyric=!Rms.isLyric;
|
||||
if(key==KEY_NUM1) rewind();
|
||||
if(key==KEY_NUM3) fastForward();
|
||||
switch(ga) {
|
||||
case LEFT:
|
||||
prevTrack();
|
||||
@ -134,8 +164,10 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
nextTrack();
|
||||
break;
|
||||
case UP:
|
||||
upMode();
|
||||
break;
|
||||
case DOWN:
|
||||
downMode();
|
||||
break;
|
||||
case FIRE:
|
||||
try {
|
||||
@ -152,54 +184,10 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
keyPressed(key);
|
||||
}
|
||||
|
||||
public int getDelta(int channel, int threshold) {
|
||||
int delta = 0;
|
||||
try {
|
||||
Data[] data = sensor.getData(1, -1, false, false, false);
|
||||
int drx = 0;
|
||||
|
||||
for (int i = 0; i < data.length; i++) {
|
||||
if (data[i].getChannelInfo().getName().equals(channelNames[channel])) {
|
||||
drx = data[i].getIntValues()[0];
|
||||
}
|
||||
}
|
||||
|
||||
delta = channels[channel] - drx;
|
||||
channels[channel] = drx;
|
||||
|
||||
if (Math.abs(delta) < threshold) {
|
||||
delta = 0;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
}
|
||||
|
||||
return delta;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
while (true) {
|
||||
try {
|
||||
final int delta = getDelta(0, 800);
|
||||
|
||||
if (delta != 0) {
|
||||
if (accelPrevDelta != 0 && (delta * accelPrevDelta) < 0) {
|
||||
accelPrevDelta = 0;
|
||||
} else {
|
||||
accelPrevDelta = delta;
|
||||
|
||||
Runnable runnable = new Runnable() {
|
||||
|
||||
public void run() {
|
||||
if (delta > 0 && axcel) {
|
||||
nextTrack();
|
||||
} else if (delta < 0 && axcel) {
|
||||
prevTrack();
|
||||
}
|
||||
}
|
||||
};
|
||||
(new Thread(runnable)).start();
|
||||
}
|
||||
}
|
||||
if(Rms.light) DeviceControl.setLights(0, 100);
|
||||
if(!vis) Thread.sleep(100);
|
||||
if (service != null) {
|
||||
repaint();
|
||||
@ -210,21 +198,24 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
}
|
||||
}
|
||||
|
||||
private void getInfo() {
|
||||
SensorInfo[] info = SensorManager.findSensors("acceleration", null);
|
||||
for (int i = 0; i < info.length; i++) {
|
||||
SensorInfo s = info[i];
|
||||
URL = s.getUrl();
|
||||
ChannelInfo[] ci = s.getChannelInfos();
|
||||
for (int r = 0; r < ci.length; r++) {
|
||||
ChannelInfo c = ci[r];
|
||||
channelNames[r] = c.getName();
|
||||
}
|
||||
}
|
||||
try {
|
||||
sensor = (SensorConnection) Connector.open(URL);
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
private void initLyric(Media med) {
|
||||
if (med == null) {return;}
|
||||
lrc = null;
|
||||
String at = "";
|
||||
String fl = "";
|
||||
MetaData metaData = med.getMetaData();
|
||||
if (metaData != null) {
|
||||
Object data = metaData.getValue(MetaData.ARTIST_KEY);
|
||||
if (data != null) at=at +(String)(data) + " - ";
|
||||
|
||||
data = metaData.getValue(MetaData.TITLE_KEY);
|
||||
if (data != null) at+=(String) data;
|
||||
|
||||
data = metaData.getValue(MetaData.FILE_URI_KEY);
|
||||
if (data != null) {fl=(String) data;fl=fl.substring(fl.lastIndexOf('/')+1, fl.lastIndexOf('.'));}
|
||||
|
||||
if(Lyrics.isExists(at)) lrc = new Lyrics(at);
|
||||
else if(Lyrics.isExists(fl)) lrc = new Lyrics(fl);
|
||||
}
|
||||
}
|
||||
|
||||
@ -244,7 +235,7 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
}
|
||||
}
|
||||
|
||||
private void pauseTrack() {
|
||||
public void pauseTrack() {
|
||||
try {
|
||||
mediaControl.pause();
|
||||
} catch (ControlException ex) {
|
||||
@ -260,31 +251,47 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
}
|
||||
}
|
||||
|
||||
public static String getTime(int mode) {
|
||||
String dd, mm, yy, _h, m, s;
|
||||
Calendar cal = Calendar.getInstance ();
|
||||
dd = String.valueOf (cal.get (Calendar.DAY_OF_MONTH));
|
||||
if (dd.length () == 1)
|
||||
dd = "0" + dd;
|
||||
mm = String.valueOf (cal.get (Calendar.MONTH) + 1);
|
||||
if (mm.length () == 1)
|
||||
mm = "0" + mm;
|
||||
yy = String.valueOf (cal.get (Calendar.YEAR));
|
||||
_h = String.valueOf (cal.get (Calendar.HOUR_OF_DAY));
|
||||
if (_h.length () == 1)
|
||||
_h = "0" + _h;
|
||||
m = String.valueOf (cal.get (Calendar.MINUTE));
|
||||
if (m.length () == 1)
|
||||
m = "0" + m;
|
||||
s = String.valueOf (cal.get (Calendar.SECOND));
|
||||
if (s.length () == 1)
|
||||
s = "0" + s;
|
||||
String time;
|
||||
if(mode==1) time = _h+":"+m+":"+s;
|
||||
else if(mode==2) time = (dd+"."+mm+"."+yy.substring(2));
|
||||
else time = (dd+"."+mm+"."+yy.substring(2)+" "+_h+":"+m+":"+s);
|
||||
return time;
|
||||
private void fastForward() {
|
||||
try {
|
||||
mediaControl.skip(10);
|
||||
} catch (ControlException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void rewind() {
|
||||
try {
|
||||
mediaControl.skip(-10);
|
||||
} catch (ControlException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// public static String getTime(int mode) {
|
||||
// String dd, mm, yy, _h, m, s;
|
||||
// Calendar cal = Calendar.getInstance ();
|
||||
// dd = String.valueOf (cal.get (Calendar.DAY_OF_MONTH));
|
||||
// if (dd.length () == 1)
|
||||
// dd = "0" + dd;
|
||||
// mm = String.valueOf (cal.get (Calendar.MONTH) + 1);
|
||||
// if (mm.length () == 1)
|
||||
// mm = "0" + mm;
|
||||
// yy = String.valueOf (cal.get (Calendar.YEAR));
|
||||
// _h = String.valueOf (cal.get (Calendar.HOUR_OF_DAY));
|
||||
// if (_h.length () == 1)
|
||||
// _h = "0" + _h;
|
||||
// m = String.valueOf (cal.get (Calendar.MINUTE));
|
||||
// if (m.length () == 1)
|
||||
// m = "0" + m;
|
||||
// s = String.valueOf (cal.get (Calendar.SECOND));
|
||||
// if (s.length () == 1)
|
||||
// s = "0" + s;
|
||||
// String time;
|
||||
// if(mode==1) time = _h+":"+m+":"+s;
|
||||
// else if(mode==2) time = (dd+"."+mm+"."+yy.substring(2));
|
||||
// else time = (dd+"."+mm+"."+yy.substring(2)+" "+_h+":"+m+":"+s);
|
||||
// return time;
|
||||
// }
|
||||
|
||||
public void mediaControlUpdate(int eventId, ControlEvent event) {
|
||||
try {
|
||||
@ -314,6 +321,7 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
album = null;
|
||||
}
|
||||
}
|
||||
if(Rms.isLyric) initLyric(this.media);
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
@ -322,11 +330,12 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
|
||||
private void drawTitle(Graphics g, String text) {
|
||||
int fh = medFont.getHeight()+4;
|
||||
g.setColor(0x0000E6);
|
||||
g.setColor(valuet);
|
||||
g.setFont(medFont);
|
||||
if(Rms.skinid==3) {text=toEmo(text);}
|
||||
g.drawString(text, w/2, 2, 17);
|
||||
drawRect(g, 0xFF242424, 0x87282828, 0, 0, w, fh/2);
|
||||
drawRect(g, 0x87151515, 0xFF181818, 0, fh/2, w, fh/2);
|
||||
drawRect(g, softUp1, softUp2, 0, 0, w, fh/2);
|
||||
drawRect(g, softDn1, softDn2, 0, fh/2, w, fh/2);
|
||||
}
|
||||
|
||||
public void drawRect(Graphics g, int color1, int color2, int x1, int y1, int w, int h) {
|
||||
@ -370,24 +379,50 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
|
||||
private void drawSoft(Graphics g, String lsoft, String rsoft) {
|
||||
int fh = medFont.getHeight()+2;
|
||||
g.setColor(0x009900);
|
||||
g.setColor(text);
|
||||
g.setFont(medFont);
|
||||
g.drawString(lsoft, 2, h-2, 36);
|
||||
g.drawString(rsoft, w-2, h-2, 40);
|
||||
drawRect(g, 0xFF242424, 0x87282828, 0, h-fh, w, fh/2);
|
||||
drawRect(g, 0x87151515, 0xFF181818, 0, h-fh/2, w, fh/2);
|
||||
drawRect(g, softUp1, softUp2, 0, h-fh, w, fh/2);
|
||||
drawRect(g, softDn1, softDn2, 0, h-fh/2, w, fh/2);
|
||||
}
|
||||
|
||||
private void drawCenter(Graphics g, String[] lines) {
|
||||
if(lines==null) return;
|
||||
Font sm = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);
|
||||
int fh = sm.getHeight()+2;
|
||||
g.setFont(sm);
|
||||
String v;
|
||||
drawRect(g, ((160<<24)| Canv.background),((160<<24)| Canv.background), 0, h/2-fh*2, w, fh*5);
|
||||
for(int i=0; i<lines.length; i++) {
|
||||
v=Rms.skinid==3 ? toEmo(lines[i]) : lines[i];
|
||||
if(i==2) {
|
||||
g.setColor(valuet);
|
||||
g.drawString(v, w/2, h/2+(fh*(i-2)), 17);
|
||||
g.setColor(text);
|
||||
g.drawString(v, w/2-1, h/2+(fh*(i-2))-1, 17);
|
||||
}else{
|
||||
g.setColor(text);
|
||||
g.drawString(v, w/2, h/2+(fh*(i-2)), 17);
|
||||
g.setColor(valuet);
|
||||
g.drawString(v, w/2-1, h/2+(fh*(i-2))-1, 17);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private int drawText(Graphics g, String name, String value, int y) {
|
||||
g.setColor(0x00BB00);
|
||||
g.setColor(line);
|
||||
g.drawLine(3, y-1, w-3, y-1);
|
||||
|
||||
g.setColor(0x009900);
|
||||
if(Rms.skinid==3) {value=toEmo(value); name=toEmo(name);}
|
||||
|
||||
g.setColor(text);
|
||||
g.setFont(smallFont_b);
|
||||
g.drawString(name, 5, y, 20);
|
||||
|
||||
int tw = 15+smallFont_b.stringWidth(name);
|
||||
g.setColor(0x0000E6);
|
||||
g.setColor(valuet);
|
||||
if(smallFont_b.stringWidth(value)>tw) {
|
||||
g.translate(tw-10, g.getTranslateY());
|
||||
g.drawString(value, 2, y, 20);
|
||||
@ -396,4 +431,31 @@ public class Canv extends Canvas implements Runnable, MediaControlListener {
|
||||
|
||||
return y+(smallFont_b.getHeight()+2);
|
||||
}
|
||||
|
||||
private String toEmo(String s) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
int i = 0;
|
||||
boolean up = true;
|
||||
while(i<s.length()) {
|
||||
String ch = s.substring(i, i+1);
|
||||
if(up) ch = ch.toUpperCase();
|
||||
else ch = ch.toLowerCase();
|
||||
sb.append(ch);
|
||||
i++;
|
||||
up=!up;
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private void downMode() {
|
||||
mode = 1-mode;
|
||||
e2=null;
|
||||
album = null;
|
||||
}
|
||||
|
||||
private void upMode() {
|
||||
mode = 1-mode;
|
||||
e2=null;
|
||||
album = null;
|
||||
}
|
||||
}
|
@ -220,14 +220,14 @@ public class Engine2 implements Runnable {
|
||||
}
|
||||
|
||||
private void CLS(Graphics g) {
|
||||
g.setColor(0x00);
|
||||
g.setColor(Canv.background);
|
||||
g.fillRect(0, 0, w, h);
|
||||
}
|
||||
|
||||
private void ACLS(Graphics g) {
|
||||
int[] pixelArray = new int[w * h];
|
||||
for (int io = 0; io < pixelArray.length; io++) {
|
||||
pixelArray[io] = (int) (100-K << 24) | (0 << 16) | (0 << 8) | 0;
|
||||
pixelArray[io] = (int) (100-K << 24) | Canv.background;
|
||||
}
|
||||
g.drawRGB(pixelArray, 0, w, 0, 0, w, h, true);
|
||||
}
|
||||
|
55
src/Info.java
Normal file
55
src/Info.java
Normal file
@ -0,0 +1,55 @@
|
||||
import java.io.DataInputStream;
|
||||
import javax.microedition.io.ConnectionNotFoundException;
|
||||
import javax.microedition.lcdui.*;
|
||||
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Info extends Form implements CommandListener {
|
||||
private Command back = new Command("Íàçàä", Command.BACK, 1);
|
||||
private StringItem Text;
|
||||
private Command site = new Command("Íà ñàéò", Command.HELP, 2);
|
||||
|
||||
|
||||
public Info() {
|
||||
super("Î ïðîãðàììå");
|
||||
String str = getText("/about");
|
||||
Text = new StringItem(null, str);
|
||||
append(Text);
|
||||
addCommand(site);
|
||||
addCommand(back);
|
||||
setCommandListener(this);
|
||||
}
|
||||
|
||||
public void commandAction(Command c, Displayable d) {
|
||||
if(c==back) new Menu();
|
||||
if(c==site) {
|
||||
try {
|
||||
String url = "http://annimon.wen.ru/";
|
||||
if(url.length()!=22) return;
|
||||
SEPS.midlet.platformRequest(url);
|
||||
} catch (ConnectionNotFoundException ex) {
|
||||
new Menu();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getText(String path) {
|
||||
DataInputStream dis = new DataInputStream(getClass().getResourceAsStream(path));
|
||||
StringBuffer strBuff = new StringBuffer();
|
||||
int ch = 0;
|
||||
try {
|
||||
while ((ch = dis.read()) != -1) {
|
||||
strBuff.append((char) ((ch >= 0xc0 && ch <= 0xFF) ? (ch + 0x350) : ch));
|
||||
}
|
||||
dis.close();
|
||||
} catch (Exception e) {e.printStackTrace();}
|
||||
return strBuff.toString();
|
||||
}
|
||||
}
|
233
src/Lyrics.java
Normal file
233
src/Lyrics.java
Normal file
@ -0,0 +1,233 @@
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Vector;
|
||||
import javax.microedition.io.*;
|
||||
import javax.microedition.io.file.FileConnection;
|
||||
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Lyrics {
|
||||
|
||||
private String[] lrc;
|
||||
private int[] time;
|
||||
|
||||
/**
|
||||
* Êîíñòðóêòîð êëàññà
|
||||
* @param lyricsname - èìÿ [Èñïîëíèòåëü] - [Çàãîëîâîê]
|
||||
* èëè [name]
|
||||
*/
|
||||
public Lyrics(String lyricsname) {
|
||||
String all = openLirics(lyricsname);
|
||||
lrc = threshold(all, false);
|
||||
String[] tm = threshold(all, true);
|
||||
all = null;
|
||||
time = getIntTime(tm);
|
||||
tm = null;
|
||||
System.gc();
|
||||
}
|
||||
|
||||
public String getLine(int t) {
|
||||
for(int i=0; i<time.length; i++) {
|
||||
try {
|
||||
if (t < time[i]) return lrc[i - 1];
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String[] get5Lines(int t) {
|
||||
int idx = 0;
|
||||
String[] l5 = new String[5];
|
||||
for(int i=0; i<time.length; i++) {
|
||||
try {
|
||||
if (t < time[i]) {idx=i-1; break;}
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if(idx>=2 && idx<lrc.length-2) {
|
||||
for(int i=0; i<5; i++) {
|
||||
l5[i]=lrc[idx-2+i];
|
||||
}
|
||||
}
|
||||
return l5;
|
||||
}
|
||||
|
||||
public static final boolean isExists(String lyricsname) {
|
||||
boolean r = false;
|
||||
FileConnection fc;
|
||||
try {
|
||||
r = (fc = (FileConnection) Connector.open("file:///" + Rms.lrcpath + lyricsname + ".lrc", Connector.READ)).exists();
|
||||
fc.close();
|
||||
} catch (Exception e) {
|
||||
r = false;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* Îòêðûâàåò òåêñò èç ÔÑ
|
||||
* @param lyricsname
|
||||
*/
|
||||
private String openLirics(String lyricsname) {
|
||||
FileConnection fc;
|
||||
StringBuffer sb = new StringBuffer();
|
||||
try {
|
||||
fc = (FileConnection) Connector.open("file:///" + Rms.lrcpath + lyricsname + ".lrc", Connector.READ);
|
||||
InputStream is = fc.openInputStream();
|
||||
|
||||
int ch = 0;
|
||||
while ((ch = is.read()) != -1) {
|
||||
sb.append((char) ((ch >= 0xc0 && ch <= 0xFF) ? (ch + 0x350) : ch));
|
||||
}
|
||||
is.close();
|
||||
fc.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ðàçáèåíèå òåêñòà íà ñòðîêè
|
||||
* @param text - âåñü òåêñò
|
||||
* @param time - ïîëó÷àòü âðåìÿ(true) èëè òåêñò ïåñíè(false)
|
||||
* @return
|
||||
*/
|
||||
private String[] threshold(String text, boolean time)
|
||||
{
|
||||
Vector v = new Vector();
|
||||
char c = '\n';
|
||||
int j = text.length();
|
||||
String s2 = "";
|
||||
for(int k = 0; k < j; k++)
|
||||
{
|
||||
int i = text.charAt(k);
|
||||
if(i == c)
|
||||
{
|
||||
if(s2.length() > 0)
|
||||
{
|
||||
if(time && isNumChar(s2.charAt(1))) v.addElement(s2.substring(0, s2.indexOf(']')+1).trim());
|
||||
else if(isNumChar(s2.charAt(1))) v.addElement(s2.substring(s2.lastIndexOf(']')+1).trim());
|
||||
s2 = "";
|
||||
}
|
||||
} else
|
||||
{
|
||||
s2 = s2 + String.valueOf((char)i);
|
||||
}
|
||||
}
|
||||
if(s2.length() > 0) {
|
||||
if(time && isNumChar(s2.charAt(1))) v.addElement(s2.substring(0, s2.indexOf(']')+1).trim());
|
||||
else if(isNumChar(s2.charAt(1))) v.addElement(s2.substring(s2.lastIndexOf(']')+1).trim());
|
||||
}
|
||||
String[] m;
|
||||
m = new String[v.size()];
|
||||
v.copyInto(m);
|
||||
return m;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ïðîâåðêà íà ñèìâîë, ñîäåðæàùèé ÷èñëî.
|
||||
* @param ch - ñèìâîë
|
||||
* @return
|
||||
*/
|
||||
private boolean isNumChar(char ch) {
|
||||
return ch >= '0' && ch <= '9';
|
||||
}
|
||||
|
||||
/**
|
||||
* Ïðåîáðàçîâûâàåò ñòðîêó âèäà [00:00.00] â ÷èñëî
|
||||
* @param tm
|
||||
* @return
|
||||
*/
|
||||
private int[] getIntTime(String[] tm) {
|
||||
int[] out = new int[tm.length];
|
||||
for(int i=0; i<tm.length; i++) {
|
||||
out[i]=parseInt(tm[i]);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ïðåîáðàçîâûâàåò ñòðîêó âèäà [00:00.00] â ÷èñëî
|
||||
* @param in
|
||||
* @return
|
||||
*/
|
||||
private int parseInt(String in) {
|
||||
int mm = Integer.parseInt(in.substring(1, in.indexOf(':')));
|
||||
int ss = Integer.parseInt(in.substring(in.indexOf(':')+1, in.indexOf('.')));
|
||||
//int ms = Integer.parseInt(in.substring(in.indexOf('.')+1, in.indexOf(']')));
|
||||
return ss+(mm*60);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ïðåîáðàçîâûâàåò âñå íåèíòåðíåò ññûëêè â íîðìàëüíûå, íàïðèìåð óáèðàÿ ïðîáåëû èëè ëèøíèå ñèìâîëû.
|
||||
* @param url - èñõîäíûé àäðåñ
|
||||
* @return - ïðàâèëüíûé àäðåñ íà âûõîäå
|
||||
*/
|
||||
private String urlName(String url) {
|
||||
if (url == null) return null;
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (int i = 0; i < url.length(); i++) {
|
||||
char ch = url.charAt(i);
|
||||
switch (ch) {
|
||||
default:
|
||||
if (ch < '\200') {
|
||||
sb.append(ch);
|
||||
break;
|
||||
}
|
||||
if (ch > '\177' && ch < '\u0800') {
|
||||
sb.append('%');
|
||||
sb.append(Integer.toHexString((ch >> 6 | 0xc0) + 256).substring(1));
|
||||
sb.append('%');
|
||||
sb.append(Integer.toHexString((ch & 0x3f | 0x80) + 256).substring(1));
|
||||
break;
|
||||
}
|
||||
if (ch > '\u07FF' && ch < '\0') {
|
||||
sb.append('%');
|
||||
sb.append(Integer.toHexString((ch >> 12 | 0xe0) + 256).substring(1));
|
||||
sb.append('%');
|
||||
sb.append(Integer.toHexString((ch >> 6 & 0x3f | 0x80) + 256).substring(1));
|
||||
sb.append('%');
|
||||
sb.append(Integer.toHexString((ch & 0x3f | 0x80) + 256).substring(1));
|
||||
}
|
||||
break;
|
||||
case 0: //'\0'
|
||||
case 32: sb.append("%20"); break;// ' '
|
||||
case 61: sb.append("%3d"); break;// '='
|
||||
case 43: sb.append("%2b"); break;// '+'
|
||||
case 39: sb.append("%27"); break;// '\''
|
||||
case 46: sb.append("%2E"); break;// '.'
|
||||
case 60: sb.append("%3c"); break;// '<'
|
||||
case 62: sb.append("%3e"); break;// '>'
|
||||
case 35: sb.append("%23"); break;// '#'
|
||||
case 37: sb.append("%25"); break;// '%'
|
||||
case 38: sb.append("%26"); break;// '&'
|
||||
case 123:sb.append("%7b"); break;// '{'
|
||||
case 125:sb.append("%7d"); break;// '}'
|
||||
case 92: sb.append("%5c"); break;// '\\'
|
||||
case 94: sb.append("%5e"); break;// '^'
|
||||
case 126:sb.append("%73"); break;// '~'
|
||||
case 91: sb.append("%5b"); break;// '['
|
||||
case 93: sb.append("%5d"); break;// ']'
|
||||
case 58: sb.append("%3A"); break;// ':'
|
||||
case 47: sb.append("%2F"); break;// '/'
|
||||
case 63: sb.append("%3F"); break;// '?'
|
||||
case 45: sb.append("%2D"); break;// '-'
|
||||
case 33: sb.append("%21"); break;// '!'
|
||||
case 59: sb.append("%3B"); break;// ';'
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
38
src/Menu.java
Normal file
38
src/Menu.java
Normal file
@ -0,0 +1,38 @@
|
||||
import javax.microedition.lcdui.*;
|
||||
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Menu implements CommandListener {
|
||||
|
||||
private List ls;
|
||||
private Display dsp;
|
||||
|
||||
public Menu() {
|
||||
String[] m = new String[] {"Âåðíóòüñÿ", "Íàñòðîéêè", "Î ïðîãðàììå", "Ñâåðíóòü", "Âûõîä"};
|
||||
ls = new List("Ìåíþ", List.IMPLICIT, m, null);
|
||||
ls.setCommandListener(this);
|
||||
dsp = SEPS.midlet.dsp;
|
||||
dsp.setCurrent(ls);
|
||||
}
|
||||
|
||||
public void commandAction(Command c, Displayable d) {
|
||||
if(c.equals(List.SELECT_COMMAND)) {
|
||||
int i = ls.getSelectedIndex();
|
||||
switch(i) {
|
||||
case 0: dsp.setCurrent(SEPS.midlet.cnv); break;
|
||||
case 1: dsp.setCurrent(new Options()); break;
|
||||
case 2: dsp.setCurrent(new Info()); break;
|
||||
case 3: dsp.setCurrent(null); break;
|
||||
case 4: SEPS.midlet.destroyApp(true); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
90
src/Options.java
Normal file
90
src/Options.java
Normal file
@ -0,0 +1,90 @@
|
||||
import javax.microedition.lcdui.*;
|
||||
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Options extends Form implements CommandListener {
|
||||
|
||||
private Command back,ok;
|
||||
private TextField az, un, cc, hp;
|
||||
private ChoiceGroup skin, cRC;
|
||||
|
||||
|
||||
public Options() {
|
||||
super("Íàñòðîéêè");
|
||||
back = new Command("Íàçàä", Command.BACK, 3);
|
||||
ok = new Command("Ok", Command.OK, 1);
|
||||
az = new TextField("Ïàïêà ñ òåêñòàìè:", Rms.lrcpath, 256, TextField.ANY);
|
||||
// un = new TextField(L.str[L.noc]+":", String.valueOf(P.undo), 2, TextField.NUMERIC);
|
||||
// cc = new TextField(L.str[L.cch]+":", "000000", 6, TextField.ANY);
|
||||
// hp = new TextField(L.str[L.ach], String.valueOf(P.heap), 2, TextField.ANY);
|
||||
skin = new ChoiceGroup ("Ñêèíû", ChoiceGroup.EXCLUSIVE);
|
||||
cRC = new ChoiceGroup ("", ChoiceGroup.MULTIPLE);
|
||||
appendOther();
|
||||
StrokeStyle();
|
||||
}
|
||||
|
||||
public void commandAction(Command c, Displayable d) {
|
||||
if (c==back) {new Menu();}
|
||||
|
||||
if ((c==ok || c==List.SELECT_COMMAND)) {
|
||||
new Skin(Rms.skinid = skin.getSelectedIndex());
|
||||
Rms.lrcpath=az.getString();
|
||||
// P.az=Integer.parseInt(az.getString());
|
||||
// P.curcolor = getHexValue(cc.getString());
|
||||
// P.heap = Integer.parseInt(hp.getString());
|
||||
Rms.light = cRC.isSelected(0);
|
||||
// P.dsI = cRC.isSelected(1);
|
||||
// P.isUndo = cRC.isSelected(2);
|
||||
// P.isEfView = cRC.isSelected(3);
|
||||
// P.isLight = cRC.isSelected(4);
|
||||
// P.BOC = cRC.isSelected(5);
|
||||
// P.undo=Integer.parseInt(un.getString());
|
||||
// Editor.isteps = new Image[P.undo];
|
||||
// Editor.ist=0;
|
||||
new Menu();
|
||||
}
|
||||
}
|
||||
|
||||
private void StrokeStyle() {
|
||||
append(skin);
|
||||
append(az);
|
||||
// append(cc);
|
||||
// append(hp);
|
||||
append(cRC);
|
||||
// append(un);
|
||||
addCommand(ok);
|
||||
addCommand(back);
|
||||
setCommandListener(this);
|
||||
SEPS.midlet.dsp.setCurrent(this);
|
||||
}
|
||||
|
||||
private void appendOther() {
|
||||
skin.append("Ñòàíäàðòíûé SEPS", null);
|
||||
skin.append("ProPaintMobile", null);
|
||||
skin.append("Ãîòè÷åñêèé", null);
|
||||
skin.append("Ýìî", null);
|
||||
skin.append("SEclub.ORG", null);
|
||||
skin.append("aNNiMON Forum", null);
|
||||
skin.setSelectedIndex(Rms.skinid, true);
|
||||
|
||||
cRC.append("Ïîñòîÿííàÿ ïîäñâåòêà", null);
|
||||
// cRC.append(L.str[L.stias], null);
|
||||
// cRC.append(L.str[L.aplca], null);
|
||||
// cRC.append(L.str[L.prwef], null);
|
||||
// cRC.append(L.str[120], null);
|
||||
// cRC.append(L.str[123], null);
|
||||
cRC.setSelectedIndex(0, Rms.light);
|
||||
// cRC.setSelectedIndex(1, P.dsI);
|
||||
// cRC.setSelectedIndex(2, P.isUndo);
|
||||
// cRC.setSelectedIndex(3, P.isEfView);
|
||||
// cRC.setSelectedIndex(4, P.isLight);
|
||||
// cRC.setSelectedIndex(5, P.BOC);
|
||||
}
|
||||
}
|
76
src/Rms.java
Normal file
76
src/Rms.java
Normal file
@ -0,0 +1,76 @@
|
||||
|
||||
import java.io.*;
|
||||
import javax.microedition.rms.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Rms {
|
||||
|
||||
private static final String rmsName = "SEPSLite";
|
||||
private static RecordStore rmsStore;
|
||||
public static boolean firstStart = true; // ïåðâûé ñòàðò
|
||||
public static int skinid = 0;
|
||||
public static boolean isLyric = true;
|
||||
public static String lrcpath = "c:/music/Lyrics/";
|
||||
public static boolean light = false;
|
||||
/**
|
||||
* Ñîõðàíåíèå íàñòðîåê
|
||||
*/
|
||||
public static void saveOptions() {
|
||||
if (rmsStore != null) {
|
||||
byte[] options = null;
|
||||
try {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
DataOutputStream dos = new DataOutputStream(baos);
|
||||
dos.writeBoolean(firstStart);
|
||||
dos.writeInt(skinid);
|
||||
dos.writeBoolean(isLyric);
|
||||
dos.writeUTF(lrcpath);
|
||||
dos.writeBoolean(light);
|
||||
dos.flush();
|
||||
options = baos.toByteArray();
|
||||
dos.close();
|
||||
rmsStore.setRecord(1, options, 0, options.length);
|
||||
} catch (InvalidRecordIDException ridex) {
|
||||
try {
|
||||
rmsStore.addRecord(options, 0, options.length);
|
||||
} catch (RecordStoreException ex) {
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
}
|
||||
}
|
||||
if (rmsStore != null) {
|
||||
try {
|
||||
rmsStore.closeRecordStore();
|
||||
rmsStore = null;
|
||||
} catch (RecordStoreException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Âîññòàíîâèòü íàñòðîéêè
|
||||
*/
|
||||
public static void restoreOptions() {
|
||||
try {
|
||||
rmsStore = RecordStore.openRecordStore(rmsName, true);
|
||||
} catch (RecordStoreException ex) {
|
||||
rmsStore = null;
|
||||
}
|
||||
if (rmsStore != null) {
|
||||
try {
|
||||
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(rmsStore.getRecord(1)));
|
||||
firstStart = dis.readBoolean();
|
||||
skinid = dis.readInt();
|
||||
isLyric = dis.readBoolean();
|
||||
lrcpath = dis.readUTF();
|
||||
light = dis.readBoolean();
|
||||
dis.close();
|
||||
} catch (Exception ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,20 +13,27 @@ public class SEPS extends MIDlet {
|
||||
|
||||
public static SEPS midlet;
|
||||
public Display dsp;
|
||||
public Canv cnv;
|
||||
|
||||
public SEPS() {
|
||||
midlet = this;
|
||||
Rms.restoreOptions();
|
||||
new Skin(Rms.skinid);
|
||||
cnv = new Canv();
|
||||
dsp = Display.getDisplay(this);
|
||||
}
|
||||
|
||||
public void startApp() {
|
||||
dsp.setCurrent(new Canv());
|
||||
dsp.setCurrent(cnv);
|
||||
}
|
||||
|
||||
public void pauseApp() {
|
||||
}
|
||||
|
||||
public void destroyApp(boolean unco) {
|
||||
if(Rms.firstStart) Rms.firstStart=false;
|
||||
Rms.saveOptions();
|
||||
cnv.pauseTrack();
|
||||
notifyDestroyed();
|
||||
}
|
||||
}
|
||||
|
106
src/Skin.java
Normal file
106
src/Skin.java
Normal file
@ -0,0 +1,106 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Skin {
|
||||
|
||||
public Skin(int skin) {
|
||||
switch(skin) {
|
||||
case 0: //default
|
||||
setSEPS();
|
||||
break;
|
||||
case 1: //PPM
|
||||
setPPM();
|
||||
break;
|
||||
case 2: //Gothic
|
||||
setGothic();
|
||||
break;
|
||||
case 3: //Emo
|
||||
setEmo();
|
||||
break;
|
||||
case 4: //SEclub
|
||||
setSEclub();
|
||||
break;
|
||||
case 5: //SEclub
|
||||
setaNM();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void setSEPS() {
|
||||
Canv.softUp1 = 0xFF242424;
|
||||
Canv.softUp2 = 0x87282828;
|
||||
Canv.softDn1 = 0x87151515;
|
||||
Canv.softDn2 = 0xFF181818;
|
||||
Canv.background = 0x00;
|
||||
Canv.line = 0x00BB00;
|
||||
Canv.text = 0x009900;
|
||||
Canv.valuet = 0x0000E6;
|
||||
Canv.inf = 0x992235;
|
||||
}
|
||||
|
||||
private void setPPM() {
|
||||
Canv.softUp1 = 0xFF3477d5;
|
||||
Canv.softUp2 = 0x883477d5;
|
||||
Canv.softDn1 = 0x8812396f;
|
||||
Canv.softDn2 = 0xFF12396f;
|
||||
Canv.background = 0xFFFFFF;
|
||||
Canv.line = 0x0064A8;
|
||||
Canv.text = 0x282828;
|
||||
Canv.valuet = 0x296321;
|
||||
Canv.inf = 0xA2DBF9;
|
||||
}
|
||||
|
||||
private void setGothic() {
|
||||
Canv.softUp1 = 0xFF141414;
|
||||
Canv.softUp2 = 0x87181818;
|
||||
Canv.softDn1 = 0x87151515;
|
||||
Canv.softDn2 = 0xFF181818;
|
||||
Canv.background = 0x00;
|
||||
Canv.line = 0x6D6D6D;
|
||||
Canv.text = 0x595959;
|
||||
Canv.valuet = 0x666666;
|
||||
Canv.inf = 0x474747;
|
||||
}
|
||||
|
||||
private void setEmo() {
|
||||
Canv.softUp1 = 0xFF1E1012;
|
||||
Canv.softUp2 = 0x8887466D;
|
||||
Canv.softDn1 = 0x88512C31;
|
||||
Canv.softDn2 = 0xFFCE6BA6;
|
||||
Canv.background = 0xFF879B;
|
||||
Canv.line = 0xFF28A9;
|
||||
Canv.text = 0x00;
|
||||
Canv.valuet = 0x60204A;
|
||||
Canv.inf = 0xD17DDB;
|
||||
}
|
||||
|
||||
private void setSEclub() {
|
||||
Canv.softUp1 = 0xFF295723;
|
||||
Canv.softUp2 = 0x88295723;
|
||||
Canv.softDn1 = 0x8834EB5E;
|
||||
Canv.softDn2 = 0xFF34EB5E;
|
||||
Canv.background = 0x295723;
|
||||
Canv.line = 0xDFFFFF;
|
||||
Canv.text = 0x2ED45E;
|
||||
Canv.valuet = 0x34EB5E;
|
||||
Canv.inf = 0xCAC410;
|
||||
}
|
||||
|
||||
private void setaNM() {
|
||||
Canv.softUp1 = 0xFF99AACC;
|
||||
Canv.softUp2 = 0x7599AACC;
|
||||
Canv.softDn1 = 0x75CCFF99;
|
||||
Canv.softDn2 = 0xFFCCFF99;
|
||||
Canv.background = 0xFFFF99;
|
||||
Canv.line = 0x002B55;
|
||||
Canv.text = 0x333399;
|
||||
Canv.valuet = 0x640022;
|
||||
Canv.inf = 0x008000;
|
||||
}
|
||||
}
|
45
src/about
Normal file
45
src/about
Normal file
@ -0,0 +1,45 @@
|
||||
Sony Ericsson Player Service 3.0
|
||||
|
||||
Автор: Виктор aNNiMON Мельник
|
||||
Сайт разработчика: http://annimon.wen.ru/
|
||||
|
||||
Программа - управление родным плейером для телефонов Sony Ericsson с поддержкой MultimediaService API и датчиком движения.
|
||||
|
||||
Управление:
|
||||
Влево/Вправо/Движение акселерометром - Переключение песен.
|
||||
Вверх/Вниз - переключение режимов: Всё/Визуализация/Текст.
|
||||
1/3 - Перемотка назад/вперед.
|
||||
5/Огонь - Пауза.
|
||||
0 - Включение/Отключение текстов песен.
|
||||
* - Включение/Отключение визуализации.
|
||||
# - Включение/Отключение акселерометра.
|
||||
|
||||
Изменения:
|
||||
Версия 3.0
|
||||
- Исправлен показ обложки в полноэкранном режиме.
|
||||
- Добавил поддержку текстов песен (lrc). Файлы кидаем в папку Lyrics. Например c:/music/Lyrics/Bullet For My Valentine - Hand of Blood.lrc
|
||||
- Сделал настройку пути к папке хранения .lrc текстов.
|
||||
- Добавил постоянную подсветку и её настройку.
|
||||
- Добавил 2 новых скина.
|
||||
|
||||
Версия 2.0
|
||||
- Добавлена настройка чувствительности акселерометра,
|
||||
- Добавлены скины: ProPaintMobile, Готический, Эмо(в котором все английские буквы ПрЫгАюТ),
|
||||
- Режим визуализации. Переключается клавишами Вверх/Вниз,
|
||||
- Добавил перемотку клавишами 1 и 3.
|
||||
|
||||
Поддержка lrc:
|
||||
Lyrics-файл (.lrc) должен быть записан в кодировке WIN-1251, иначе возможны ошибки при чтении.
|
||||
Имя lrc-файла должно быть либо "[Название группы] - [Название песни].lrc", либо "[Название исходного фудиофайла].ltc".
|
||||
Примеры: "Three Days Grace - Someone Who Cares.lrc", "08 - Someone Who Cares.lrc", "Аудиодорожка_8_3373656326.lrc"
|
||||
|
||||
-= Помощь автору =-
|
||||
Web-Money:
|
||||
E254903540273
|
||||
R347617663674
|
||||
U299970747663
|
||||
Z393537409230
|
||||
|
||||
- - - - - - - - - - - - - - - - - -
|
||||
© aNNiMON (Melnik Software)
|
||||
Украина, 2010
|
1
src/newfile
Normal file
1
src/newfile
Normal file
@ -0,0 +1 @@
|
||||
aNNiMON, Ну Вот юин эсприта, основной плагмэйкер... 2542902 Вот LocID
|
Loading…
Reference in New Issue
Block a user