Last active
December 18, 2015 10:02
-
-
Save ParkSangGwon/34abc6c01e9b8551afad to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class CallingService extends Service { | |
public static final String EXTRA_CALL_NUMBER = "call_number"; | |
protected View rootView; | |
@InjectView(R.id.tv_call_number) | |
TextView tv_call_number; | |
String call_number; | |
WindowManager.LayoutParams params; | |
private WindowManager windowManager; | |
@Override | |
public IBinder onBind(Intent intent) { | |
// Not used | |
return null; | |
} | |
@Override | |
public void onCreate() { | |
super.onCreate(); | |
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); | |
Display display = windowManager.getDefaultDisplay(); | |
int width = (int) (display.getWidth() * 0.9); //Display 사이즈의 90% | |
params = new WindowManager.LayoutParams( | |
width, | |
WindowManager.LayoutParams.WRAP_CONTENT, | |
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, | |
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | |
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | |
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | |
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, | |
PixelFormat.TRANSLUCENT); | |
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); | |
rootView = layoutInflater.inflate(R.layout.call_popup_top, null); | |
ButterKnife.inject(this, rootView); | |
setDraggable(); | |
} | |
private void setDraggable() { | |
rootView.setOnTouchListener(new View.OnTouchListener() { | |
private int initialX; | |
private int initialY; | |
private float initialTouchX; | |
private float initialTouchY; | |
@Override | |
public boolean onTouch(View v, MotionEvent event) { | |
switch (event.getAction()) { | |
case MotionEvent.ACTION_DOWN: | |
initialX = params.x; | |
initialY = params.y; | |
initialTouchX = event.getRawX(); | |
initialTouchY = event.getRawY(); | |
return true; | |
case MotionEvent.ACTION_UP: | |
return true; | |
case MotionEvent.ACTION_MOVE: | |
params.x = initialX + (int) (event.getRawX() - initialTouchX); | |
params.y = initialY + (int) (event.getRawY() - initialTouchY); | |
if (rootView != null) | |
windowManager.updateViewLayout(rootView, params); | |
return true; | |
} | |
return false; | |
} | |
}); | |
} | |
@Override | |
public int onStartCommand(Intent intent, int flags, int startId) { | |
windowManager.addView(rootView, params); | |
setExtra(intent); | |
if (!TextUtils.isEmpty(call_number)) { | |
tv_call_number.setText(call_number); | |
} | |
return START_REDELIVER_INTENT; | |
} | |
private void setExtra(Intent intent) { | |
if (intent == null) { | |
removePopup(); | |
return; | |
} | |
call_number = intent.getStringExtra(EXTRA_CALL_NUMBER); | |
} | |
@Override | |
public void onDestroy() { | |
super.onDestroy(); | |
removePopup(); | |
} | |
@OnClick(R.id.btn_close) | |
public void removePopup() { | |
if (rootView != null && windowManager != null) windowManager.removeView(rootView); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment