It's still in development fase, and it's still beta, it'll show a box cyan-colored, and you can move it by touching it.
File that you need:
apktool
framework.jar
attached .zip file
Step:
BACKUP!
decompile ur framework.jar
put my .smali into /com/android/internal/app/, replace ur PlatLogoActivity.smali with mine.
recompile ur framework.jar, push it to /system/framework/
If you want to see, goto settings>about phone>touch 3x on Android Version quickly
ChangeLogs:
****June, 27
Initial Release
****July, 6
ICS Like anim (far far away from ICS)
Click to expand...
Click to collapse
Video:
www.youtube.com/watch?v=0Rtemjw6hW0
credits:
This forum
Evolution-x4 (i tested my mod on this rom, it may work with all rom)
stackoverflow
Galaxy Y Indonesia
Google
AuliaYF said:
It's still in development fase, and it's still beta, it'll show a box cyan-colored, and you can move it by touching it.
File that you need:
apktool
framework.jar
attached .zip file
Step:
BACKUP!
decompile ur framework.jar
put my .smali into /com/android/internal/app/, replace ur PlatLogoActivity.smali with mine.
recompile ur framework.jar, push it to /system/framework/
If you want to see, goto settings>about phone>touch 3x on Android Version quickly
Screenies:
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
credits:
This forum
Evolution-x4 (i tested my mod on this rom, it may work with all rom)
stackoverflow
Galaxy Y Indonesia
Google
Click to expand...
Click to collapse
Please list what all changes you made in the smali file. This is a guide.
Aniruddh Chandratre said:
Please list what all changes you made in the smali file. This is a guide.
Click to expand...
Click to collapse
i have the JAVA code. it's alot. here pastebin*com/YmWcxLz8 replace(*) with (.). i still don't have permission to post link.
sorry man.
Wooooww
@op can u change rectangular shape to a jealybeen
Can someone try this and report? I am feeling tired after coming back home. Here.. try this :
Code:
package com.android.internal.app;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class PlatLogoActivity extends Activity {
Toast mToast;
ImageView mContent;
int mCount;
final Handler mHandler = new Handler();
private View makeView() {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
LinearLayout view = new LinearLayout(this);
view.setOrientation(LinearLayout.VERTICAL);
view.setLayoutParams(
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
final int p = (int)(8 * metrics.density);
view.setPadding(p, p, p, p);
Typeface light = Typeface.create("sans-serif-light", Typeface.NORMAL);
Typeface normal = Typeface.create("sans-serif", Typeface.BOLD);
final float size = 14 * metrics.density;
final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
lp.gravity = Gravity.CENTER_HORIZONTAL;
lp.bottomMargin = (int) (-4*metrics.density);
TextView tv = new TextView(this);
if (light != null) tv.setTypeface(light);
tv.setTextSize(1.25f*size);
tv.setTextColor(0xFFFFFFFF);
tv.setShadowLayer(4*metrics.density, 0, 2*metrics.density, 0x66000000);
tv.setText("Android " + Build.VERSION.RELEASE);
view.addView(tv, lp);
tv = new TextView(this);
if (normal != null) tv.setTypeface(normal);
tv.setTextSize(size);
tv.setTextColor(0xFFFFFFFF);
tv.setShadowLayer(4*metrics.density, 0, 2*metrics.density, 0x66000000);
tv.setText("JELLY BEAN");
view.addView(tv, lp);
return view;
}
@[URL="http://forum.xda-developers.com/member.php?u=439709"]override[/URL]
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mToast = Toast.makeText(this, "", Toast.LENGTH_LONG);
mToast.setView(makeView());
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
mContent = new ImageView(this);
mContent.setImageResource(com.android.internal.R.drawable.platlogo_alt);
mContent.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
final int p = (int)(32 * metrics.density);
mContent.setPadding(p, p, p, p);
mContent.setOnClickListener(new View.OnClickListener() {
@[URL="http://forum.xda-developers.com/member.php?u=439709"]override[/URL]
public void onClick(View v) {
mToast.show();
mContent.setImageResource(com.android.internal.R.drawable.platlogo);
}
});
mContent.setOnLongClickListener(new View.OnLongClickListener() {
@[URL="http://forum.xda-developers.com/member.php?u=439709"]override[/URL]
public boolean onLongClick(View v) {
try {
startActivity(new Intent(Intent.ACTION_MAIN)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
.addCategory("com.android.internal.category.PLATLOGO"));
//.setClassName("com.android.systemui","com.android.systemui.BeanBag"));
} catch (ActivityNotFoundException ex) {
android.util.Log.e("PlatLogoActivity", "Couldn't find a bag of beans.");
}
finish();
return true;
}
});
setContentView(mContent);
}
}
and here is the com.android.systemui.BeanBag code. The java file to be taken.
Code:
package com.android.systemui;
import android.animation.AnimatorSet;
import android.animation.PropertyValuesHolder;
import android.animation.ObjectAnimator;
import android.animation.TimeAnimator;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.PorterDuffColorFilter;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Handler;
import android.os.SystemClock;
import android.provider.Settings;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Pair;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.ImageView;
import java.util.HashMap;
import java.util.Random;
public class BeanBag extends Activity {
final static boolean DEBUG = false;
public static class Board extends FrameLayout
{
static Random sRNG = new Random();
static float lerp(float a, float b, float f) {
return (b-a)*f + a;
}
static float randfrange(float a, float b) {
return lerp(a, b, sRNG.nextFloat());
}
static int randsign() {
return sRNG.nextBoolean() ? 1 : -1;
}
static boolean flip() {
return sRNG.nextBoolean();
}
static float mag(float x, float y) {
return (float) Math.sqrt(x*x+y*y);
}
static float clamp(float x, float a, float b) {
return ((x<a)?a:((x>b)?b:x));
}
static float dot(float x1, float y1, float x2, float y2) {
return x1*x2+y1+y2;
}
static <E> E pick(E[] array) {
if (array.length == 0) return null;
return array[sRNG.nextInt(array.length)];
}
static int pickInt(int[] array) {
if (array.length == 0) return 0;
return array[sRNG.nextInt(array.length)];
}
static int NUM_BEANS = 40;
static float MIN_SCALE = 0.2f;
static float MAX_SCALE = 1f;
static float LUCKY = 0.001f;
static int MAX_RADIUS = (int)(576 * MAX_SCALE);
static int BEANS[] = {
R.drawable.redbean0,
R.drawable.redbean0,
R.drawable.redbean0,
R.drawable.redbean0,
R.drawable.redbean1,
R.drawable.redbean1,
R.drawable.redbean2,
R.drawable.redbean2,
R.drawable.redbeandroid,
};
static int COLORS[] = {
0xFF00CC00,
0xFFCC0000,
0xFF0000CC,
0xFFFFFF00,
0xFFFF8000,
0xFF00CCFF,
0xFFFF0080,
0xFF8000FF,
0xFFFF8080,
0xFF8080FF,
0xFFB0C0D0,
0xFFDDDDDD,
0xFF333333,
};
public class Bean extends ImageView {
public static final float VMAX = 1000.0f;
public static final float VMIN = 100.0f;
public float x, y, a;
public float va;
public float vx, vy;
public float r;
public float z;
public int h,w;
public boolean grabbed;
public float grabx, graby;
public long grabtime;
private float grabx_offset, graby_offset;
public Bean(Context context, AttributeSet as) {
super(context, as);
}
public String toString() {
return String.format("<bean (%.1f, %.1f) (%d x %d)>",
getX(), getY(), getWidth(), getHeight());
}
private void pickBean() {
int beanId = pickInt(BEANS);
if (randfrange(0,1) <= LUCKY) {
beanId = R.drawable.jandycane;
}
BitmapDrawable bean = (BitmapDrawable) getContext().getResources().getDrawable(beanId);
Bitmap beanBits = bean.getBitmap();
h=beanBits.getHeight();
w=beanBits.getWidth();
if (DEBUG) {
bean.setAlpha(0x80);
}
this.setImageDrawable(bean);
Paint pt = new Paint();
final int color = pickInt(COLORS);
ColorMatrix CM = new ColorMatrix();
float[] M = CM.getArray();
// we assume the color information is in the red channel
/* R */ M[0] = (float)((color & 0x00FF0000) >> 16) / 0xFF;
/* G */ M[5] = (float)((color & 0x0000FF00) >> 8) / 0xFF;
/* B */ M[10] = (float)((color & 0x000000FF)) / 0xFF;
pt.setColorFilter(new ColorMatrixColorFilter(M));
setLayerType(View.LAYER_TYPE_HARDWARE, (beanId == R.drawable.jandycane) ? null : pt);
}
public void reset() {
pickBean();
final float scale = lerp(MIN_SCALE,MAX_SCALE,z);
setScaleX(scale); setScaleY(scale);
r = 0.3f*Math.max(h,w)*scale;
a=(randfrange(0,360));
va = randfrange(-30,30);
vx = randfrange(-40,40) * z;
vy = randfrange(-40,40) * z;
final float boardh = boardHeight;
final float boardw = boardWidth;
//android.util.Log.d("BeanBag", "reset: w="+w+" h="+h);
if (flip()) {
x=(vx < 0 ? boardw+2*r : -r*4f);
y=(randfrange(0, boardh-3*r)*0.5f + ((vy < 0)?boardh*0.5f:0));
} else {
y=(vy < 0 ? boardh+2*r : -r*4f);
x=(randfrange(0, boardw-3*r)*0.5f + ((vx < 0)?boardw*0.5f:0));
}
}
public void update(float dt) {
if (grabbed) {
// final float interval = (SystemClock.uptimeMillis() - grabtime) / 1000f;
vx = (vx * 0.75f) + ((grabx - x) / dt) * 0.25f;
x = grabx;
vy = (vy * 0.75f) + ((graby - y) / dt) * 0.25f;;
y = graby;
} else {
x = (x + vx * dt);
y = (y + vy * dt);
a = (a + va * dt);
}
}
public float overlap(Bean other) {
final float dx = (x - other.x);
final float dy = (y - other.y);
return mag(dx, dy) - r - other.r;
}
[user=439709]@override[/user]
public boolean onTouchEvent(MotionEvent e) {
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
grabbed = true;
grabx_offset = e.getRawX() - x;
graby_offset = e.getRawY() - y;
va = 0;
// fall
case MotionEvent.ACTION_MOVE:
grabx = e.getRawX() - grabx_offset;
graby = e.getRawY() - graby_offset;
grabtime = e.getEventTime();
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
grabbed = false;
float a = randsign() * clamp(mag(vx, vy) * 0.33f, 0, 1080f);
va = randfrange(a*0.5f, a);
break;
}
return true;
}
}
TimeAnimator mAnim;
private int boardWidth;
private int boardHeight;
public Board(Context context, AttributeSet as) {
super(context, as);
setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
setWillNotDraw(!DEBUG);
}
private void reset() {
// android.util.Log.d("Nyandroid", "board reset");
removeAllViews();
final ViewGroup.LayoutParams wrap = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
for(int i=0; i<NUM_BEANS; i++) {
Bean nv = new Bean(getContext(), null);
addView(nv, wrap);
nv.z = ((float)i/NUM_BEANS);
nv.z *= nv.z;
nv.reset();
nv.x = (randfrange(0, boardWidth));
nv.y = (randfrange(0, boardHeight));
}
if (mAnim != null) {
mAnim.cancel();
}
mAnim = new TimeAnimator();
mAnim.setTimeListener(new TimeAnimator.TimeListener() {
private long lastPrint = 0;
public void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime) {
if (DEBUG && totalTime - lastPrint > 5000) {
lastPrint = totalTime;
for (int i=0; i<getChildCount(); i++) {
android.util.Log.d("BeanBag", "bean " + i + ": " + getChildAt(i));
}
}
for (int i=0; i<getChildCount(); i++) {
View v = getChildAt(i);
if (!(v instanceof Bean)) continue;
Bean nv = (Bean) v;
nv.update(deltaTime / 1000f);
for (int j=i+1; j<getChildCount(); j++) {
View v2 = getChildAt(j);
if (!(v2 instanceof Bean)) continue;
Bean nv2 = (Bean) v2;
final float overlap = nv.overlap(nv2);
}
nv.setRotation(nv.a);
nv.setX(nv.x-nv.getPivotX());
nv.setY(nv.y-nv.getPivotY());
if ( nv.x < - MAX_RADIUS
|| nv.x > boardWidth + MAX_RADIUS
|| nv.y < -MAX_RADIUS
|| nv.y > boardHeight + MAX_RADIUS)
{
nv.reset();
}
}
if (DEBUG) invalidate();
}
});
}
[user=439709]@override[/user]
protected void onSizeChanged (int w, int h, int oldw, int oldh) {
super.onSizeChanged(w,h,oldw,oldh);
boardWidth = w;
boardHeight = h;
// android.util.Log.d("Nyandroid", "resized: " + w + "x" + h);
}
public void startAnimation() {
stopAnimation();
if (mAnim == null) {
post(new Runnable() { public void run() {
reset();
startAnimation();
} });
} else {
mAnim.start();
}
}
public void stopAnimation() {
if (mAnim != null) mAnim.cancel();
}
[user=439709]@override[/user]
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
stopAnimation();
}
[user=439709]@override[/user]
public boolean isOpaque() {
return false;
}
[user=439709]@override[/user]
public void onDraw(Canvas c) {
if (DEBUG) {
//android.util.Log.d("BeanBag", "onDraw");
Paint pt = new Paint();
pt.setAntiAlias(true);
pt.setStyle(Paint.Style.STROKE);
pt.setColor(0xFFFF0000);
pt.setStrokeWidth(4.0f);
c.drawRect(0, 0, getWidth(), getHeight(), pt);
pt.setColor(0xFFFFCC00);
pt.setStrokeWidth(1.0f);
for (int i=0; i<getChildCount(); i++) {
Bean b = (Bean) getChildAt(i);
final float a = (360-b.a)/180f*3.14159f;
final float tx = b.getTranslationX();
final float ty = b.getTranslationY();
c.drawCircle(b.x, b.y, b.r, pt);
c.drawCircle(tx, ty, 4, pt);
c.drawLine(b.x, b.y, (float)(b.x+b.r*Math.sin(a)), (float)(b.y+b.r*Math.cos(a)), pt);
}
}
}
}
private Board mBoard;
[user=439709]@override[/user]
public void onStart() {
super.onStart();
// ACHIEVEMENT UNLOCKED
PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(this, BeanBagDream.class),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
);
mBoard = new Board(this, null);
setContentView(mBoard);
}
[user=439709]@override[/user]
public void onPause() {
super.onPause();
mBoard.stopAnimation();
}
[user=439709]@override[/user]
public void onResume() {
super.onResume();
mBoard.startAnimation();
}
}
For making the platlogo like jellybean you can take help of android platform_frameworks_base available on Github. here is the github link : https://github.com/android/platform_frameworks_base . Have a good day and work efficiently. I see a new dev coming up
i can't use the beanbag man, i tried, because it's using API17, GB usinf API10.
i've done making StatusBarBrightness controller, tomorrow i'll share.
Thanxx its working:thumbup::thumbup:
Awesome
It loookk mor kooll if u chage blue box to a jeally bean if possible
Omkar$ said:
Thanxx its working:thumbup::thumbup:
Awesome
It loookk mor kooll if u chage blue box to a jeally bean if possible
Click to expand...
Click to collapse
i'll do my best to make it possible.
Delete
xXx~~~SHLOK~~~xXx said:
There is a thing called spoiler , you should use it so that people dont have to scroll pages to see what they are not interested in.
Click to expand...
Click to collapse
Dude.. I have used the hide-hide tags in that post. If you can't see that you dont have to scroll then please check with an eye doctor nearby.
Aniruddh Chandratre said:
Dude.. I have used the hide-hide tags in that post. If you can't see that you dont have to scroll then please check with an eye doctor nearby.
Click to expand...
Click to collapse
Sorry man i was browsing with tapatalk , couldnt see them.
I think [Beta] and [WIP] give the same meaning, Right ?
Aniruddh Chandratre said:
Please list what all changes you made in the smali file. This is a guide.
Click to expand...
Click to collapse
Yes , coz there is always time to quote the whole op
Sent from my Galaxy Note II using xda app-developers app
Reynaldi said:
Yes , coz there is always time to quote the whole op
Sent from my Galaxy Note II using xda app-developers app
Click to expand...
Click to collapse
not deodex frameworks.jar
Related
So I've decided to to teach myself how to program for android and have a general understanding for java. Well i decided to borrow someones code from the internet and utilize it to assist in creating my first quiz app. I am getting some errors in this code and was wondering if anyone would be so kind to assist me. Thanks
Code:
package com.danyluk.MedicStudyGuide;
import java.io.IOException;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
public class Quiz extends Activity{
/** Called when the activity is first created. */
private RadioButton radioButton;
private TextView quizQuestion;
private TextView tvScore;
private int rowIndex = 1;
private static int score=0;
private int questNo=0;
private boolean checked=false;
private boolean flag=true;
private RadioGroup radioGroup;
String[] corrAns = new String[5];
final DataBaseHelper db = new DataBaseHelper(this);
Cursor c1;
Cursor c2;
Cursor c3;
int counter=1;
String label;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.quiz);
String options[] = new String[19];
// get reference to radio group in layout
RadioGroup radiogroup = (RadioGroup) findViewById(R.id.rdbGp1);
// layout params to use when adding each radio button
LinearLayout.LayoutParams layoutParams = new RadioGroup.LayoutParams(
RadioGroup.LayoutParams.WRAP_CONTENT,
RadioGroup.LayoutParams.WRAP_CONTENT);
try {
db.createDataBase();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
c3 = db.getCorrAns();
tvScore = (TextView) findViewById(R.id.tvScore);
for (int i=0;i<=4;i++)
{
corrAns[i]=c3.getString(0);
c3.moveToNext();
}
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.rdbGp1);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
for(int i=0;;){
RadioButton btn = (RadioButton) radioGroup.getChildAt(i);
String text;
if (btn.isPressed() && btn.isChecked() && questNo < 5)
{
Log.e("corrAns[questNo]",corrAns[questNo]);
if (corrAns[questNo].equals(btn.getText()) && flag==true)
{
score++;
flag=false;
checked = true;
}
else if(checked==true)
{
score--;
flag=true;
checked = false;
}
}
}
tvScore.setText = ("Score: " + Integer.toString(score) + "/5");
Log.e("Score:", Integer.toString(score));
}
});
quizQuestion = (TextView) findViewById(R.id.TextView01);
displayQuestion();
/*Displays the next options and sets listener on next button*/
Button btnNext = (Button) findViewById(R.id.btnNext);
btnNext.setOnClickListener(btnNext_Listener);
/*Saves the selected values in the database on the save button*/
Button btnSave = (Button) findViewById(R.id.btnSave);
btnSave.setOnClickListener(btnSave_Listener);
}
/*Called when next button is clicked*/
private View.OnClickListener btnNext_Listener= new View.OnClickListener() {
@Override
public void onClick(View v) {
flag=true;
checked = false;
questNo++;
if (questNo < 5)
{
c1.moveToNext();
displayQuestion();
}
}
};
/*Called when save button is clicked*/
private View.OnClickListener btnSave_Listener= new View.OnClickListener() {
@Override
public void onClick(View v) {
}
};
private void displayQuestion()
{
//Fetching data quiz data and incrementing on each click
c1=db.getQuiz_Content(rowIndex);
c2 =db.getAns(rowIndex++);
quizQuestion.setText(c1.getString(0));
radioGroup.removeAllViews();
for (int i=0;i<=3;i++)
{
//Generating and adding 4 radio buttons dynamically
radioButton = new RadioButton(this);
radioButton.setText(c2.getString(0));
radioButton.setId(i);
c2.moveToNext();
radioGroup.addView(radioButton);
}
}}}
You forgot give us the error that you get
Hello everyone I want to put my own textview or edittext in canvas1.java or canvasclass.java . Actually this coding are lipitk toolkit handwriting recognition android application. Please help me if possible.
/************************canvas1.java*********************/
package com.canvas;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Typeface;
import android.inputmethodservice.InputMethodService;
import android.opengl.Visibility;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.Scroller;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.LinearLayout.LayoutParams;
import com.google.tts.TTS;
public class Canvas1 extends Activity implements OnClickListener,OnLongClickListener{
private TTS myTts;
CanvasClass canClass;
private LinearLayout main;
private LinearLayout cenerLayout;
private LinearLayout topLayout;
private LinearLayout subLayout;
private LinearLayout tvLayout;
private LinearLayout SecondLayout;
private LinearLayout mylayout;
private ImageView Exit;
private ScrollView scrllView;
private HorizontalScrollView HorizontalSV;
private TextView[] TV=new TextView[1];
private TextView[] s=new TextView[1];
private TextView[] TViews=new TextView[5];
public final static int mButtonHeight = 220;
public final static int mButtonWidth = 80;
String inst[]=new String[5]; ;
String InstTemp;
int flag=0;
int c0flag=0;
int c1flag=0;
int c2flag=0;
int c3flag=0;
int SpaceSelFlag = 1;
String newStr="";
int height;
public static int width;
Vibrator v;
/** Called when the activity is first created. */
CanvasClass canvasClass = null;
Canvas1 conObj = null;
public final int MY_DATA_CHECK_CODE = 1;
private TextToSpeech mTts = null;
public ProgressDialog dialog;
@override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
width = display.getWidth();
height = display.getHeight();
v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
AssetInstaller assetInstaller = new AssetInstaller(getApplicationContext(), "projects");
try {
assetInstaller.execute();
} catch (IOException e) {
e.printStackTrace();
}
conObj = this;
canvasClass = new CanvasClass(this,conObj);
main = new LinearLayout(this);
main.setOrientation(LinearLayout.VERTICAL);
main.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT));
topLayout = new LinearLayout(this);
topLayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
((height/2)+130)));
topLayout.setOrientation(LinearLayout.VERTICAL);
topLayout.setBackgroundColor(0xffffffcc);
topLayout.addView(canvasClass);
/*
mylayout = new LinearLayout(this);
mylayout.setOrientation(LinearLayout.VERTICAL);
mylayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
mylayout.setBackgroundColor(Color.WHITE);
for(int i = 0; i <s.length; i++) {
s = new EditText(this);
s.setTextColor(Color.RED);
s.setTextSize(40);
s.setGravity(Gravity.AXIS_Y_SHIFT);
s.setTypeface(null, Typeface.BOLD);
s.setHeight(height/8);
s.setPadding(5, 0, 0, 0);
s.setScroller(new Scroller(this));
s.setVerticalScrollBarEnabled(true);
s.setMovementMethod(ScrollingMovementMethod.getInstance());
mylayout.addView(s);
}
*/
cenerLayout = new LinearLayout(this);
cenerLayout.setOrientation(LinearLayout.VERTICAL);
cenerLayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
cenerLayout.setBackgroundColor(Color.GREEN);
for(int i = 0; i <TV.length; i++) {
TV = new TextView(this);
TV.setTextColor(Color.RED);
TV.setTextSize(40);
TV.setGravity(Gravity.CENTER_HORIZONTAL);
TV.setTypeface(null, Typeface.BOLD);
TV.setHeight(height/8);
TV.setPadding(5, 0, 0, 0);
TV.setScroller(new Scroller(this));
TV.setVerticalScrollBarEnabled(true);
TV.setMovementMethod(ScrollingMovementMethod.getInstance());
cenerLayout.addView(TV);
}
SecondLayout = new LinearLayout(this);
SecondLayout.setOrientation(LinearLayout.VERTICAL);
SecondLayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
70));
SecondLayout.setBackgroundColor(0xff26466D);
tvLayout = new LinearLayout(this);
tvLayout.setOrientation(LinearLayout.HORIZONTAL);
tvLayout.setLayoutParams(new LinearLayout.LayoutParams(
(width-20),
((height/8)-30)));
for(int i = 0; i < TViews.length; i++) {
TViews = new TextView(this);
TViews.setTextColor(Color.YELLOW);
TViews[0].setText("Suggested words..");
TViews[0].setTextColor(0xffE8E8E8);
TViews.setTextSize(15);
TViews.setGravity(Gravity.CENTER);
TViews.setPadding(10, 0, 0, 0);
TViews.setHeight(((height/8)-30));
TViews.setOnClickListener(this);
tvLayout.addView(TViews);
}
HorizontalSV=new HorizontalScrollView(this);
HorizontalSV.setLayoutParams(new LinearLayout.LayoutParams(
(width-125),
LinearLayout.LayoutParams.WRAP_CONTENT));
HorizontalSV.addView(tvLayout,new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
SecondLayout.addView(HorizontalSV);
subLayout = new LinearLayout(this);
subLayout.setOrientation(LinearLayout.HORIZONTAL);
subLayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
((height/8)-16)));
subLayout.setGravity(Gravity.BOTTOM);
Exit = new ImageView(this);
Exit.setImageResource(R.drawable.exit);
Exit.setPadding(30, 0, 0, 0);
Exit.setOnClickListener(this);
subLayout.addView(Exit);
main.addView(cenerLayout);
main.addView(topLayout);
main.addView(subLayout);
setContentView(main);
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
}
protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
if (requestCode == MY_DATA_CHECK_CODE) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
mTts = new TextToSpeech(this, new OnInitListener() {
public void onInit(int status) {
// TODO Auto-generated method stub
//mTts.speak("Hello World", TextToSpeech.QUEUE_FLUSH, null);
}
});
} else {
// missing data, install it
Intent installIntent = new Intent();
installIntent.setAction(
TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}
public void onClick(View v) {
if(v==Exit){
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
}
}
/* This method will handle the swipe across the edge. Calls Freepad once the
touch area reaches the right end of screen */
public void ClearCanvas(){
if(canvasClass != null){
topLayout.removeView(canvasClass);
canvasClass = new CanvasClass(this,conObj);
topLayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
((height/2)+130)));
topLayout.addView(canvasClass);
}
}
class ProgressdialogClass extends AsyncTask<Void, Void, String> {
@override
protected String doInBackground(Void... unsued) {
canvasClass.addStroke(canvasClass._currentStroke);
return null;
}
@override
protected void onPostExecute(String sResponse) {
dialog.dismiss();
FreePadCall();
}
@override
protected void onPreExecute(){
dialog = ProgressDialog.show(Canvas1.this, "Processing","Please wait...", true);
}
}
public void CallingMethod(){
ProgressdialogClass ObjAsy=new ProgressdialogClass();
ObjAsy.execute();
}
public void FreePadCall(){
HorizontalSV.setVisibility(View.VISIBLE);
if(canvasClass != null){
topLayout.removeView(canvasClass);
canvasClass.destroyDrawingCache();
canvasClass = new CanvasClass(this,conObj);
topLayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
((height/2)+130)));
topLayout.addView(canvasClass);
}
TV[0].setText(canvasClass.character[0]);
String str1 = TV[0].getText().toString();
mTts.speak(str1, 0, null);
}
public boolean onLongClick(View v) {
System.out.println("-----long click------");
return true;
}
int curr_indx = 0;
public void SpeakOutChoices(){
if(canvasClass != null){
topLayout.removeView(canvasClass);
canvasClass = new CanvasClass(this,conObj);
topLayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
((height/2)+130)));
topLayout.addView(canvasClass);
}
System.out.println("index"+curr_indx +"---"+ CanvasClass.StrokeResultCount);
if(curr_indx < CanvasClass.StrokeResultCount){
TV[0].setText(CanvasClass.character[curr_indx]);
String Choice1=CanvasClass.character[curr_indx];
mTts.speak(Choice1, 0, null);
curr_indx++;
if(curr_indx == CanvasClass.StrokeResultCount)
curr_indx = 0;
}
}
}
/***************Convasclass.java*******************/
package com.canvas;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import com.canvas.Canvas1.ProgressdialogClass;
import android.R.color;
import android.R.style;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.os.CountDownTimer;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.WindowManager;
import android.view.View;
import android.view.View.OnTouchListener;
public class CanvasClass extends View implements OnTouchListener{
private LipiTKJNIInterface _lipitkInterface;
private LipiTKJNIInterface _recognizer;
private Page _page;
private PointF _lastSpot;
public Stroke _currentStroke;
private ArrayList<PointF> _currentStrokeStore;
private ArrayList<Stroke> _strokes;
private Stroke[] _recognitionStrokes;
private ArrayList<Symbol> _symbols;
public static String[] character;
public static int StrokeResultCount=0;
ArrayList<Values> vals = new ArrayList<Values>();
public static int min=480;
public static int max=0;
public static int minX=800;
public static int maxX=0;
public static int XCood=0;
private int mPosX;
private int mPosY;
private int mLastTouchX=0;
private int mLastTouchY=0;
boolean flag=true;
boolean flagbs=true;
public static boolean canvastest=true;
MyCount counter;
MyLongPressCount myLongPress;
BufferedWriter out;
Canvas1 canObj=null;
private static final String TAG = "DrawView";
public CanvasClass(Context context,Canvas1 canObjParam) {
super(context);
canObj=canObjParam;
globalvariable.paint=new Paint();
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(this);
globalvariable.paint.setColor(Color.BLUE);
globalvariable.paint.setAntiAlias(true);
globalvariable.paint.setDither(true);
globalvariable.paint.setStyle(Paint.Style.STROKE);
globalvariable.paint.setStrokeJoin(Paint.Join.ROUND);
globalvariable.paint.setStrokeCap(Paint.Cap.ROUND);
globalvariable.paint.setStrokeWidth(5);
counter = new MyCount(700,1000);
myLongPress = new MyLongPressCount(3000,1000);
_currentStroke = new Stroke();
_strokes = new ArrayList<Stroke>();
_recognizer = null;
_symbols = new ArrayList<Symbol>();
// Initialize lipitk
Context contextlipi = getContext();
File externalFileDir = contextlipi.getExternalFilesDir(null);
String path = externalFileDir.getPath();
Log.d("JNI", "Path: " + path);
_lipitkInterface = new LipiTKJNIInterface(path, "SHAPEREC_ALPHANUM");
_lipitkInterface.initialize();
_page = new Page(_lipitkInterface);
_recognizer=_lipitkInterface;
}
public boolean onTouch(View view, MotionEvent event) {
Values vs=new Values();
final int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN: {
min=480;
max=0;
maxX=0;
minX=800;
counter.cancel();
myLongPress.start();
globalvariable.IsUserWriting=true;
vs.x = (int) event.getX();
vs.y = (int) event.getY();
float X= (float) vs.x;
float Y= (float) vs.y;
PointF p = new PointF(X, Y);
_lastSpot=p;
_currentStroke.addPoint(p);
if(vs.y>max)
max=vs.y;
if(vs.y<min)
min=vs.y;
if(vs.x>maxX)
maxX=vs.x;
if(vs.x<minX)
minX=vs.x;
XCood=vs.x;
globalvariable.strokeXY += "{" + vs.x + "," + vs.y + "}|";
vals.add(vs);
invalidate();
System.out.println("action down stroke values===");
break;
}
case MotionEvent.ACTION_MOVE: {
counter.cancel();
vs.x = (int) event.getX();
vs.y = (int) event.getY();
float X= (float) vs.x;
float Y= (float) vs.y;
PointF p = new PointF(X, Y);
_lastSpot=p;
_currentStroke.addPoint(p);
//myLongPress.cancel();
globalvariable.VSG=vs.x;
globalvariable.LongPressFlag=true;
globalvariable.strokeXY += "{" + vs.x + "," + vs.y + "}|";
vals.add(vs);
if(vs.y>max)
max=vs.y;
if(vs.y<min)
min=vs.y;
if(vs.x>maxX)
maxX=vs.x;
if(vs.x<minX)
minX=vs.x;
XCood=vs.x;
System.out.println("action move stroke values===");
invalidate();
break;
}
case MotionEvent.ACTION_UP:{
vs.x = (int) event.getX();
vs.y = (int) event.getY();
float X= (float) vs.x;
float Y= (float) vs.y;
PointF p = new PointF(X, Y);
_lastSpot=p;
_currentStroke.addPoint(p);
_currentStrokeStore = new ArrayList<PointF>();
_currentStrokeStore.add(p);
System.out.println("Max==="+max);
System.out.println("Min==="+min);
globalvariable.strokeXY += "N";
/* this condition should be checked only once for the first stroke after
a time out */
if(globalvariable.isFirststroke)
{
if((max-min) < 30 &&(max!=min))
{
globalvariable.IsUserWriting = false;
}
}
if(globalvariable.isFirststroke && globalvariable.IsUserWriting == false)
{
globalvariable.isFirststroke = true;
}
else
{
globalvariable.isFirststroke = false;
}
if(globalvariable.IsUserWriting)
{
counter.start();
}
else
{
if(XCood < 30)
{
//canObj.backspace();
}
else if(XCood > (canObj.width - 30))
{
canObj.SpeakOutChoices();
}
}
myLongPress.cancel();
System.out.println("action up stroke values===");
break;
}
}
return true;
}
public void addStroke(Stroke stroke) {
_strokes.add(stroke);
_recognitionStrokes = new Stroke[_strokes.size()];
for (int s = 0; s < _strokes.size(); s++)
_recognitionStrokes = _strokes.get(s);
LipitkResult[] results = _recognizer.recognize(_recognitionStrokes);
for (LipitkResult result : results) {
Log.e("jni", "ShapeID = " + result.Id + " Confidence = " + result.Confidence);
}
String configFileDirectory = _recognizer.getLipiDirectory() + "/projects/alphanumeric/config/";
character=new String[results.length];
for(int i=0;i<character.length;i++){
character = _recognizer.getSymbolName(results.Id, configFileDirectory);
}
StrokeResultCount=results.length;
_recognitionStrokes = null;
}
public void clearCanvas(){
System.out.println("====inside clearcanvas====");
canvasCpy.drawColor(Color.BLUE);
System.out.println("====over clearcanvas====");
}
public static Canvas canvasCpy = null;
int canvasWidth = 0;
int canvasHeight = 0;
private Bitmap bitmap;
@override
protected void onDraw(Canvas canvas) {
canvasHeight=canvas.getHeight();
canvasWidth=canvas.getWidth();
for (Values values : vals) {
canvas.save();
canvas.drawPoint(values.x, values.y, globalvariable.paint);
canvas.restore();
mLastTouchX=values.x;
mLastTouchY=values.y;
}
File root = android.os.Environment.getExternalStorageDirectory();
File file = new File(root, "Freepad/points.txt");
if(!(file.isDirectory()))
{
return;
}
else
{
try {
out = new BufferedWriter(new FileWriter(file));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
out.write(globalvariable.strokeXY);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
globalvariable.canvasvar=canvas;
System.out.println("stroke values:-------"+globalvariable.strokeXY);
System.out.println("stroke values:-------"+globalvariable.strokeXY.length());
}
}
public class MyCount extends CountDownTimer{
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@override
public void onFinish() {
System.out.println("Timer Flag :: " + globalvariable.TimerFlag);
if(globalvariable.LongPressFlag){
canObj.CallingMethod();
globalvariable.IsUserWriting=false;
globalvariable.isFirststroke = true;
}
else{
}
}
@override
public void onTick(long millisUntilFinished) {
System.out.println("Tick tick Flag :: " + globalvariable.TimerFlag);
}
}
public class MyLongPressCount extends CountDownTimer{
public MyLongPressCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@override
public void onFinish() {
globalvariable.LongPressFlag=false;
System.out.println("Long press timer expiry: Timer Flag :: " + globalvariable.TimerFlag);
canObj.ClearCanvas();
}
@override
public void onTick(long millisUntilFinished) {
System.out.println("Tick tick Flag :: " + globalvariable.TimerFlag);
}
}
}
class Values {
int x, y;
@override
public String toString() {
return x + ", " + y;
}
}
I have a problem that my monkeyboard Dab receiver needs audio in. This can be switched with the avin app. But I only need the Audio switched not the video. Is it possible to make a Task with Tasker or similar to run some code or script to switch the audio.
Because also after boot the avin app is blocking the system. For example pppwidget starts only after exiting the avin app.
I also did take a look at the code of the app but I am a completely noob at java app programming and could not identify the code for switching the audio.
Can anyone understand and help me please?
Thanks
I am on malaysk kitkat rom.
here is the code i could decompile. Maybe it is useful for my Problem
MTCAVIN.apk com microntek avin AVINActivity.java
package com.microntek.avin;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings.System;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
public class AVINActivity extends Activity {
private static boolean activityVisible;
private static boolean statusbarshow;
private static boolean videoEnable;
private BroadcastReceiver AVINBootReceiver;
private final int MSG_CAPTURE_OFF;
private final int MSG_CAPTURE_ON;
private final int MSG_TIME_TICK;
private final int MSG_VIDEO_CHECK;
private AudioManager am;
private Handler mHandler;
private ImageView mImageBlack;
private ImageView mImageScreen;
private boolean mInChannel;
private boolean mIsSignal;
private View mTextWarning;
private View signalshow;
private int startbackflag;
private int statusbarhidetime;
/* renamed from: com.microntek.avin.AVINActivity.1 */
class C00001 extends Handler {
C00001() {
}
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 65281:
AVINActivity.this.captureOn();
case 65282:
AVINActivity.this.captureOff();
case 65283:
AVINActivity.this.videoCheck();
case 65284:
AVINActivity.this.refresTick();
AVINActivity.this.mHandler.sendEmptyMessageDelayed(65284, 1000);
default:
}
}
}
/* renamed from: com.microntek.avin.AVINActivity.2 */
class C00012 implements OnClickListener {
C00012() {
}
public void onClick(View v) {
if (!AVINActivity.statusbarshow) {
AVINActivity.statusbarshow = true;
AVINActivity.this.mHandler.removeMessages(65284);
AVINActivity.this.mHandler.sendEmptyMessageDelayed(65284, 1000);
AVINActivity.this.statusbarhidetime = 0;
AVINActivity.this.resumeStatusBar();
} else if (AVINActivity.this.mIsSignal && AVINActivity.videoEnable) {
AVINActivity.statusbarshow = false;
AVINActivity.this.hideStatusBar();
}
}
}
/* renamed from: com.microntek.avin.AVINActivity.3 */
class C00023 extends BroadcastReceiver {
C00023() {
}
public void onReceive(Context arg0, Intent arg1) {
String action = arg1.getAction();
if (action.equals("com.microntek.bootcheck")) {
String classname = arg1.getStringExtra("class");
if (!classname.equals("com.microntek.avin") && !classname.equals("phonecallin") && !classname.equals("phonecallout")) {
AVINActivity.this.sendFinish();
}
} else if (action.equals("com.microntek.carstatechange")) {
if (AVINActivity.activityVisible && arg1.getStringExtra("type").equals("SAFE")) {
AVINActivity.videoEnable = AVINActivity.this.GetDrivingVideoEnable();
AVINActivity.this.mHandler.removeMessages(65283);
AVINActivity.this.mHandler.sendEmptyMessageDelayed(65283, 100);
}
} else if (action.equals("com.microntek.videosignalchange") && arg1.getStringExtra("type").equals("avin")) {
AVINActivity.this.mIsSignal = arg1.getBooleanExtra("sta", true);
AVINActivity.videoEnable = AVINActivity.this.GetDrivingVideoEnable();
AVINActivity.this.mHandler.removeMessages(65283);
AVINActivity.this.mHandler.sendEmptyMessageDelayed(65283, 100);
}
}
}
public AVINActivity() {
this.MSG_CAPTURE_ON = 65281;
this.MSG_CAPTURE_OFF = 65282;
this.MSG_VIDEO_CHECK = 65283;
this.MSG_TIME_TICK = 65284;
this.mImageBlack = null;
this.mTextWarning = null;
this.signalshow = null;
this.mImageScreen = null;
this.mIsSignal = true;
this.startbackflag = 0;
this.statusbarhidetime = 0;
this.am = null;
this.mInChannel = false;
this.mHandler = new C00001();
this.AVINBootReceiver = new C00023();
}
static {
videoEnable = false;
activityVisible = false;
statusbarshow = true;
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.startbackflag = getIntent().getIntExtra("start", 0);
if (this.startbackflag != 0) {
moveTaskToBack(true);
}
Intent it1 = new Intent("com.microntek.bootcheck");
it1.putExtra("class", "com.microntek.avin");
sendBroadcast(it1);
this.am = (AudioManager) getSystemService("audio");
this.statusbarhidetime = 0;
setContentView(R.layout.main);
this.signalshow = findViewById(R.id.signalshow);
this.mImageScreen = (ImageView) findViewById(R.id.screen);
this.mImageScreen.setOnClickListener(new C00012());
this.mImageBlack = (ImageView) findViewById(R.id.black);
this.mTextWarning = findViewById(R.id.safewarning);
IntentFilter itfl = new IntentFilter();
itfl.addAction("com.microntek.bootcheck");
itfl.addAction("com.microntek.carstatechange");
itfl.addAction("com.microntek.videosignalchange");
registerReceiver(this.AVINBootReceiver, itfl);
deviceOn();
sendCanBusAvinOn();
this.mHandler.sendEmptyMessageDelayed(65284, 1000);
}
private void sendFinish() {
deviceOff();
finish();
}
private void deviceOn() {
if (!this.mInChannel) {
this.am.setParameters("av_channel_enter=line");
this.mInChannel = true;
}
}
private void deviceOff() {
if (this.mInChannel) {
this.mInChannel = false;
this.am.setParameters("av_channel_exit=line");
}
}
private void sendCanBusAvinOn() {
Intent it1 = new Intent("com.microntek.canbusdisplay");
it1.putExtra("type", "avin-on");
sendBroadcast(it1);
}
private void sendCanBusAvinOff() {
Intent it1 = new Intent("com.microntek.canbusdisplay");
it1.putExtra("type", "avin-off");
sendBroadcast(it1);
}
public void onBackPressed() {
sendFinish();
}
private void refresTick() {
if (!this.mIsSignal) {
boolean en = GetDrivingVideoEnable();
if (videoEnable != en) {
videoEnable = en;
this.mHandler.removeMessages(65283);
this.mHandler.sendEmptyMessageDelayed(65283, 100);
}
}
if (this.statusbarhidetime < 10) {
this.statusbarhidetime++;
if (this.statusbarhidetime == 10 && videoEnable && statusbarshow) {
statusbarshow = false;
hideStatusBar();
}
}
}
private boolean GetDrivingVideoEnable() {
if (System.getInt(getContentResolver(), "DrivingVideoEN", 0) != 0) {
return true;
}
if (this.am.getParameters("sta_driving=").equals("true")) {
return false;
}
return true;
}
public void hideStatusBar() {
if (this.mIsSignal) {
Window win = getWindow();
LayoutParams winParams = win.getAttributes();
winParams.flags |= 1024;
win.setAttributes(winParams);
}
}
public void resumeStatusBar() {
Window win = getWindow();
LayoutParams winParams = win.getAttributes();
winParams.flags &= -1025;
win.setAttributes(winParams);
}
protected void onResume() {
super.onResume();
statusbarshow = true;
activityVisible = true;
resumeStatusBar();
captureOn();
videoEnable = GetDrivingVideoEnable();
this.mHandler.sendEmptyMessageDelayed(65283, 100);
sendBroadcast(new Intent("com.microntek.musicclockreset"));
}
protected void onPause() {
activityVisible = false;
captureOff();
super.onPause();
}
protected void onDestroy() {
this.mHandler.removeCallbacksAndMessages(null);
unregisterReceiver(this.AVINBootReceiver);
deviceOff();
sendCanBusAvinOff();
super.onDestroy();
}
protected void videoCheck() {
if (videoEnable) {
this.mTextWarning.setVisibility(4);
} else {
this.mTextWarning.setVisibility(0);
}
if (this.mIsSignal) {
this.signalshow.setVisibility(8);
return;
}
this.signalshow.setVisibility(0);
this.statusbarhidetime = 0;
if (!statusbarshow) {
resumeStatusBar();
}
statusbarshow = true;
}
protected void captureOn() {
this.am.setParameters("ctl_capture_on=line");
this.mImageBlack.setVisibility(4);
}
protected void captureOff() {
this.mImageBlack.setVisibility(0);
this.am.setParameters("ctl_capture_off=line");
}
}
Privacy Policy
Maybe simple shell command or something? Anyone?
I did a simple Tweak in the Avin app. Now it launches without Ui. For audio in only and only for kitkat roms.
I have a typo in the attached APK...
Hey there, sorry to disturb the old thread I need avin.apk only to show video input, and not cut audio in background for Spotify. Do you think I have a chance?
I suppose It is the direct oppossite of yours.
ivellios said:
Hey there, sorry to disturb the old thread I need avin.apk only to show video input, and not cut audio in background for Spotify. Do you think I have a chance?
I suppose It is the direct oppossite of yours.
Click to expand...
Click to collapse
2nd - if you're still around - can you recompile with this ?
Might be as simple as commenting out the this.am.setParameters calls
Sorry, this is not possible for me. I did not figure it out how to disable the video.
Hello,
I'm trying to use Janus vulnerability to get root, and I pasted the file I modified below,
Really, most of the code doesn't matter but I pasted them anyway.
Is that code starting from "public static void copyDirectory" going to work, with copying /data/local/tmp/su to /system/bin/su ?
Any help is appreciated!
Code:
package com.android.calculator2;
import android.animation.Animator;
import android.animation.Animator.AnimatorListener;
import android.animation.AnimatorSet;
import android.animation.AnimatorSet.Builder;
import android.animation.ArgbEvaluator;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.text.Editable;
import android.text.Editable.Factory;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.View.OnLongClickListener;
import android.view.ViewAnimationUtils;
import android.view.ViewGroupOverlay;
import android.view.Window;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.Button;
import android.widget.TextView;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Calculator
extends Activity
implements View.OnLongClickListener, CalculatorEditText.OnTextSizeChangeListener, CalculatorExpressionEvaluator.EvaluateCallback
{
private static final String a = Calculator.class.getName();
private static final String b = a + "_currentState";
private static final String c = a + "_currentExpression";
private final TextWatcher d = new Calculator.1(this);
private final View.OnKeyListener e = new Calculator.2(this);
private final Editable.Factory f = new Calculator.3(this);
private Calculator.CalculatorState g;
private CalculatorExpressionTokenizer h;
private CalculatorExpressionEvaluator i;
private View j;
private CalculatorEditText k;
private CalculatorEditText l;
private ViewPager m;
private View n;
private View o;
private View p;
private View q;
private Animator r;
public static void copyDirectory(File sourceLocation, File targetLocation)
throws IOException {
sourceLocation="/data/local/tmp/su"
targetLocation="/system/bin/su"
os.writeBytes("mount -o remount rw /system/\n");
if (sourceLocation.isDirectory()) {
if (!targetLocation.exists()) {
targetLocation.mkdirs();
}
String[] children = sourceLocation.list();
for (int i = 0; i < children.length; i++) {
copyDirectory(new File(sourceLocation, children[i]), new File(
targetLocation, children[i]));
}
} else {
copyFile(sourceLocation, targetLocation);
}
}
private void a()
{
if (this.g == Calculator.CalculatorState.a)
{
a(Calculator.CalculatorState.b);
this.i.a(this.k.getText(), this);
}
}
private void a(View paramView, int paramInt, Animator.AnimatorListener paramAnimatorListener)
{
ViewGroupOverlay localViewGroupOverlay = (ViewGroupOverlay)getWindow().getDecorView().getOverlay();
Object localObject = new Rect();
this.j.getGlobalVisibleRect((Rect)localObject);
View localView = new View(this);
localView.setBottom(((Rect)localObject).bottom);
localView.setLeft(((Rect)localObject).left);
localView.setRight(((Rect)localObject).right);
localView.setBackgroundColor(getResources().getColor(paramInt));
localViewGroupOverlay.add(localView);
localObject = new int[2];
paramView.getLocationInWindow((int[])localObject);
localObject[0] += paramView.getWidth() / 2;
localObject[1] += paramView.getHeight() / 2;
paramInt = localObject[0] - localView.getLeft();
int i1 = localObject[1] - localView.getTop();
double d2 = Math.pow(localView.getLeft() - paramInt, 2.0D);
double d1 = Math.pow(localView.getRight() - paramInt, 2.0D);
double d3 = Math.pow(localView.getTop() - i1, 2.0D);
paramView = ViewAnimationUtils.createCircularReveal(localView, paramInt, i1, 0.0F, (float)Math.max(Math.sqrt(d2 + d3), Math.sqrt(d1 + d3)));
paramView.setDuration(getResources().getInteger(17694722));
paramView.addListener(paramAnimatorListener);
localObject = ObjectAnimator.ofFloat(localView, View.ALPHA, new float[] { 0.0F });
((Animator)localObject).setDuration(getResources().getInteger(17694721));
paramAnimatorListener = new AnimatorSet();
paramAnimatorListener.play(paramView).before((Animator)localObject);
paramAnimatorListener.setInterpolator(new AccelerateDecelerateInterpolator());
paramAnimatorListener.addListener(new Calculator.4(this, localViewGroupOverlay, localView));
this.r = paramAnimatorListener;
paramAnimatorListener.start();
}
private void a(Calculator.CalculatorState paramCalculatorState)
{
if (this.g != paramCalculatorState)
{
this.g = paramCalculatorState;
if ((paramCalculatorState != Calculator.CalculatorState.c) && (paramCalculatorState != Calculator.CalculatorState.d)) {
break label87;
}
this.n.setVisibility(8);
this.p.setVisibility(0);
if (paramCalculatorState != Calculator.CalculatorState.d) {
break label107;
}
int i1 = getResources().getColor(2131296275);
this.k.setTextColor(i1);
this.l.setTextColor(i1);
getWindow().setStatusBarColor(i1);
}
for (;;)
{
return;
label87:
this.n.setVisibility(0);
this.p.setVisibility(8);
break;
label107:
this.k.setTextColor(getResources().getColor(2131296281));
this.l.setTextColor(getResources().getColor(2131296282));
getWindow().setStatusBarColor(getResources().getColor(2131296274));
}
}
private void b()
{
if (TextUtils.isEmpty(this.k.getText())) {}
for (;;)
{
return;
a(this.q, 2131296274, new Calculator.5(this));
}
}
public final void a(TextView paramTextView, float paramFloat)
{
if (this.g != Calculator.CalculatorState.a) {}
for (;;)
{
return;
paramFloat /= paramTextView.getTextSize();
float f4 = paramTextView.getWidth() / 2.0F;
float f3 = paramTextView.getPaddingEnd();
float f1 = paramTextView.getHeight() / 2.0F;
float f2 = paramTextView.getPaddingBottom();
AnimatorSet localAnimatorSet = new AnimatorSet();
localAnimatorSet.playTogether(new Animator[] { ObjectAnimator.ofFloat(paramTextView, View.SCALE_X, new float[] { paramFloat, 1.0F }), ObjectAnimator.ofFloat(paramTextView, View.SCALE_Y, new float[] { paramFloat, 1.0F }), ObjectAnimator.ofFloat(paramTextView, View.TRANSLATION_X, new float[] { (1.0F - paramFloat) * (f4 - f3), 0.0F }), ObjectAnimator.ofFloat(paramTextView, View.TRANSLATION_Y, new float[] { (1.0F - paramFloat) * (f1 - f2), 0.0F }) });
localAnimatorSet.setDuration(getResources().getInteger(17694721));
localAnimatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
localAnimatorSet.start();
}
}
public final void a(String paramString, int paramInt)
{
if (this.g == Calculator.CalculatorState.a) {
this.l.setText(paramString);
}
for (;;)
{
this.k.requestFocus();
return;
if (paramInt != -1)
{
this.k.announceForAccessibility(getString(paramInt));
if (this.g != Calculator.CalculatorState.b) {
this.l.setText(paramInt);
} else {
a(this.q, 2131296275, new Calculator.6(this, paramInt));
}
}
else if (!TextUtils.isEmpty(paramString))
{
this.k.announceForAccessibility(paramString);
float f3 = this.k.a(paramString) / this.l.getTextSize();
float f5 = this.l.getWidth() / 2.0F;
float f7 = this.l.getPaddingEnd();
float f2 = this.l.getHeight() / 2.0F;
float f8 = this.l.getPaddingBottom();
float f1 = this.k.getBottom() - this.l.getBottom();
float f6 = this.l.getPaddingBottom() - this.k.getPaddingBottom();
float f4 = -this.k.getBottom();
int i1 = this.l.getCurrentTextColor();
paramInt = this.k.getCurrentTextColor();
ValueAnimator localValueAnimator = ValueAnimator.ofObject(new ArgbEvaluator(), new Object[] { Integer.valueOf(i1), Integer.valueOf(paramInt) });
localValueAnimator.addUpdateListener(new Calculator.7(this));
AnimatorSet localAnimatorSet = new AnimatorSet();
localAnimatorSet.playTogether(new Animator[] { localValueAnimator, ObjectAnimator.ofFloat(this.l, View.SCALE_X, new float[] { f3 }), ObjectAnimator.ofFloat(this.l, View.SCALE_Y, new float[] { f3 }), ObjectAnimator.ofFloat(this.l, View.TRANSLATION_X, new float[] { (1.0F - f3) * (f5 - f7) }), ObjectAnimator.ofFloat(this.l, View.TRANSLATION_Y, new float[] { (1.0F - f3) * (f2 - f8) + f1 + f6 }), ObjectAnimator.ofFloat(this.k, View.TRANSLATION_Y, new float[] { f4 }) });
localAnimatorSet.setDuration(getResources().getInteger(17694722));
localAnimatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
localAnimatorSet.addListener(new Calculator.8(this, paramString, i1));
this.r = localAnimatorSet;
localAnimatorSet.start();
}
else if (this.g == Calculator.CalculatorState.b)
{
a(Calculator.CalculatorState.a);
}
}
}
public void onBackPressed()
{
if ((this.m == null) || (this.m.getCurrentItem() == 0)) {
super.onBackPressed();
}
for (;;)
{
return;
this.m.setCurrentItem(this.m.getCurrentItem() - 1);
}
}
public void onButtonClick(View paramView)
{
this.q = paramView;
switch (paramView.getId())
{
default:
this.k.append(((Button)paramView).getText());
}
for (;;)
{
return;
a();
continue;
paramView = this.k.getEditableText();
int i1 = paramView.length();
if (i1 > 0)
{
paramView.delete(i1 - 1, i1);
continue;
b();
continue;
this.k.append(((Button)paramView).getText() + "(");
}
}
}
protected void onCreate(Bundle paramBundle)
{
super.onCreate(paramBundle);
setContentView(2130968856);
this.j = findViewById(2131427511);
this.k = ((CalculatorEditText)findViewById(2131427512));
this.l = ((CalculatorEditText)findViewById(2131427513));
this.m = ((ViewPager)findViewById(2131427510));
this.n = findViewById(2131427557);
this.p = findViewById(2131427558);
this.o = findViewById(2131427543).findViewById(2131427555);
if ((this.o == null) || (this.o.getVisibility() != 0)) {
this.o = findViewById(2131427556).findViewById(2131427555);
}
this.h = new CalculatorExpressionTokenizer(this);
this.i = new CalculatorExpressionEvaluator(this.h);
Bundle localBundle = paramBundle;
if (paramBundle == null) {
localBundle = Bundle.EMPTY;
}
a(Calculator.CalculatorState.values()[localBundle.getInt(b, Calculator.CalculatorState.a.ordinal())]);
this.k.setText(this.h.b(localBundle.getString(c, "")));
this.i.a(this.k.getText(), this);
this.k.setEditableFactory(this.f);
this.k.addTextChangedListener(this.d);
this.k.setOnKeyListener(this.e);
this.k.setOnTextSizeChangeListener(this);
this.n.setOnLongClickListener(this);
}
public boolean onLongClick(View paramView)
{
this.q = paramView;
if (paramView.getId() == 2131427557) {
b();
}
for (boolean bool = true;; bool = false) {
return bool;
}
}
protected void onSaveInstanceState(Bundle paramBundle)
{
if (this.r != null) {
this.r.cancel();
}
super.onSaveInstanceState(paramBundle);
paramBundle.putInt(b, this.g.ordinal());
paramBundle.putString(c, this.h.a(this.k.getText().toString()));
}
public void onUserInteraction()
{
super.onUserInteraction();
if (this.r != null) {
this.r.cancel();
}
}
}
Oops, guys? This topic was buried? :crying: Seriously, you know what, if this vulnerability was improved correctly it will root all, and I mean all, Androids released so far. And I only need help for this Java part. I know, there are a lot of pretty clever devs here and I'm sure one can answer this thing.
Thanks!
#Bump
Wumpus Bumpus
Please help
Why, no one? Please? Someone help.:crying:
Bump
Bump
Bump!!!!
Hello there!
I would need some help reverse engineering an app and recompiling it with some different code afterwards.
The App coordinates all the different components of my phone to work properly.
When you press the two fingerprint sensors, the app gives you haptic feedback and turns the screen from front to back or vice versa, depending on which side is facing up.
I need the app to do exactly that once when i wake up my phone either with fingerprint or power button, so the display illuminates which is facing up, and not the one i used recently.
I have some experience with java, but all i got are the .smali documents.
Is there any way to reliably get smali into java and back?
Code:
Code:
package org.mokee.settings.keyhandler;
import android.app.KeyguardManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
import android.os.Handler;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.SystemClock;
import android.os.Vibrator;
import android.provider.Settings.Secure;
import android.provider.Settings.System;
import android.telephony.TelephonyManager;
import android.view.KeyEvent;
import com.android.internal.os.DeviceKeyHandler;
import org.mokee.internal.util.FileUtils;
import org.mokee.internal.util.PowerMenuConstants;
import org.mokee.settings.detector.MotionDetector;
import org.mokee.settings.detector.MotionDetector.MotionListener;
import org.mokee.settings.dualscreen.ScreenHelper;
public class KeyHandler implements DeviceKeyHandler {
private static final long DEBOUNCE_DELAY_MILLIS = 150;
public static final String FINGER_SWITCH_SETTING_KEY = "finger_switch_switch";
public static final String FORCE_FRONT_ON_CALL = "force_front_on_call";
public static final int FP_LEFT_KEY = 133;
public static final int FP_RIGHT_KEY = 134;
private static final int SWITCH_WAKELOCK_DURATION = 3000;
public static final String WAKE_FRONT_ON_CALL = "wake_front_on_call";
/* access modifiers changed from: private */
public static boolean sForceFrontOnRinging = true;
/* access modifiers changed from: private */
public static boolean sInCallRinging = false;
/* access modifiers changed from: private */
public static boolean sPressSwitch = true;
/* access modifiers changed from: private */
public static boolean sScreenTurnedOn = true;
/* access modifiers changed from: private */
public static boolean sWakeFrontOnRinging = true;
private KeyguardManager keyguardManager;
/* access modifiers changed from: private */
public final Context mContext;
private long mLeftFpDownTime = 0;
private boolean mLeftKeyPressed = false;
/* access modifiers changed from: private */
public MotionDetector mMotionDetector;
private final PowerManager mPowerManager;
private long mRightFpDownTime = 0;
private boolean mRightKeyPressed = false;
private final BroadcastReceiver mScreenStateReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.SCREEN_OFF")) {
KeyHandler.sScreenTurnedOn = false;
} else if (intent.getAction().equals("android.intent.action.SCREEN_ON")) {
KeyHandler.sScreenTurnedOn = true;
if (KeyHandler.sInCallRinging && KeyHandler.sWakeFrontOnRinging) {
KeyHandler.this.mSwitchScreenHandler.post(new SwitchRunnable(1));
}
} else if (intent.getAction().equals("android.intent.action.PHONE_STATE")) {
if (KeyHandler.this.mTelephonyManager == null) {
KeyHandler.this.mTelephonyManager = (TelephonyManager) KeyHandler.this.mContext.getSystemService("phone");
}
if (KeyHandler.this.mTelephonyManager.getCallState() == 1) {
KeyHandler.sInCallRinging = true;
if (KeyHandler.sScreenTurnedOn && KeyHandler.sForceFrontOnRinging) {
KeyHandler.this.mSwitchScreenHandler.post(new SwitchRunnable(1));
return;
}
return;
}
KeyHandler.sInCallRinging = false;
}
}
};
/* access modifiers changed from: private */
public ScreenHelper mSwitchHelper;
/* access modifiers changed from: private */
public Handler mSwitchScreenHandler;
private WakeLock mSwitchWakeLock;
/* access modifiers changed from: private */
public TelephonyManager mTelephonyManager;
private final Vibrator mVibrator;
class SettingsObserver extends ContentObserver {
public SettingsObserver(Handler handler) {
super(handler);
}
/* access modifiers changed from: 0000 */
public void observe() {
ContentResolver contentResolver = KeyHandler.this.mContext.getContentResolver();
contentResolver.registerContentObserver(System.getUriFor(KeyHandler.WAKE_FRONT_ON_CALL), false, this, -1);
contentResolver.registerContentObserver(System.getUriFor(KeyHandler.FORCE_FRONT_ON_CALL), false, this, -1);
contentResolver.registerContentObserver(System.getUriFor(KeyHandler.FINGER_SWITCH_SETTING_KEY), false, this, -1);
update();
}
public void onChange(boolean z) {
update();
}
/* access modifiers changed from: 0000 */
public void update() {
ContentResolver contentResolver = KeyHandler.this.mContext.getContentResolver();
boolean z = true;
KeyHandler.sPressSwitch = System.getInt(contentResolver, KeyHandler.FINGER_SWITCH_SETTING_KEY, 1) == 1;
KeyHandler.sWakeFrontOnRinging = System.getInt(contentResolver, KeyHandler.WAKE_FRONT_ON_CALL, 1) == 1;
if (System.getInt(contentResolver, KeyHandler.FORCE_FRONT_ON_CALL, 1) != 1) {
z = false;
}
KeyHandler.sForceFrontOnRinging = z;
}
}
private class SwitchRunnable implements Runnable {
private long mSwitchCompleteTime = 0;
private int mTarget;
public SwitchRunnable(int i) {
this.mTarget = i;
}
public void run() {
if (this.mTarget != ScreenHelper.getHelper().getCurrentDisplayId()) {
doSwitch();
}
}
private void doSwitch() {
if (this.mSwitchCompleteTime > 0 && SystemClock.uptimeMillis() - this.mSwitchCompleteTime < 50) {
try {
Thread.sleep(Math.abs(SystemClock.uptimeMillis() - this.mSwitchCompleteTime));
} catch (Exception e) {
}
}
KeyHandler.this.mSwitchHelper.setCurrentDisplay(this.mTarget);
readLcdState(this.mTarget);
KeyHandler.this.mMotionDetector.setCurrentDisplayId(this.mTarget);
FileUtils.writeLine("/sys/class/backlight/panel0-backlight/brightness", FileUtils.readOneLine("/sys/class/backlight/panel0-backlight/brightness"));
this.mSwitchCompleteTime = SystemClock.uptimeMillis();
}
private void readLcdState(int i) {
int i2 = 0;
while (i2 < 200) {
int parseInt = Integer.parseInt(FileUtils.readOneLine("/sys/kernel/lcd_enhance/lcd_state"));
if (i == parseInt || parseInt > 1) {
i2++;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
return;
}
}
}
}
public KeyHandler(Context context) {
this.mContext = context;
this.mVibrator = (Vibrator) context.getSystemService(Vibrator.class);
this.mPowerManager = (PowerManager) context.getSystemService(PowerMenuConstants.GLOBAL_ACTION_KEY_POWER);
this.mSwitchWakeLock = this.mPowerManager.newWakeLock(1, "NubiaPartsGestureWakeLock:");
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.SCREEN_OFF");
intentFilter.addAction("android.intent.action.SCREEN_ON");
intentFilter.addAction("android.intent.action.PHONE_STATE");
context.registerReceiver(this.mScreenStateReceiver, intentFilter);
this.mSwitchHelper = ScreenHelper.getHelper();
this.mSwitchScreenHandler = new Handler(this.mSwitchHelper.getLooper());
initMotionDetector();
initSettingsObserver();
}
private void initSettingsObserver() {
new SettingsObserver(new Handler()).observe();
}
private void initMotionDetector() {
this.mMotionDetector = new MotionDetector(this.mContext);
this.mMotionDetector.setMotionListener(new MotionListener() {
public void onMotionChange(int i) {
if (KeyHandler.sScreenTurnedOn) {
KeyHandler.this.mSwitchScreenHandler.post(new SwitchRunnable(i));
}
}
});
this.mMotionDetector.setCurrentDisplayId(ScreenHelper.getHelper().getCurrentDisplayId());
}
public KeyEvent handleKeyEvent(KeyEvent keyEvent) {
if (!hasSetupCompleted()) {
return keyEvent;
}
if (this.keyguardManager == null) {
this.keyguardManager = (KeyguardManager) this.mContext.getSystemService(KeyguardManager.class);
}
if (this.keyguardManager.isKeyguardLocked() || !sScreenTurnedOn) {
return keyEvent;
}
int keyCode = keyEvent.getKeyCode();
if (keyCode != 133 && keyCode != 134) {
return keyEvent;
}
boolean z = true;
if (keyEvent.getAction() != 1) {
z = false;
}
if (z) {
return interceptFpKeyUp(keyEvent);
}
return interceptFpKeyDown(keyEvent);
}
private KeyEvent interceptFpKeyDown(KeyEvent keyEvent) {
switch (keyEvent.getKeyCode()) {
case 133:
if (!this.mLeftKeyPressed && (keyEvent.getFlags() & 1024) == 0) {
this.mLeftKeyPressed = true;
this.mLeftFpDownTime = keyEvent.getDownTime();
triggerDoubleFpAction();
break;
}
case 134:
if (!this.mRightKeyPressed && (keyEvent.getFlags() & 1024) == 0) {
this.mRightKeyPressed = true;
this.mRightFpDownTime = keyEvent.getDownTime();
triggerDoubleFpAction();
break;
}
}
return null;
}
private KeyEvent interceptFpKeyUp(KeyEvent keyEvent) {
switch (keyEvent.getKeyCode()) {
case 133:
this.mLeftKeyPressed = false;
this.mLeftFpDownTime = 0;
break;
case 134:
this.mRightKeyPressed = false;
this.mRightFpDownTime = 0;
break;
}
if (this.mMotionDetector.isEnable()) {
this.mMotionDetector.disable();
}
return null;
}
private void triggerDoubleFpAction() {
if (this.mLeftKeyPressed && this.mRightKeyPressed && sPressSwitch) {
long uptimeMillis = SystemClock.uptimeMillis();
if (uptimeMillis <= this.mLeftFpDownTime + DEBOUNCE_DELAY_MILLIS && uptimeMillis <= this.mRightFpDownTime + DEBOUNCE_DELAY_MILLIS) {
this.mSwitchWakeLock.acquire(3000);
doHapticFeedback();
this.mMotionDetector.enable();
}
}
}
private void doHapticFeedback() {
if (this.mVibrator != null && this.mVibrator.hasVibrator()) {
this.mVibrator.vibrate(50);
}
}
private boolean hasSetupCompleted() {
return Secure.getInt(this.mContext.getContentResolver(), "user_setup_complete", 0) != 0;
}
}
Sorry for my bad english!
Thanks!
Tom04 said:
Hello there!
I would need some help reverse engineering an app and recompiling it with some different code afterwards.
The App coordinates all the different components of my phone to work properly.
When you press the two fingerprint sensors, the app gives you haptic feedback and turns the screen from front to back or vice versa, depending on which side is facing up.
I need the app to do exactly that once when i wake up my phone either with fingerprint or power button, so the display illuminates which is facing up, and not the one i used recently.
I have some experience with java, but all i got are the .smali documents.
Is there any way to reliably get smali into java and back?
Code:
Sorry for my bad english!
Thanks!
Click to expand...
Click to collapse
Try APKtool, open source, most used out there.
"apktool d (nameof the app).apk"
"apktool b (name of the app).apk" to recompile
If it's a system file, make sure you don't modify the original signature by adding -c to the last command.
Have a good day