package com.android.sidebar.views; import android.accessibilityservice.AccessibilityService; import android.annotation.SuppressLint; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.Toast; import com.android.sidebar.R; import com.android.sidebar.SideBarService; import com.android.sidebar.utils.PermissionUtil; /** * Sidebar left & right * * @author majh */ public class SideBarContent implements View.OnClickListener { private Context mContext; private boolean mLeft; private LinearLayout mContentView; private WindowManager mWindowManager; private LinearLayout mArrowView; private SideBarService mSideBarService; private ControlBar mControlBar; private LinearLayout mSeekBarView; private LinearLayout mAnotherArrowView; private int mTagTemp = -1; private static final int COUNT_DOWN_TAG = 1; private static final int COUNT_DWON_TIME = 5000; @SuppressLint("HandlerLeak") private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case COUNT_DOWN_TAG: goNormal(); break; } } }; LinearLayout getView(Context context, boolean left, WindowManager windowManager, WindowManager.LayoutParams params, LinearLayout arrowView, SideBarService sideBarService, LinearLayout anotherArrowView) { mContext = context; mLeft = left; mWindowManager = windowManager; mArrowView = arrowView; mSideBarService = sideBarService; mAnotherArrowView = anotherArrowView; // get layout LayoutInflater inflater = LayoutInflater.from(context); mContentView = (LinearLayout) inflater.inflate(R.layout.layout_content, null); // init click mContentView.findViewById(R.id.tv_brightness).setOnClickListener(this); mContentView.findViewById(R.id.tv_back).setOnClickListener(this); mContentView.findViewById(R.id.tv_home).setOnClickListener(this); mContentView.findViewById(R.id.tv_annotation).setOnClickListener(this); mContentView.findViewById(R.id.tv_volume).setOnClickListener(this); mContentView.findViewById(R.id.tv_backstage).setOnClickListener(this); LinearLayout root = mContentView.findViewById(R.id.root); if(left) { root.setPadding(15,0,0,0); }else { root.setPadding(0,0,15,0); } mWindowManager.addView(mContentView,params); return mContentView; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_brightness: removeOrSendMsg(true,true); brightnessPermissionCheck(); break; case R.id.tv_back: removeOrSendMsg(true,true); clearSeekBar(); mSideBarService.performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK); break; case R.id.tv_home: removeOrSendMsg(true,false); goNormal(); mSideBarService.performGlobalAction(AccessibilityService.GLOBAL_ACTION_HOME); break; case R.id.tv_annotation: removeOrSendMsg(true,false); goNormal(); annotationGo(); break; case R.id.tv_volume: removeOrSendMsg(true,true); brightnessOrVolume(1); break; case R.id.tv_backstage: removeOrSendMsg(true,false); goNormal(); mSideBarService.performGlobalAction(AccessibilityService.GLOBAL_ACTION_RECENTS); break; } } private void brightnessOrVolume(int tag) { if(mTagTemp == tag) { if(null != mSeekBarView) { removeSeekBarView(); }else { addSeekBarView(tag); } return; } mTagTemp = tag; if(null == mControlBar) { mControlBar = new ControlBar(); } if(null == mSeekBarView) { addSeekBarView(tag); }else { removeSeekBarView(); addSeekBarView(tag); } } private void addSeekBarView(int tag) { mSeekBarView = mControlBar.getView(mContext,mLeft,tag,this); mWindowManager.addView(mSeekBarView, mControlBar.mParams); } private void removeSeekBarView() { if(null != mSeekBarView) { mWindowManager.removeView(mSeekBarView); mSeekBarView = null; } } private void arrowsShow() { mContentView.setVisibility(View.GONE); mArrowView.setVisibility(View.VISIBLE); mAnotherArrowView.setVisibility(View.VISIBLE); } void clearSeekBar() { if(null != mSeekBarView) { mWindowManager.removeView(mSeekBarView); mSeekBarView = null; } } private void goNormal() { arrowsShow(); clearSeekBar(); } private void annotationGo() { Intent intent = new Intent(); intent.setComponent(new ComponentName("com.android.notes", "com.android.notes.MainActivity")); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { mContext.startActivity(intent); } catch (Exception e) { Toast.makeText(mContext, mContext.getString(R.string.app_not_find), Toast.LENGTH_SHORT).show(); } } void removeOrSendMsg(boolean remove, boolean send) { if(remove) { mHandler.removeMessages(COUNT_DOWN_TAG); } if(send) { mHandler.sendEmptyMessageDelayed(COUNT_DOWN_TAG,COUNT_DWON_TIME); } } /** * when AccessibilityService is forced closed */ void clearCallbacks() { if(null != mHandler) { mHandler.removeCallbacksAndMessages(null); mHandler = null; } } private void brightnessPermissionCheck() { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (!PermissionUtil.isSettingsCanWrite(mContext)) { goNormal(); Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS); intent.setData(Uri.parse("package:" + mContext.getPackageName())); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(intent); Toast.makeText(mContext,mContext.getString(R.string.setting_modify_toast),Toast.LENGTH_LONG).show(); }else { brightnessOrVolume(0); } }else { brightnessOrVolume(0); } } }